Test de variable

Résolu
alech -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
je me tourne vers vous une fois encore. Dans un script je récupéré plusieurs variable avec la fonction read
"read -p 'entre un nombre:' varA"

et je voudrais pouvoir vérifier si la variable est bien un entier ou décimal. J'ai essayé avec
["$(echo $varA | grep "^[[:digit]]*$")"]
ou
[ $var -eq 0 ] 2> /dev/null
if [ $? -eq 0 -o $? -eq 1 ]
ou encore
if let $var 2>/dev/null

rien ne fonctionne j'ai toujours des erreurs :s

merci d'avance

1 réponse

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    1
    1. alech
       
      Salut, j'ai déjà lu ce FAQ c'est d'ailleurs de là que vient ce que j'ai essayé. Mais dans mon cas ça ne marche pas
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > alech
       
      $ var="2.5"

      $ let $var
      bash: let: 2.5 : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".5")

      $ echo $?
      1

      $ var="2"

      $ let $var

      $ echo $?
      0
      0
    3. alech
       
      désolé mais je n'ai pas tout compris et ça ne fonctionne pas
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > alech
       
      On déclare une variable :
      var="2.5"

      On l'initialise en tant qu'entier via la commande let :
      let $var


      Dans la FAQ le résultat de la sortie d'erreur (2) est redirigé vers
      /dev/null
      pour ne pas avoir le résultat à l'écran, moi je l'ai laissé, d'où le message d'erreur "bash: let: 2.5 : erreur de syntaxe".

      Puis je teste le code retour :
      echo $?
      qui renvoie "1" donc faux ;-\

      Idem pour la suite mais avec un entier comme variable et tout se passe bien ;-)
      0
    5. alech
       
      lorsque j'utilise une commande avec /dev/nu]] j'ai systèmatiquement une erreure
      0