2015-03-26 15 views
12

Kontrol etmek istiyorum, eğer birden fazla değişken ayarlanmış veya ayarlanmamışsa, eğer ayarlanmışsa sadece kod kodunu yürütün, aksi halde çıkın.Birden çok değişkenin tanımlanıp tanımlanmadığı bash

gibi bir şey:

if [ ! $DB=="" && $HOST=="" && $DATE=="" ]; then 
    echo "you did not set any variable" 
    exit 1; 
else 
    echo "You are good to go" 
fi  
+0

Kontrol değişkeni için değer var ya da değil [-z $ a -a -z $ b -a -z $ c] && echo "değeri yok" || echo "tamam iyi gitmek!" – powershell

cevap

25
Bir değişkeni kaldırılır veya boş olup olmadığını test etmek -z kullanabilirsiniz

:

Eğer etiketi kullanmış gibi
if [[ -z $DB || -z $HOST || -z $DATE ]]; then 
    echo 'one or more variables are undefined' 
    exit 1 
fi 

echo "You are good to go" 

, ben uzun bir testi kullandım [[, yani değişkenlerimin etrafında tırnak kullanmam gerekmiyor. Devam etmek için tanımlanacak üç değişkenin tümüne ihtiyacınız olduğunu varsayarak düşünüyorum. if dalındaki exit, else'un gereksiz olduğunu gösterir.

böyleolacağını herhangi POSIX uyumlu kabuğunda bunu yapmak için standart yol:

burada
if [ -z "$DB" ] || [ -z "$HOST" ] || [ -z "$DATE" ]; then 
    echo 'one or more variables are undefined'   
    exit 1 
fi 

önemli farklar her değişken çek ayrı test içindeki gider ve o çift tırnak her etrafında kullanıldığını vardır parametre genişletme.

+0

Teşekkürler! Ayrıca, testleri kullanarak tek bir yüklemede birleştirmek için '-o' kullanabilirsiniz. ve üç ayrı '' 'çağrıları? – BeeOnRope

+1

@BeeOnRope Tavsiye [özellikle '-a' ve' -o' kullanmaktan kaçının (http://pubs.opengroup.org/onlinepubs/009696899/utilities/test.html) (özellikle _Application Usage_ bölümüne bakın) Kullanıcı tanımlı olabilecek değişkenlerle uğraşırken. –

+0

Anlam veriyor, tekrar teşekkürler! – BeeOnRope

İlgili konular