Bash: comparaison

gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   -  
gardiendelanuit Messages postés 1770 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 :)



A voir également:

6 réponses

gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
PS: j'obtiens un [: g: integer expression expected ou encore le unary operator expected ...
0
flav1313 Messages postés 751 Date d'inscription   Statut Membre Dernière intervention   100
 
if élémentTapéAuClavier != [0-9]
action
else action

Nan?
0
flav1313 Messages postés 751 Date d'inscription   Statut Membre Dernière intervention   100
 
enfin remplacer [0-9] par [0-1]
0
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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
flav1313 Messages postés 751 Date d'inscription   Statut Membre Dernière intervention   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
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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
flav1313 Messages postés 751 Date d'inscription   Statut Membre Dernière intervention   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
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
./BASHv10.0.sh: line 19: [: =!: binary operator expected
: / avec une lettre ou un chiffre pareil
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

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

;-))
0
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
$ 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
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
Ouch d'accord merci.. j'aurais pas trouvé je pense.
Je verrais ça demain je vous tiens au courant.
Merci encore.
0