Bash opérateur unaire attendu
Résolu
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
Il me donne l'erreur :
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.
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.
1 réponse
Bonjour
Explication du problème
Dans ton exemple,
D'où l'erreur :
Comment résoudre ton problème
Il faut :
- soit que tu testes au préalable si
- soit (ce que je te recommande) mettre
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.
Test :
Bonne chance
Explication du problème
Dans ton exemple,
varn'est pas initialisée,
$varest 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
varest une chaîne non vide (test
-z)
- soit (ce que je te recommande) mettre
$varentre 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
bash
Merci beaucoup d'avoir pris le temps de me répondre mamiemando mon script marche et j'ai compris maintenant merci !!
mamiemando
Messages postés
33772
Date d'inscription
Statut
Modérateur
Dernière intervention
7 882
De rien :-) Bonne continuation !