Forum général.cherche-logiciel La boucle until ne s'arrête pas

Posté par  .
Étiquettes : aucune
0
8
fév.
2008
Bonjour,

Je viens de faire utilitaire assez simple pour changer un configuration.
A la fin de ce script je demande à l'utilisatuer si les changement lui convient, en tapant O pour Oui et n pour non

J'ai commencé mon script comme ceci :

#!/bin/bash
clear
CONDITION_FINALE=O

until [ "$var1" = "$CONDITION_FINALE" ]
do
#exécution de l'utilitaire jusqu'a la ligne suivante
echo -n "Est ce que cela vous conviens ? [O,n]"
read $var1
done
exit 0


Le problème c'est que la boucle ne s'arrête pas.

J'aimerais aussi que 0 soit la réponse par défaut.

Merci de votre aide
  • # == ou -eq dans le test ?

    Posté par  . Évalué à 2.

    Je dis ça, mais j'ai pas lu ton code, juste vu ça en passant.

    La gent féminine, pas la "gente", pas de "e" ! La gent féminine ! Et ça se prononce comme "gens". Pas "jante".

  • # c'est pas plutot ...

    Posté par  . Évalué à 2.

    read var1 (sans le $).
    • [^] # Re: c'est pas plutot ...

      Posté par  . Évalué à 1.

      Merci castorpilot

      C'est bien cela.... En enlevant $ la boucle s'arrête en tapant O

      Maintenant si je veux O en réponse par défaut, est ce qu'il faut que je continue à utiliser until ?

      Merci de votre aide
  • # avec une boucle for je tatonne

    Posté par  . Évalué à 1.

    J'ai rempalcer while ou until avec une boucle for. J'ai le résultat expérer car O ou rien est reconnu comme valeur par defaut, et le script boucle que sur la réponse n

    #!/bin/bash
    clear
    CONDITION_FINALE=n
    for (( var1=O ; "$var1" == "$CONDITION_FINALE";))
    do

    #exécution de l'utilitaire jusqu'a la ligne suivante

    echo -n "Est ce que cela vous conviens ? [O,n]"
    read var1
    done
    exit 0


    Mais j'ai quand même un message d'erreur à la sortie du script qui fait pas beau :

    ./boucle_until.sh: line 5: ((: == n: erreur de syntaxe : opérande attendu (error token is "== n")
    • [^] # Re: avec une boucle for je tatonne

      Posté par  . Évalué à 2.

      J'ai peur de ne pas comprendre vraiment le but du script.
      En gros, tant que la personne ne tape pas "n" (CONDITION FINALE), tu lui reposes la question ?
      Est ce que tu ne voudrais pas plutot :

      - poser la question
      - faire comme si une response vide valait "O"
      - reposer la question si ce n'est ni "n" ni "O" qui est tapé

      Si c'est le cas, et comme tu utilises bash, tu peux regarder du coté des substitutions de variables ${variable:-default} : si variable n'est pas definie ou si elle est vide, alors on utilise la valeur par defaut. Ici, on peut utiliser

      read reponse
      echo ${reponse:-Oui}

      qui vaudra Oui si l'utilisateur tape juste sur Entrée.
      • [^] # Re: avec une boucle for je tatonne

        Posté par  . Évalué à 1.

        Point ...

        En fait j'aimerais que mon script
        - Pose la question
        - Si c'est n, il repose la question
        - Si c'est oui ou rien la boucle s'arrête.

        J'ai donc repris la première version du script avec la boucle until. et j'ai rajouté la ligne de Castorpilot.
        Voici le résultat :

        Est ce que cela vous conviens ? [O,n]
        O
        Est ce que cela vous conviens ? [O,n]


        var1 prend bien la value O mais cela n'arrête pas la boucle.

        Merci de votre aide

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.