2014-05-08 4 views
5

Ich würde gerne wissen, ob es möglich ist, mehr als zwei Anweisungen in einer if-Anweisung, wenn Sie ein Shell-Skript schreiben?Mehrere Bedingungen in If-Anweisung Shell-Skript

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

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

Dies funktioniert nicht. Aber gibt es einen Weg, es zum Laufen zu bringen?

Danke!

Antwort

8

Sie versuchen, Strings innerhalb eines arithmetischen Befehls zu vergleichen (((...))). Verwenden Sie stattdessen [[.

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

Bitte beachte, dass ich das zwei durch || verbunden getrennten Tests reduziert haben, mit der && in den Tests bewegt. Dies liegt daran, dass die Shell-Operatoren && und || die gleiche Priorität haben und einfach von links nach rechts ausgewertet werden. Als Ergebnis ist es im Allgemeinen nicht wahr, dass a && b || c && d dem beabsichtigten (a && b) || (c && d) entspricht.

+2

auch vorsichtig sein, Leerzeichen. All diese Räume müssen da sein! Es muss 'if [[$ username' und nicht' if [[$ username'. Korrekte Leerräume sind in Shell-Skripten im Gegensatz zu den meisten anderen Programmiersprachen von entscheidender Bedeutung. –

25

wenn /bin/sh verwenden, können Sie verwenden:

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

wenn /bin/bash verwenden, können Sie verwenden:

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