Repository 32bit  Forum
Repository 64bit  Wiki

[bash] controllo dati [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[bash] controllo dati [risolto]

Messaggioda sya54M » mar ago 25, 2009 11:14

ciao, sto aggiornando uno script volendo aggiungerci un controllo delle opzioni passate alla riga di comando.
mi chiedevo se è possibile controllare se $1 è un valore numerico.
grazie
Ultima modifica di sya54M il mar ago 25, 2009 18:13, modificato 1 volta in totale.
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1341
Iscritto il: mer giu 06, 2007 14:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.9.x
Desktop: KDE 4.10

Re: [bash] controllo dati

Messaggioda raffaele181188 » mar ago 25, 2009 11:22

Con bash non credo si possa in modo "classico" (leggo di sì con altre shell), ma puoi sempre provarci con una RegEx
Avatar utente
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Re: [bash] controllo dati

Messaggioda conraid » mar ago 25, 2009 11:25

sya54M ha scritto:ciao, sto aggiornando uno script volendo aggiungerci un controllo delle opzioni passate alla riga di comando.
mi chiedevo se è possibile controllare se $1 è un valore numerico.
grazie


dalla bash mi sembra di no, dovresti farlo tu con qualche espressione regolare o qualche comando

altrimenti con
Codice: Seleziona tutto
declare -i

se lo usi con una variabile prima (o durante) del suo assegnamento può assumere solamente valori interi

quindi nel tuo caso fai
Codice: Seleziona tutto
declare -i variabile

poi
Codice: Seleziona tutto
variabile=$1

se non è intero da errore

prova però :-)
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11884
Iscritto il: gio lug 14, 2005 0:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 11:58

non ho capito cosa fa declare

e mi sapete dire perchè in questo controllo:
Codice: Seleziona tutto
if [ $# -ne "1" -o $1 = "--help" -o $1 = "-h" ]

la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1341
Iscritto il: mer giu 06, 2007 14:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.9.x
Desktop: KDE 4.10

Re: [bash] controllo dati

Messaggioda conraid » mar ago 25, 2009 12:09

sya54M ha scritto:non ho capito cosa fa declare


http://www.pluto.it/files/ildp/guide/ab ... reref.html

sya54M ha scritto:e mi sapete dire perchè in questo controllo:
Codice: Seleziona tutto
if [ $# -ne "1" -o $1 = "--help" -o $1 = "-h" ]

la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore


http://www.pluto.it/files/ildp/guide/ab ... n-ops.html
guarda se la segnalazione in basso ti è di aiuto
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11884
Iscritto il: gio lug 14, 2005 0:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 12:19

sya54M ha scritto:non ho capito cosa fa declare

e mi sapete dire perchè in questo controllo:
Codice: Seleziona tutto
if [ $# -ne "1" -o $1 = "--help" -o $1 = "-h" ]

la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore


Scusa ma "-ne" che rappresenta?
Io ricordo che -n stringa , si usa per verificare se la stringa non è vuota. E -e pathname , se il file esiste. Tu volevi un NOT EQUAL? In tal caso devi usare != .
Scusami nel caso avessi io sbagliato ad interpretare.
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1266
Iscritto il: mar mar 14, 2006 19:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: current64
Kernel: 3.2.13
Desktop: awesome 3.4.11

Re: [bash] controllo dati

Messaggioda 414N » mar ago 25, 2009 13:05

d4z_c0nf ha scritto:Scusa ma "-ne" che rappresenta?
Io ricordo che -n stringa , si usa per verificare se la stringa non è vuota. E -e pathname , se il file esiste. Tu volevi un NOT EQUAL? In tal caso devi usare != .
Scusami nel caso avessi io sbagliato ad interpretare.
rock

-ne serve se stai confrontando valori numerici, != se stai confrontando stringhe di caratteri.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2844
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [bash] controllo dati

Messaggioda paperboy » mar ago 25, 2009 13:13

sya54M ha scritto:non ho capito cosa fa declare

e mi sapete dire perchè in questo controllo:
Codice: Seleziona tutto
if [ $# -ne "1" -o $1 = "--help" -o $1 = "-h" ]

la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore



in bash -ne -lt -eq etc.... confrontano i numeri se li confronti con le stringhe ogni stringa ha valore 0

per fare il confronto di stringhe si usano i modificatori < > = != e confrontano le stringhe in ordine alfabetico.
paperboy
Linux 1.0
Linux 1.0
 
Messaggi: 60
Iscritto il: gio set 07, 2006 6:31

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 13:14

414N ha scritto:
d4z_c0nf ha scritto:Scusa ma "-ne" che rappresenta?
Io ricordo che -n stringa , si usa per verificare se la stringa non è vuota. E -e pathname , se il file esiste. Tu volevi un NOT EQUAL? In tal caso devi usare != .
Scusami nel caso avessi io sbagliato ad interpretare.
rock

-ne serve se stai confrontando valori numerici, != se stai confrontando stringhe di caratteri.


Ok, ma "1" però è una stringa, non un valore numerico. E poi da quel che sapevo per le condizioni numeriche vanno usati ( ) e non [ ] ...
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1266
Iscritto il: mar mar 14, 2006 19:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: current64
Kernel: 3.2.13
Desktop: awesome 3.4.11

Re: [bash] controllo dati

Messaggioda Mario Vanoni » mar ago 25, 2009 13:36

sya54M ha scritto:non ho capito cosa fa declare

e mi sapete dire perchè in questo controllo:
Codice: Seleziona tutto
if [ $# -ne "1" -o $1 = "--help" -o $1 = "-h" ]

la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore



if [ $# -ne 1 -o ...

$# (integer) -ne "1" (string) e` un nonsenso.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 13:48

conraid ha scritto:http://www.pluto.it/files/ildp/guide/ab ... reref.html

capito.
conraid ha scritto:http://www.pluto.it/files/ildp/guide/ab ... n-ops.html
guarda se la segnalazione in basso ti è di aiuto

si, il problema sembra essere quello ma ho fatto:
Codice: Seleziona tutto
if [ $# -ne "1" -o x$1 = "--help" -o x$1 = "-h" ]

ed ora funziona il primo controllo ma non più gli altri 2 :?
d4z_c0nf ha scritto:Ok, ma "1" però è una stringa, non un valore numerico. E poi da quel che sapevo per le condizioni numeriche vanno usati ( ) e non [ ] ...

con o senza virgolette non cambia nulla e gli operatori come quello che ho usato io sono apposta per metterli tra parentesi quadre
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1341
Iscritto il: mer giu 06, 2007 14:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.9.x
Desktop: KDE 4.10

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 13:54

sya54M ha scritto:si, il problema sembra essere quello ma ho fatto:

Codice: Seleziona tutto
if [ $# -ne "1" -o x$1 = "--help" -o x$1 = "-h" ]


ed ora funziona il primo controllo ma non più gli altri 2 :?

scusate avevo capito male io la soluzione, ho fatto:
Codice: Seleziona tutto
if [ $# -ne "1" -o x$1 = x"--help" -o x$1 = x"-h" ]

ed ora funzionano tutti i controlli.
ora devo solo vedere di tipizzare la variabile
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1341
Iscritto il: mer giu 06, 2007 14:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.9.x
Desktop: KDE 4.10

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 14:05

conraid ha scritto:quindi nel tuo caso fai

Codice: Seleziona tutto
declare -i variabile


poi

Codice: Seleziona tutto
variabile=$1


se non è intero da errore

prova però :-)

non da nessun errore, io gli passo una stringa al posto di un numero e lui assegna 0 alla variabile
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1341
Iscritto il: mer giu 06, 2007 14:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.9.x
Desktop: KDE 4.10

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 14:09

sya54M ha scritto:
conraid ha scritto:http://www.pluto.it/files/ildp/guide/ab ... reref.html

capito.
conraid ha scritto:http://www.pluto.it/files/ildp/guide/ab ... n-ops.html
guarda se la segnalazione in basso ti è di aiuto

si, il problema sembra essere quello ma ho fatto:
Codice: Seleziona tutto
if [ $# -ne "1" -o x$1 = "--help" -o x$1 = "-h" ]

ed ora funziona il primo controllo ma non più gli altri 2 :?
d4z_c0nf ha scritto:Ok, ma "1" però è una stringa, non un valore numerico. E poi da quel che sapevo per le condizioni numeriche vanno usati ( ) e non [ ] ...

con o senza virgolette non cambia nulla e gli operatori come quello che ho usato io sono apposta per metterli tra parentesi quadre


Bene, errore mio! :thumbright:
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1266
Iscritto il: mar mar 14, 2006 19:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: current64
Kernel: 3.2.13
Desktop: awesome 3.4.11

Re: [bash] controllo dati

Messaggioda conraid » mar ago 25, 2009 14:10

perché devi impostare le modalità di errore, in questo caso prova con
Codice: Seleziona tutto
set -eu

all'inizio dello script
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11884
Iscritto il: gio lug 14, 2005 0:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite