Tester une variable numérique
Préambule

Dans un environnement "
shell", les variables sont, par défaut, de type "
chaîne de caractères".
De ce fait il n'est pas possible de déclarer une variable de type "
entier" (
enfin, ceci n'est pas tout à fait vrai, mais nous verrons ça en fin d'article).
Donc jusqu'à présent il fallait user de petites astuces plus ou moins "
alambiquées" pour parvenir à définir si oui ou non une variable était de type "
entier".
Exemples de tests
En voici trois faisant appel respectivement à la commande "grep", à la commande "expr" et à la commande "test" couplée à certaines instructions de contrôle comme le code retour d'une commande.
Note : Dans les exemples suivants, nous considèrerons que la variable "$var" est initialisée d'après le paramètre "$1" passé directement sur la ligne de commande à la suite de l'appel de chaque script.
grep
Note : Dans l'exemple qui suit, l'expression "[ [:digit:] ]" doit s'écrire sans les espaces entres les double-crochets.
#!/bin/bash
# script_grep.sh
var=$1
if [ "$(echo $var | grep "^[ [:digit:] ]*$")" ]
then
echo "La chaîne est numérique"
fi
Retour sommaire
expr
Évaluation du code retour (
ici dans la variable "$statut") après un test sur une opération arithmétique à l'aide de la commande "expr".
#!/bin/sh
# script_expr.sh
var=$1
expr $var + 0 1>/dev/null 2>&1
statut=$?
if test $statut -lt 2
then
echo "$var" numérique
fi
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
# script_test.sh
var=$1
[ $var -eq 0 ] 2> /dev/null
if [ $? -eq 0 -o $? -eq 1 ]
then
echo "La chaîne est numérique"
fi
Variable de type "entier"
Comme souligné en tout début d'article, il est tout a fait possible d'initialiser une variable de type "
entier" grâce au shell "POSIX".
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/sh
# script_let.sh
var=$1
if let $var 2>/dev/null
then
echo "$var numérique"
else
echo "$var non numérique"
fi
Noter que la ligne "
if let $var 2>/dev/null" aurait très bien pu s'écrire sous l'une ou l'autre de ces formes :
if let var 2>/dev/null
ou
if ((var)) 2>/dev/null
Remerciement
Je tiens à remercier
lami20j pour son astuce avec la commande "expr" et surtout pour la déclaration de variable de type entier.
Publié par
jipicy -
Dernière mise à jour le 19 juin 2011 à 18:18 par @ntoine