Tester une variable numérique

bleach -  
 bleach -
salut ,
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

  1. zoe27 Messages postés 191 Statut Membre 4
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Regarde ici
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. bleach
     
    -----------------------------------------------------------------------------------------------------------------------------------------------------------
    #!/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
  5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  6. bleach
     
    merci beaucoup pour l'explication
    0