Téléchargement
illégal

Shell - Tester une variable numérique


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
Ce document intitulé « Shell - Tester une variable numérique » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  Shell - Tester une variable numérique
  •  Bash - test sur le type d'une variable » Bonjour, Je cherche a tester si une variable rentrée par l'utilisateur (read) est un entier de 4 digits. if [ $var = [[:digit:]{4}] ]; then ... ne fonctionne pas, alors qu 'un grep [[:digit:]{4}] fichier fonctionne, je ne comprend pas trop. merci de...
  •  [shell] tester une valeur numérique » Meilleure réponse: Salut, if [ "${valeur}" -lt "0" -o "${valeur}" -gt "35635" ] then echo "la valeur \"${valeur}\" est erronée." ;-))
  •  Tester une variable numérique » Bonjour, svp l'aide moi pour commencer cette exercie a) Par quel moyen simple est'il possible de tester qu'une variable Shell a une valeur numérique ? b) Ecrire une commande Shell admettant un argument n, dont on s'assurera qu'il est numérique et...
  •  Tester une variable numérique » salut , est ce qu'il ya un moyen simple pour tester qu'une variable Shell a une valeur numérique ?
  •  Csh echo " " puis test if.??? (Résolu) » Bonjour, je travail sur un petit programme en c shell dans lequel je voudrai afficher une variable pour faire du debuggage. Le problème c'est que cette variable qui est généralement un nombre entier peut devenir rien du tous. quand je fais > echotc...
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
Shell - Affichage d'un fichier binaire: Terminal illisible
Exécuter un script shell