Bash opérateur unaire attendu
Résolu/Fermé
bash
-
Modifié le 16 août 2017 à 10:18
mamiemando Messages postés 33430 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 17 août 2017 à 22:43
mamiemando Messages postés 33430 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 17 août 2017 à 22:43
A voir également:
- 0758 quel opérateur
- Nouvelle arnaque de la cote d ivoire - Forum Vos droits sur internet
- 0650 quel opérateur - Forum Opérateurs & Réseaux mobiles
- 0473 quel opérateur - Forum Loisirs / Divertissements
- Cen numéro est chez quel opérateur ? - Forum Opérateurs & Réseaux mobiles
- 0778 quel opérateur ✓ - Forum Mobile
1 réponse
mamiemando
Messages postés
33430
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
16 décembre 2024
7 809
Modifié le 16 août 2017 à 10:18
Modifié le 16 août 2017 à 10:18
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
16 août 2017 à 14:14
17 août 2017 à 22:43