Repository 32bit  Forum
Repository 64bit  Wiki

[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.

[bash] controllo dati [risolto]

Messaggioda sya54M » mar ago 25, 2009 10: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 17:13, modificato 1 volta in totale.
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1430
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [bash] controllo dati

Messaggioda raffaele181188 » mar ago 25, 2009 10: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 20: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 10: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: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 10: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: 1430
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [bash] controllo dati

Messaggioda conraid » mar ago 25, 2009 11: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: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 11: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: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [bash] controllo dati

Messaggioda 414N » mar ago 25, 2009 12: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: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [bash] controllo dati

Messaggioda paperboy » mar ago 25, 2009 12: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 5:31

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 12: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: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [bash] controllo dati

Messaggioda Mario Vanoni » mar ago 25, 2009 12: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 20: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 12: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: 1430
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 12: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: 1430
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 13: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: 1430
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [bash] controllo dati

Messaggioda d4z_c0nf » mar ago 25, 2009 13: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: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [bash] controllo dati

Messaggioda conraid » mar ago 25, 2009 13: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: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti