2014-05-08 17 views
5

Vorrei sapere se è possibile avere più di due istruzioni in un'istruzione if quando si scrive uno script di shell?Condizioni multiple nello script della shell di istruzioni if ​​

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

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

Questo NON funziona. Ma c'è un modo per farlo funzionare?

Grazie!

risposta

8

Si sta tentando di confrontare stringhe all'interno di un comando aritmetico (((...))). Utilizzare invece [[.

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

Nota che ho ridotto questo a due prove distinte unite da ||, con il && spostato all'interno dei test. Questo perché gli operatori di shell e || hanno uguale precedenza e vengono semplicemente valutati da sinistra a destra. Di conseguenza, non è generalmente vero che lo a && b || c && d è equivalente allo (a && b) || (c && d) previsto.

+2

anche essere attenti a spazi bianchi. Tutti quegli spazi devono essere lì! Deve essere 'if [[$ username' e non' if [[$ username'. Lo spazio bianco corretto è fondamentale negli script di shell, a differenza della maggior parte degli altri linguaggi di programmazione. –

25

se si utilizza /bin/sh è possibile utilizzare:

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

se si utilizza /bin/bash è possibile utilizzare:

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