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

Re: [bash] controllo dati

Messaggioda sya54M » mar ago 25, 2009 14: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
conraid
Staff
Staff
Messaggi: 12689
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: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
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 15: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
conraid
Staff
Staff
Messaggi: 12689
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 15: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
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 15:43

sto provando, ma declare/typeset ritorna sempre 0

Codice: Seleziona tutto

typeset -i arg=$1
val=$?
if [ $val -ne "0" ]

Avatar utente
conraid
Staff
Staff
Messaggi: 12689
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 15: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
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 16: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?

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
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: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.

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 17: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
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 17: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

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
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 17: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.

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 17: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
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 17:45

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

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
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 17:49

expr 0 + 3,1345 dà errore
expr 0 + 3.123 dà errore

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
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 17: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.


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti