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 ?
Configuration: Windows XP
Firefox 2.0.0.17

7 réponses

  1. 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
    1. -----------------------------------------------------------------------------------------------------------------------------------------------------------
      #!/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
      1. Modérateur
        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]$


        ;-))