SORU
7 HAZİRAN 2011, Salı


BASH basit mantıksal operatörler

Birkaç seçeneğim var ve aşağıdaki koşulları sözleri, bash betik başarısız bir girişimi sonra yazılmış) kontrol etmek istiyorum:

if varA EQUALS 1 AND ( varB EQUALS "t1" OR varB EQUALS "t2" ) then 

do something

done.

Ve benim başarısız girişim olarak, ben ile geldi:

if (($varA == 1)) && ( (($varB == "t1")) || (($varC == "t2")) ); 
  then
    scale=0.05
  fi

CEVAP
7 HAZİRAN 2011, Salı


Yazdıklarını aslında neredeyse çalışır (eğer tüm değişkenler sayılar olsaydı işe yarar), ama hiç deyimsel bir yol değil.

  • (…) parantez subshell bir işaret. İçinde ne birçok diğer diller gibi bir ifade değil. Komutları (sadece dış parantez gibi) bir listesini. Bu komutları yeniden yönlendirme, atama, vs çok ayrı bir alt süreci içinde idam edilir. parantez içinde yürüttü parantez dışında hiçbir etkisi yok.
    • Bir lider, dolar işareti, $(…) command substitution: bir komut parantez içinde ve çıkış komutu kullanılır bir parçası olarak komut satırı (sonra ekstra açılımları sürece yerine koyma arasında çift tırnak, ama bu another story).
  • { … } parantez içinde grup komutları parantez gibi, ama onlar sadece ayrıştırma, gruplandırma değil etkisi. Program x=2; { x=4; }; echo $x x=2; (x=4); echo $x ise 4, baskı 2 Baskı. (Ayrıca parantez etrafında boşluklar olsun ve kapatmadan önce bir noktalı virgül, parantez yok ise. Bu sözdizimi bir cilvesi.)
    • , ${VAR} lider dolar işareti olan bir değişken, Olası ekstra dönüşümler ile değeri ** 38, genişleyen.
  • ((…)) çift parantez içinde sayılar üzerinde* *39, yani bir hesaplama, bir sözdizimi ile diğer programlama dillerini andıran bir surround. Bu sözdizimi, çoğunlukla bilgi almak atamaları için kullanılır.
    • Aynı sözdizimi aritmetik ifadelerde kullanılan ifadenin tamsayı değeri genişletmek $((…)),.
  • [[…]] çift parantez conditional expressions surround. Koşullu ifadeler çoğunlukla -n $variable gibi operators eğer bir değişken bir dosya olup olmadığını test etmek için boş ve -e $file eğer test etmek için inşa edilmiştir. Ayrıca dize eşitlik operatörleri: "$string1" = "$string2" (dikkat sağ tarafı desen, örneğin [[ $foo = a* ]] sınav $foo ile başlar a [[ $foo = "a*" ]] testler $foo tam olarak a*), ve tanıdık !, && || operatörler için olumsuzluk, birlikte ve çözüm olarak parantez için gruplandırma. Her operatör ([[ "$x" = "$y" ]] örneğin, değil . etrafında bir yere ihtiyacınız olduğunu unutmayın ^s>[[ "$x"="$y" ]]ve bir boşluk ya da parantez içinde ve dışında ; gibi bir karakter (*30 örneğin*[[-n $foo]]).
  • [ … ] tek bir parantez daha tuhaflıklar ile koşullu ifadeler (ama daha yaşlı ve daha taşınabilir) diğer bir form vardır. Herhangi bir yazma yok şimdilik; bunları içeren komut dosyalarını bulduğunuzda, onlar hakkında endişelenmek.

Bu bash test yazmak deyimsel bir şekilde

if [[ $varA = 1 && ($varB = "t1" || $varC = "t2") ]]; then

Eğer diğer kabukları taşınabilirlik ihtiyacınız varsa, bu şekilde (not ek aktardığı ve her bireyin test parantezler içinde ayrı ayarlar şöyle olmalı:

if [ "$varA" = 1 ] && { [ "$varB" = "t1" ] || [ "$varC" = "t2" ]; } then

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • engineerguy

    engineerguy

    10 Ocak 2010
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006