Bash: comparaison

gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   -  
gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   -
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. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
     
    PS: j'obtiens un [: g: integer expression expected ou encore le unary operator expected ...
    0
  2. flav1313 Messages postés 812 Statut Membre 100
     
    if élémentTapéAuClavier != [0-9]
    action
    else action

    Nan?
    0
    1. flav1313 Messages postés 812 Statut Membre 100
       
      enfin remplacer [0-9] par [0-1]
      0
    2. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
       
      Merci de ta réponse.
      J'avais fait un truc de ce genre mais peut-être pas tourné de cette maniere, je vais voir.. :)
      0
    3. flav1313 Messages postés 812 Statut Membre 100
       
      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
      0
  3. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
     
    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
    0
  4. flav1313 Messages postés 812 Statut Membre 100
     
    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
    0
    1. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
       
      ./BASHv10.0.sh: line 19: [: =!: binary operator expected
      : / avec une lettre ou un chiffre pareil
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

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

    ;-))
    0
    1. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
       
      Je vois ce que ces bouts de code font mais je ne sais pas comment m'en servir pour les mettres dans un while...
      0
    2. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
       
      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...
      0
  7. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    $ 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.
    
    $
    0
    1. gardiendelanuit Messages postés 1772 Date d'inscription   Statut Membre Dernière intervention   267
       
      Ouch d'accord merci.. j'aurais pas trouvé je pense.
      Je verrais ça demain je vous tiens au courant.
      Merci encore.
      0