IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

problème conditions dans un while


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut problème conditions dans un while
    re-bonjour tout le monde!

    J'ai un truc bizarre qui se passe avec un while.
    J'ai le code suivant :

    #!/bin/bash
    stty erase ^H

    sH=1,9
    sB=1,6

    while ((test $ans != Q)&&(test $ans != q)); do
    clear
    echo -e "Which parameter do you want to change?\n\n"
    echo -e "\t[1]\tsH (current value is $sH)"
    echo -e "\t[2]\tsB (current value is $sB)"
    echo -e "\t[Q]\tQuit menu and run script"

    read ans

    case "$ans" in

    1) echo -n "sH = "
    read sH;;

    2) echo -n "sB = "
    read sB;;
    esac
    done


    echo "sH: $sH"
    echo "sB: $sB"

    exit 0;



    quand je l'execute, ça me met le message suivant :

    line 7: test: !=: unary operator expected

    Est-ce que ça vient du fait que le "et" logique ne s'ecrit pas comme ça?
    J'ai trouvé un moyen de contourner le problème avec la ligne

    while !((test $ans = Q)||(test $ans = q)); do


    Et là ça marche sans problème. Le truc c'est que j'aimerai bien comprendre pourquoi avec le & ça marche pas.
    Si qqn peut m'eclairer, ça serait sympa.

    Voiloute

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    rien à voir, tu fais un test avec $ans qui n'existe pas encore

    donc il compare 'rien' avec quelquechose, et donc renvoie l'erreur unary operator expected


    Il suffit d'ajouter la ligne

    ans=0

    avant la boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/bin/bash
    stty erase ^H
     
    sH=1,9
    sB=1,6
    ans=0
     
    while ((test $ans != Q)&&(test $ans != q)); do
     
    clear
    echo -e "Which parameter do you want to change?\n\n"
    echo -e "\t[1]\tsH (current value is $sH)"
    echo -e "\t[2]\tsB (current value is $sB)"
    echo -e "\t[Q]\tQuit menu and run script"
     
     
    read ans
     
    case "$ans" in
     
    1) echo -n "sH = "
    read sH;;
     
    2) echo -n "sB = "
    read sB;;
    esac
    done
     
     
    echo "sH: $sH"
    echo "sB: $sB"
     
    exit 0;

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    tu es sur? parce que quand je le lance avec la ligne
    while !((test $ans = Q)||(test $ans = q)); do
    ça marche sans problème. En fait, j'ai l'impression que ça vient des "!=", car si j'écrit "while ((test $ans != Q)||(test $ans != q)); do" ça me met le message d'erreur. Mais si j'écrit while !((test $ans != Q)||(test $ans != q)); do alors là ça met pas de message d'erreur.....

    j'comprend pas...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    il suffit d'entourer ta string vide de " "
    mais bon c est quand meme mieux de définir ans avant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((test "$ans" != Q)&&(test "$ans" != q)); do

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    ok merci pour l'info

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/07/2011, 20h42
  2. Plusieurs conditions dans un while/wend, possible?
    Par rsoul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2008, 16h10
  3. plusieurs condition dans un while
    Par realkilla dans le forum C#
    Réponses: 4
    Dernier message: 17/05/2008, 17h16
  4. Plusieurs conditions dans un while
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 11/01/2008, 18h44
  5. [Bash] mettre plusieurs conditions dans un while
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 22/07/2007, 23h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo