2014-06-16

Verifica in bash se una variabile è numerica

Oggi una mia necessità era di verificare se una variabile era di tipo numerico ed il valore maggiore o uguale a zero.
Dopo qualche tentativo sono arrivato alla conclusione che il mio modo preferito di eseguire la verifica era:
A=X
B=5
[ $A -ge 0 ] 2>/dev/null && echo Numerico
[ $B -ge 0 ] 2>/dev/null && echo Numerico
l'aggiunta di "2>/dev/null" permette di non ottenere il messaggio di errore "-bash: [: A: integer expression expected"
Il numero deve essere positivo oppure zero, se si vogliono verificare anche i numeri negativi l'allungo un pochino:
[ $A -ge 0 -o $A -le 0 ] 2>/dev/null && echo Numerico
Per una prova più ampia:
for VAR in 0 1 2 3 4 5 50 100 1000 -1 -2 -5 -50 -100 -100 A C 2A 10X X1 X5
do
[ $VAR -ge 0 -o $VAR -le 0 ] 2>/dev/null && echo $VAR num || echo $VAR NON num
done
Il funzionamento si basa sul comando built-in [ della bash  che implementa il comando test di unix, restituisce un valore di ritorno vero/true solo se la condizione è valida e corretta, quindi confrontando numericamente con l'operatore -ge il valore della variabile rispetto allo zero per verificare se è maggiore o uguale si ottiene vero solo se il contenuto della variabile è un numero valido, altrimenti si ottiene falso. Se il contenuto della variabile non fosse un numero valido allora si otterrebbe il messaggio di errore che possiamo sopprimere con 2>/dev/null che lo redirige verso la device virtuale che distrugge tutto quello che riceve, come se fosse un buco nero.

2 commenti:

  1. manca un "echo" dopo "||" altrimenti quando si testano i valori non numerici lo script va in errore.

    (il capcha e' veramente uno stracciamento di cazzo, mettine uno che fa domande del tipo "quanto fa 34/17", non il riconoscimento di scritte stropie, che devo ripeterlo 3-4 volte, vacca di una madonna!

    RispondiElimina
    Risposte
    1. Grazie per la segnalazione, ho provveduto a correggere.

      Sul captcha mi sono affidato a quello fornito da blogspot al momento dell'apertura del blog, posso verificare se siano disponibili altri metodi simili a quello che mi consigli.

      In base al tono da te usato dovrei cancellare il tuo post ma visto che mi hai segnalato un mio errore ed un consiglio, lo manterrò per dimostrarti che te ne sono grato, per il futuro ti chiedo di moderare i termini.

      Elimina