[bash] controllo dati [risolto]
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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 della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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 della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
[bash] controllo dati [risolto]
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
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.
- raffaele181188
- Packager
- Messaggi: 789
- Iscritto il: ven set 07, 2007 21:40
- Nome Cognome: Raffaele
- Slackware: current
- Kernel: 2.6.29.6
- Desktop: KDE 4.3
- Distribuzione: Ubuntu
- Località: DearSkin (FG)
Re: [bash] controllo dati
Con bash non credo si possa in modo "classico" (leggo di sì con altre shell), ma puoi sempre provarci con una RegEx
- conraid
- Staff
- Messaggi: 13045
- Iscritto il: gio lug 14, 2005 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Località: Livorno
- Contatta:
Re: [bash] controllo dati
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ò

- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [bash] controllo dati
non ho capito cosa fa declare
e mi sapete dire perchè in questo controllo:
la prima condizione non funziona e le altre 2 si? risulta sempre non verificata anche se non viene passato nessun valore
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
- conraid
- Staff
- Messaggi: 13045
- Iscritto il: gio lug 14, 2005 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Località: Livorno
- Contatta:
Re: [bash] controllo dati
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
- d4z_c0nf
- Packager
- Messaggi: 1296
- Iscritto il: mar mar 14, 2006 18:07
- Nome Cognome: Rocco Aliberti
- Slackware: 14.1-64bit
- Kernel: 3.10.17
- Desktop: xfce
- Località: Salerno
Re: [bash] controllo dati
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
- 414N
- Iper Master
- Messaggi: 2895
- Iscritto il: mer feb 13, 2008 16:19
- Slackware: 14.2
- Kernel: 4.4.19
- Desktop: KDE4
- Località: Bulagna
- Contatta:
Re: [bash] controllo dati
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.
Re: [bash] controllo dati
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.
- d4z_c0nf
- Packager
- Messaggi: 1296
- Iscritto il: mar mar 14, 2006 18:07
- Nome Cognome: Rocco Aliberti
- Slackware: 14.1-64bit
- Kernel: 3.10.17
- Desktop: xfce
- Località: Salerno
Re: [bash] controllo dati
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
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun set 03, 2007 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [bash] controllo dati
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.
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [bash] controllo dati
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
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [bash] controllo dati
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
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [bash] controllo dati
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
- d4z_c0nf
- Packager
- Messaggi: 1296
- Iscritto il: mar mar 14, 2006 18:07
- Nome Cognome: Rocco Aliberti
- Slackware: 14.1-64bit
- Kernel: 3.10.17
- Desktop: xfce
- Località: Salerno
Re: [bash] controllo dati
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!

rock
- conraid
- Staff
- Messaggi: 13045
- Iscritto il: gio lug 14, 2005 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Località: Livorno
- Contatta:
Re: [bash] controllo dati
perché devi impostare le modalità di errore, in questo caso prova con
all'inizio dello script
Codice: Seleziona tutto
set -eu
all'inizio dello script