[Shell] test opérateur logique OR

Salut a tous,

je cherche la commande pour faire un OR logique dans :
while test $grp -ne 1 OR 2

Voila le OR ou les || ne sont pas reconnus mais pour -o je ne sais pas ou le placer.
Merci
Configuration: Linux Mandriva
Firefox 2.0.0.1

3 réponses

  1. Modérateur
    Salut,

    Ou pour rester dans ce que tu as déjà écrit :
    echo "Saisissez le login de l'utilsateur"
    read login
    echo "Saisissez un mot de passe"
    read pass
    echo "Saissiez le nom complet de l'utilisateur"
    read nom
            while [ "$grp" -ne "1" ] || [ "$grp" -ne "2" ]
            do
            echo -e "Choissez le groupe auquel il va appartenir :
            1->  administration
            2->  informatique"
            read grp
            if [ "$grp" = "1" -o "$grp" = "2" ]
            then break
            fi
            done
    ;-)
    1. Modérateur
      Salut,

      Ou pour rester dans ce que tu as déjà écrit :
      je te l'accorde :-))
    2. Modérateur
      @lami20jHi,

      je te l'accorde :-))
      Je n'en attendais pas moins de ta part ;-))

      PS. J-1
    3. @lami20jMerci a tous de votre aide :)
      Je vous tiens au courant
    4. @Igor012bonjour,

      je sais que ça fait deux ans que tu as posté mais je me permets quand même de te répondre.
      il me semble que ça tourne en rond à cause de ton test logique dans la condition de ton while. il te faut un and pas un or dans ton test.

      quelque soit la valeur que tu entres, l'une des deux parties de la condition est vérifié ( si tu mets autre chose que 1 et 2 alors les deux sont vérifiées, si tu mets 1 alors la premièrec est vraie et donc le or l'est aussi et ça boucle, et pareil si tu mets 2).
      salutations
    5. J'approuve le commentaire de shmmini.
      En pseudo-code :
      tant que $grp différent de 1 ET de 2 ; choisir grp ; fin tant que
      En BASH (avec un -o comme demandé) :
      while [ $grp -ne 1 -o $grp -ne 2 ]; do read grp; done
      Et comme l'auteur l'a fait, il faut bien initialiser la variable grp à 0 (ou autre nombre) sous peine d'erreur
  2. Modérateur
    esssaie comme ça
    #!/bin/bash
    
    grp="oui"
    echo -e "Saisissez le login de l'utilsateur : \c"
    read login
    echo -e "Saisissez un mot de passe : \c"
    read pass
    echo -e "Saissiez le nom complet de l'utilisateur : \c"
    read nom
    
    while true
    do
    case $grp in
    '1' )
        echo administration
        ;;
    '2' )
        echo informatique
        ;;
    esac
        echo "Choissez le groupe auquel il va appartenir [ fin pour quitter ] : "
        echo "1->  administration"
        echo "2->  informatique"
        read grp
    
        if [ $grp = "fin" ];then
          break
        fi
    done
    
    1. Modérateur
      Salut,

      while [ $grp -ne 1 ] || [ $grp -ne 2 ]

      1. Salut,
        j'ai fait ce que tu m'a dis, y a du mieux. mais maintenant ca tourne en rond

        echo "Saisissez le login de l'utilsateur"
        read login
        echo "Saisissez un mot de passe"
        read pass
        echo "Saissiez le nom complet de l'utilisateur"
        read nom
                while [ $grp -ne 1 ] || [ $grp -ne 2 ]
                do
                echo "Choissez le groupe auquel il va appartenir : 
                1->  administration
                2->  informatique"
                read grp
                done
        
        

        apres ca il y a un case selon le choix 1 ou 2.
        ps: les variables dont $grp ont été initialisées au début a 0