[Shell] test opérateur logique OR

Igor012 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
Gein- Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

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

0
Igor012 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
;-)
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Ou pour rester dans ce que tu as déjà écrit :
je te l'accorde :-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Hi,

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

PS. J-1
0
Igor012 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Merci a tous de votre aide :)
Je vous tiens au courant
0
shmmini > Igor012 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,

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
0
Gein- Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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
0