Menu

Bash opérateur unaire attendu [Résolu]

bash - 15 août 2017 à 20:04 - Dernière réponse : mamiemando 28408 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 19 juin 2018 Dernière intervention
- 17 août 2017 à 22:43
Bonjour,

Je suis débutante en bash j'essaie de faire un script très simple qui ne s'arrête que quand l'utilisateur dit oui

#!/bin/bash

until [ $var = 'oui' ]
do
 read -p 'dis oui : ' var
done


Il me donne l'erreur :
ligne 3 : [: = : opérateur unaire attendu
.

Voila je sais c'est sûrement simple mais j'ai cherché, mais je n'ai pas trouvé si quelqu'un pourrait m'expliquer merci.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
mamiemando 28408 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 19 juin 2018 Dernière intervention - Modifié par mamiemando le 16/08/2017 à 10:18
2
Merci
Bonjour

Explication du problème

Dans ton exemple,
var
n'est pas initialisée,
$var
est substitué par "rien", ce qui donne le test :

until [ = 'oui' ]
do
...
done


D'où l'erreur :
=
est un opérateur binaire (une opérande gauche, une opérande droite) et du coup bash te dit qu'à la rigueur il peut prendre un opérateur unaire (par exemple
!
)... mais pas binaire.

Comment résoudre ton problème

Il faut :
- soit que tu testes au préalable si
var
est une chaîne non vide (test
-z
)
- soit (ce que je te recommande) mettre
$var
entre guillemets à chaque fois que tu l'évalues dans un test.

Personnellement je préconise la deuxième solution. De manière générale, une chaîne de caractère en bash peut contenir des espaces, et tu seras soumise au même genre de problème si tu ne prends pas cette précaution.

#!/bin/bash

until [ "$var" = 'oui' ]
do
  read -p 'dis oui : ' var
done

exit 0


Test :

(mando@aldur) (~) $ sh toto.sh 
dis oui :
dis oui : non
dis oui : oui oui
dis oui : oui


Bonne chance

Merci mamiemando 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24613 internautes ce mois-ci

Merci beaucoup d'avoir pris le temps de me répondre mamiemando mon script marche et j'ai compris maintenant merci !!
mamiemando 28408 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 19 juin 2018 Dernière intervention - 17 août 2017 à 22:43
De rien :-) Bonne continuation !
Commenter la réponse de mamiemando