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.

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 13:21

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

all'inizio dello script

:) bene, ora da l'errore, però vorrei specificare io il messaggio di errore invece di stampare
unbound variable
posso?
grazie mille a tutti, ...soprattutto a corrado :lol:
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 13:29

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

all'inizio dello script

:) bene, ora da l'errore, però vorrei specificare io il messaggio di errore invece di stampare
unbound variable
posso?
grazie mille a tutti, ...soprattutto a corrado :lol:


e di cosa, io conosco anche poco di bash.
Penso che per specificare meglio l'errore devi fare tu dei controlli

p.s.
in fase di debug usa sempre set -eu
io set -e lo uso anche negli slackbuild

p.s.2
non per essere supponente o altro, ma una lettura a
http://www.pluto.it/files/ildp/guide/abs/
o meglio ancora all'originale in inglese
http://tldp.org/LDP/abs/html/
la darei
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
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 14:03

conraid ha scritto:Penso che per specificare meglio l'errore devi fare tu dei controlli

si ma mi chiedevo in che modo, dovrei fare il controllo dell' exit status di declare nell if di prima...
conraid ha scritto:non per essere supponente o altro, ma una lettura a
http://www.pluto.it/files/ildp/guide/abs/
o meglio ancora all'originale in inglese
http://tldp.org/LDP/abs/html/
la darei

conosco quella guida, quando non ricordo qualcosa cerco li, ma leggerla tutta sarebbe massacrante... in inglese poi non ne parliamo :lol:
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 14:32

sya54M ha scritto:
conraid ha scritto:Penso che per specificare meglio l'errore devi fare tu dei controlli

si ma mi chiedevo in che modo, dovrei fare il controllo dell' exit status di declare nell if di prima...


non saprei, controlla in altro modo, tipo se mette sempre zero controlli se è zero, ma sinceramente non saprei
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
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 14:43

sto provando, ma declare/typeset ritorna sempre 0
Codice: Seleziona tutto
typeset -i arg=$1
val=$?
if [ $val -ne "0" ]
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 14:52

sya54M ha scritto:sto provando, ma declare/typeset ritorna sempre 0
Codice: Seleziona tutto
typeset -i arg=$1
val=$?
if [ $val -ne "0" ]


intendevo di controllare il valore, a questo punto devi fare "a mano"
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
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 15:05

conraid ha scritto:intendevo di controllare il valore, a questo punto devi fare "a mano"

cosa intendi con "a mano"?
$1 deve poter essere un qualunque valore numerico, non un valore particolare, cioè non deve essere compreso in un range.
come faccio a controllarlo?
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 sixjan » mar ago 25, 2009 15:51

Io controllerei così:

Codice: Seleziona tutto
if [ ! -z `echo -n $1 | tr -d [0-9]` ]; then
  echo $1 non è un numero intero!
  exit 1
fi


però in questo modo ti dà errore anche con 11,0 o 5.0. Un altro modo è usare expr

expr $1 + 0

ti dà errore se $1 non è un numero intero. Però in questo caso c'è un limite alla grandezza di $1 (alcune migliaia di miliardi.
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 16:22

sixjan ha scritto:Io controllerei così:

Codice: Seleziona tutto
if [ ! -z `echo -n $1 | tr -d [0-9]` ]; then
echo $1 non è un numero intero!
exit 1
fi

non funziona, quel "tr -d [0-9]" non seleziona solo i numeri, ma credo che siamo sulla giusta strada
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 16:29

se diventa
Codice: Seleziona tutto
tr -dc [0-9]
allora seleziona solo i numeri, ma in questo caso accetterebbe anche una stringa tipo "pippo54", per lui sarebbe comunque un intero: 54
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 sixjan » mar ago 25, 2009 16:29

Sì, infatti. tr -d [0-9] cancella i numeri. Se $1 è composto solo da numeri
il codice che ho scritto restituisce una stringa vuota, quindi $1 è un numero intero senza virgole.
Quindi se $1 è NON è un numero intero il mio esempio esce con un errore.
Puoi provare lo script che ho postato con dei numeri e mi dici dove è l'errore, o almeno
mi scrivi che tipo di numeri devi controllare (interi, con virgola...).

EDIT: mi sa che stai facendo un po' di confusione. Salva il mio script e
lancialo così:

sh script $1

vedrai che ti segnalerà sempre quando $1 NON è un numero.
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 16:43

deve accettare qualunque numero, sia reale che naturale.

il tuo script l'ho provato e il risultato è quello che ho scritto prima.

ora sto provando con expr come mi hai sugerito, e controllando l'exit status di expr sembra che funziona bene :)
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 16:45

però stavo pensando che se nel frattempo che viene controlato si chiude un qualunque altro processo, leggerebbe l'exit status sbagliato
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
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 sixjan » mar ago 25, 2009 16:49

expr 0 + 3,1345 dà errore
expr 0 + 3.123 dà errore
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] controllo dati

Messaggioda sixjan » mar ago 25, 2009 16:53

sya54M ha scritto:però stavo pensando che se nel frattempo che viene controlato si chiude un qualunque altro processo, leggerebbe l'exit status sbagliato


No. In uno script o in console $? ti dà il codeice d'errore dell'ultimo
comando lanciato in quello script o in quella console. Non monitorizza
tutto il sistema.
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite