Bash: comparaison

Bonjour,

Hé oui encore un problème ce soir: je veux vérifier (en bash) si la personne ne s'est pas trompée de frappe: 0 pour oui et 1 pour non par exemple.

En effet j'ai testé plusieurs bricoles puisque les principales ne marchaient pas car le =! semble comparer des lettres et -ne des chiffres...
Seulement voilà si jamais l'utilisateur tape un "a" au lieu d'un "1" ... comment le vérifier?

Merci d'avance pour vos réponses :)

6 réponses

  1. PS: j'obtiens un [: g: integer expression expected ou encore le unary operator expected ...
    1. if élémentTapéAuClavier != [0-9]
      action
      else action

      Nan?
      1. enfin remplacer [0-9] par [0-1]
      2. Merci de ta réponse.
        J'avais fait un truc de ce genre mais peut-être pas tourné de cette maniere, je vais voir.. :)
      3. Si tu veux que l'utilisateur ne rentre que 0 ou 1, utilise cette méthode =). Ou sinon
        If élément -eq 1
        else
        if élément -eq 0
        else
    2. redirection='0'
      
      echo -e "Tapez ${rougefonce}0${neutre} pour entrer un lien ou ${jaune}1${neutre} pour traiter les liens du fichier \"link\""
      	
      	read redirection
      
      while [ $redirection =! "[0-1]" ] #Vérification si le choix est correct
      do
      		echo -e "Entrez ${rougefonce}0${neutre} ou ${jaune}1${neutre}!"
      		read redirection
      	
      done


      Toujours le même problème : /

      Même avec =! '[0-1]' si on tape une lettre ca ne marche pas
      1. essaye avec :

        redirection=0 
        
        echo -e "Tapez ${rougefonce}0${neutre} pour entrer un lien ou ${jaune}1${neutre} pour traiter les liens du fichier \"link\"" 
          
         read redirection 
        
        while [ $redirection =! [0-1] ] #Vérification si le choix est correct 
        do 
          echo -e "Entrez ${rougefonce}0${neutre} ou ${jaune}1${neutre}!" 
          read redirection 
          
        done
        1. ./BASHv10.0.sh: line 19: [: =!: binary operator expected
          : / avec une lettre ou un chiffre pareil
      2. Contributeur
        Salut,

        Voir dans la FAQ : Shell - Tester une variable numérique

        ;-))
        1. Je vois ce que ces bouts de code font mais je ne sais pas comment m'en servir pour les mettres dans un while...
        2. Parce que je vérifie si la variable est de type numérique dans ce cas je vérifie si elle est égale à 0 ou 1 ... et sinon? je reboucle??? ça serait infinie...
      3. Contributeur
        $ cat foo.sh 
        #! /bin/bash
        
        #set -xv
        
        while true
        do
           read -p "Tapez 0 ou 1 : " reponse
           if [[ ${reponse} != [01] ]]
           then 
        	echo "Pas bon."
        	continue
           else 
        	echo "C'est bon."
        	break
           fi
        done
        
        $ ./foo.sh 
        Tapez 0 ou 1 : a
        Pas bon.
        Tapez 0 ou 1 : l
        Pas bon.
        Tapez 0 ou 1 : 5
        Pas bon.
        Tapez 0 ou 1 : B
        Pas bon.
        Tapez 0 ou 1 : 1
        C'est bon.
        
        $
        1. Ouch d'accord merci.. j'aurais pas trouvé je pense.
          Je verrais ça demain je vous tiens au courant.
          Merci encore.