Tester une variable numérique

Fermé
bleach - 2 nov. 2008 à 01:27
 bleach - 2 nov. 2008 à 12:19
salut ,
est ce qu'il ya un moyen simple pour tester qu'une variable Shell a une valeur numérique ?
A voir également:

7 réponses

zoe27 Messages postés 188 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 2 février 2013 4
2 nov. 2008 à 02:17
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
0
c'est le sh
et merci
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 nov. 2008 à 11:06
Salut,

Regarde ici
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 nov. 2008 à 11:06
Salut,

Voir dans la FAQ : Tester une variable numérique
0

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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 nov. 2008 à 12:07
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"
fi
Ce 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]$


;-))
0
merci beaucoup pour l'explication
0