[bash] controllo dati [risolto]

Forum dedicato alla programmazione.

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.
Avatar utente
sya54M
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

[bash] controllo dati [risolto]

Messaggio da sya54M »

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 25 ago 2009, 18:13, modificato 1 volta in totale.

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven 7 set 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

Messaggio da raffaele181188 »

Con bash non credo si possa in modo "classico" (leggo di sì con altre shell), ma puoi sempre provarci con una RegEx

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [bash] controllo dati

Messaggio da conraid »

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
sya54M
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: [bash] controllo dati

Messaggio da sya54M »

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
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [bash] controllo dati

Messaggio da conraid »

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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [bash] controllo dati

Messaggio da d4z_c0nf »

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
414N
Iper Master
Iper Master
Messaggi: 2924
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [bash] controllo dati

Messaggio da 414N »

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.

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio 7 set 2006, 6:31

Re: [bash] controllo dati

Messaggio da paperboy »

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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [bash] controllo dati

Messaggio da d4z_c0nf »

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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 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

Messaggio da Mario Vanoni »

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.

Avatar utente
sya54M
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: [bash] controllo dati

Messaggio da sya54M »

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
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: [bash] controllo dati

Messaggio da sya54M »

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
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: [bash] controllo dati

Messaggio da sya54M »

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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [bash] controllo dati

Messaggio da d4z_c0nf »

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
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [bash] controllo dati

Messaggio da conraid »

perché devi impostare le modalità di errore, in questo caso prova con

Codice: Seleziona tutto

set -eu
all'inizio dello script

Rispondi