Bash opérateur unaire attendu

Résolu
bash -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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.

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    7
    1. bash
       
      Merci beaucoup d'avoir pris le temps de me répondre mamiemando mon script marche et j'ai compris maintenant merci !!
      1
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      De rien :-) Bonne continuation !
      1