2014-05-08 51 views
5

Bir kabuk komut dosyası yazarken bir if deyiminde ikiden fazla ifadenin bulunmasının mümkün olup olmadığını bilmek ister misiniz?if deyim kabuk komut dosyasında birden çok koşul

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

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

Bu çalışmıyor. Ama bunu yapmanın bir yolu var mı?

Teşekkürler!

cevap

8

Dizeleri aritmetik bir komutla() karşılaştırmaya çalışıyorsunuz. Bunun yerine [[ kullanın. && testler içine taşındı ile ben, || katıldı iki ayrı testlere bu düşürdük

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

Not. Bunun nedeni, && ve || kabuk operatörlerinin eşit önceliğe sahip olmaları ve basitçe soldan sağa doğru değerlendirilmeleridir. Sonuç olarak, a && b || c && d'un amaçlanan (a && b) || (c && d)'a eşdeğer olması genellikle doğru değildir. /bin/sh kullanıyorsanız

+2

Ayrıca boşluk konusunda dikkatli olun. Bütün bu boşlukların orada olması gerekiyor! Eğer [[$ username' ve eğer [[$ username'] değilse. Diğer programlama dillerinin aksine, kabuk betikleri için doğru boşluk önemlidir. –

25

kullanabilirsiniz:

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

/bin/bash kullanarak eğer kullanabilirsiniz:

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