[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: 1579
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.6.x
Desktop: KDE
Località: (Salerno)
Contatta:

[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
raffaele181188
Packager
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

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

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
sya54M
Master
Master
Messaggi: 1579
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.6.x
Desktop: KDE
Località: (Salerno)
Contatta:

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

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
d4z_c0nf
Packager
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

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
414N
Iper Master
Iper Master
Messaggi: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: current
Kernel: 3.14.23
Desktop: KDE4
Località: Bulagna
Contatta:

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.

paperboy
Linux 1.0
Linux 1.0
Messaggi: 60
Iscritto il: gio set 07, 2006 6:31

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.

Avatar utente
d4z_c0nf
Packager
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

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

Mario Vanoni
Iper Master
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

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.

Avatar utente
sya54M
Master
Master
Messaggi: 1579
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.6.x
Desktop: KDE
Località: (Salerno)
Contatta:

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
Master
Master
Messaggi: 1579
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.6.x
Desktop: KDE
Località: (Salerno)
Contatta:

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
Master
Master
Messaggi: 1579
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.6.x
Desktop: KDE
Località: (Salerno)
Contatta:

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
d4z_c0nf
Packager
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

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

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


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite