[Tips Code] Tests sur variables numériques

janvier 24, 2011 · Posted in Linux Commandes · Comment 

Dans la série des trucs et astuces, voici des bouts de code que j’utilise quand j’en ai besoin.
Dans un environnement shell, les variables sont, par défaut, de type chaîne de caractères.
Voici quelques astuces pour tester la valeur numérique d’une variable.
Avec grep
#!/bin/bash
 
var=$1
if [ "$(echo $var | grep "^[ [:digit:] ]*$")" ]
then
 echo "La chaîne est numérique"
fi
Avec expr
#!/bin/bash
 
var=$1
expr $var + 0 1>/dev/null 2>&1
statut=$? 
if test $statut -lt 2 
then 
 echo "$var" numérique 
fi
Avec test
On évalue à l’aide de la commande « test » (représentée ici par les crochets « [ » et « ] ») si la valeur de la variable « $var » est égale à zéro (0), puis on évalue le code retour ($?) pour ses 2 états de sortie (vrai ou faux, autrement dit 0 ou 1), qui dans un cas comme dans l’autre serait donc de type entier. Dans tout autre cas, code retour supérieur à 1, échec de l’évaluation.
#!/bin/bash
 
var=$1
[ $var -eq 0 ] 2> /dev/null
if [ $? -eq 0 -o $? -eq 1 ]
then
 echo "La chaîne est numérique"
fi
Avec le type entier
La création d’une variable de type entier doit au préalable être déclarée à l’aide de la commande « typeset -i » ou « let ».
Voici donc un exemple implémentant la commande « let » pour déterminer si une variable est bien de type « entier »
#!/bin/bash
 
var=$1
 
if let $var 2>/dev/null 
then
 echo "$var numérique"
else
 echo "$var non numérique"
fi