Bash: comparaison

Fermé
gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 - 28 déc. 2011 à 22:09
gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 - 28 déc. 2011 à 23:15
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

gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 22:10
PS: j'obtiens un [: g: integer expression expected ou encore le unary operator expected ...
0
flav1313 Messages postés 751 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 22 octobre 2012 100
28 déc. 2011 à 22:11
if élémentTapéAuClavier != [0-9]
action
else action

Nan?
0
flav1313 Messages postés 751 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 22 octobre 2012 100
28 déc. 2011 à 22:14
enfin remplacer [0-9] par [0-1]
0
gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 22:15
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 mardi 24 août 2010 Statut Membre Dernière intervention 22 octobre 2012 100
28 déc. 2011 à 22:18
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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 22:23
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 mardi 24 août 2010 Statut Membre Dernière intervention 22 octobre 2012 100
Modifié par flav1313 le 28/12/2011 à 22:27
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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 22:28
./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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
28 déc. 2011 à 22:29
Salut,

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

;-))
0
gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 22:40
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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 23:00
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
28 déc. 2011 à 23:08
$ 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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2011 à 23:15
Ouch d'accord merci.. j'aurais pas trouvé je pense.
Je verrais ça demain je vous tiens au courant.
Merci encore.
0