Tester une variable numérique
bleach
-
bleach -
bleach -
salut ,
est ce qu'il ya un moyen simple pour tester qu'une variable Shell a une valeur numérique ?
est ce qu'il ya un moyen simple pour tester qu'une variable Shell a une valeur numérique ?
Configuration: Windows XP Firefox 2.0.0.17
7 réponses
-
quel shel? sh, csh ou bash?
expression?expression1;expression2
de tête, mais il suffit de regarder la doc de ton shell pour le syntaxe. si expression est TRUE tu obtiens résultat expression2, autrement expression2 -
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-----------------------------------------------------------------------------------------------------------------------------------------------------------
#!/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
------------------------------------------------------------------------------------------------------------------------------------------------------------
j'ai pas compris : ce teste |$var -eq 0 ] renvoie 0 si vrai , pourquoi en a fait si la valeur renvoyer = 0 ou 1 ->chaine est numerique
quelqu'un peux m'expliquer ca -
Re-
Je reconnais que ce n'est pas évident à comprendre ;-\
En fait on teste si le paramètre passé au script est égal à 0 (zéro).
Dans le cas où le paramètre est numérique (admettons qu'on passe 5 en paramètre), la condition est évaluée :[tmpfs]$ ./foo.sh 5 var=$1 + var=5 [ $var -eq 0 ] 2> /dev/null + '[' 5 -eq 0 ']' if [ $? -eq 0 -o $? -eq 1 ] then echo "La chaîne est numérique" else echo "La chaîne n'est pas numérique" fi + '[' 1 -eq 0 -o 1 -eq 1 ']' + echo 'La chaîne est numérique' La chaîne est numérique [tmpfs]$Le test est faux, vu que 5 est supérieur à 0 et renvoie donc la valeur faux (1).
Cette condition est à nouveau évaluée dans le second test :if [ 1 -eq 0 -o 1 -eq 1 ]
Ici "$?" (le code retour) vaut donc "1" et rentre parfaitement dans une des deux conditions.
Par contre si on passe un caractère non numérique (A par exemple) :[tmpfs]$ ./foo.sh A var=$1 + var=A [ $var -eq 0 ] 2> /dev/null + '[' A -eq 0 ']' if [ $? -eq 0 -o $? -eq 1 ] then echo "La chaîne est numérique" else echo "La chaîne n'est pas numérique" fi + '[' 2 -eq 0 -o 2 -eq 1 ']' + echo 'La chaîne n'\''est pas numérique' La chaîne n'est pas numérique [tmpfs]$La 1ère condition n'est pas satisfaite, et génère une erreur (non visible vu que les erreurs sont envoyées dans /dev/null) renvoyant le code retour "2". Ce code ne rentrant pas dans la seconde condition + '[' 2 -eq 0 -o 2 -eq 1 ']' le test échoue et par conséquent la variable n'est pas numérique.
Pour bien comprendre il serait plus judicieux d'écrire le script comme suit :#!/bin/bash var=$1 [ $var -eq 0 ] 2>&1 if [ $? -eq 0 -o $? -eq 1 ] then echo "La chaîne est numérique" else echo "La chaîne n'est pas numérique" fiCe qui donnerait avec une valeur non numérique :[tmpfs]$ ./foo.sh A ./foo.sh: line 5: [: A: integer expression expected La chaîne n'est pas numérique [tmpfs]$
;-)) -