web-dev-qa-db-fra.com

Conditions multiples dans le script Shell de l'instruction if

Je voudrais savoir s'il est possible d'avoir plus de deux instructions dans une instruction if lorsque vous écrivez un script Shell?

username1="BOSS1"
username2="BOSS2"
password1="1234"
password2="4321"

if(($username == $username1)) && (($password == password1)) || 
  (($username == $username2)) && (($password == password2)) ; then

Cela ne fonctionne pas. Mais existe-t-il un moyen de le faire fonctionner?

Merci!

6
user3604466

si vous utilisez /bin/sh vous pouvez utiliser:

if [ <condition> ] && [ <condition> ]; then
    ...
fi

si vous utilisez /bin/bash vous pouvez utiliser:

if [[ <condition> && <condition> ]]; then
    ...
fi
30
nettux

Vous essayez de comparer des chaînes dans une commande arithmétique (((...))). Utilisez plutôt [[.

if [[ $username == "$username1" && $password == "$password1" ]] ||
   [[ $username == "$username2" && $password == "$password2" ]]; then

Notez que j'ai réduit cela à deux tests distincts joints par ||, Avec le && Déplacé à l'intérieur des tests. En effet, les opérateurs Shell && Et || Ont la même priorité et sont simplement évalués de gauche à droite. Par conséquent, il n'est généralement pas vrai que a && b || c && d Est équivalent au ( a && b ) || ( c && d ) Prévu.

10
chepner