[Shell] Tester une variable numérique

Dernière mise à jour le 19 novembre 2009 à 15:10 par marlalapocket
Publié par jipicy

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".


   Sommaire


   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.

Retour sommaire


   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


Retour sommaire


   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


Retour sommaire


  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


Retour sommaire


   Remerciement


Je tiens à remercier lami20j pour son astuce avec la commande "expr" et surtout pour la déclaration de variable de type entier.
Meilleures réponses pour « Tester une variable numérique » dans :
Le remplacement de variables en shell Bash Voir=Le remplacement de variables= Introduction Il peut s'avérer utile de s'assurer qu'une variable est bien définie avant de procéder à son remplacement, ou tout simplement de s'assurer que celle-ci n'est pas vide, et dans ce cas de l'initialiser avec...
Cadre photo numérique : comment choisir ? VoirUn cadre photo numérique a l’avantage de pouvoir diffuser vos photos au format numérique sans ordinateur. Exit le cadre photo classique pour lequel il faut imprimer les photos ! Côté technologies, du plus simple au plus sophistiqué, nos astuces...
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Collection CommentÇaMarche.net