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. 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.
  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. 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
  4. 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. 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. PS: j'obtiens un [: g: integer expression expected ou encore le unary operator expected ...