Koşullu Durumlar


Çoğu programlama dilinde, programın karar vermesi için koşullu ifadeler kurabileceğimiz bir yapı bulunur. Bu yapılar, "if-else if-else" şeklinde üç parçadır. Bu parçalardan 'if' olanı, kurucu koşullu ifadedir. If ifadesi konulmadan "else if" ve "else" yapıları kullanılamaz. "If" ve "else if" yapıları bir koşul durumunu sorgularlar. Sorguladıkları durum, eğer doğru ise kendilerine ait olan kod bloklarını çalıştırılar. Eğer sorguladıkları durum yanlış ise hemen altlarındaki kod bloğuna geçerler.

En basit şekliyle (yalnızca "if" içeren) koşullu ifade şöyle yazılabilir:

if [ koşulluDurum ]; then # Koşullu durum doğru ise gerçekleşecek kod bloğu fi

Bir örnek vermek istersek:

dil="BASH"
if [ "$dil" = "BASH" ]; then
  echo "BASH kodlamak çok eğlenceli!"
fi

Bu örneğimize bir de "else" ifadesi ekleyelim. Bu ifade ile "if"te belirttiğimiz koşul gerçekleşmez ise ne yapılması gerektiğini söyleyelim:

dil="javaScript"
if [ "$dil" = "BASH" ]; then
  echo "BASH kodlamak çok eğlenceli!"
else
  echo "UPS!"
  echo "Bence en iyi kodlama dili $dil"
fi

Her şey beyaz yada siyah olmak zorunda değildir! Beyaz ve siyah arasındaki farklı karışmalar ile gri tonları da oluşabilir. "else if"in kısaltması olan elif de bu işe yarar:

isim="George"
if [ "$isim" = "John" ]; then
  echo "John Lennon'u mu kast ettin?"
elif [ "$isim" = "George" ]; then
  echo "HA! George Harrison'ı anlatıyorsun sen."
else
  echo "E o zaman geriye yalnızca Paul ve Ringo kaldı."
fi

"elif" ifadesiyle; "if"in içindeki koşul yanlış ise, "else"in içindeki kod bloğunu çalıştırmadan önce farklı bir koşul için kontrol yaparız.

Her bir koşul, ya doğru ya yanlış olmak zorundadır. (Doğru için tam sayılar, yanlış için 0 sayısı kullanılır.) Eğer daha önceden oluşturmadığınız bir değişken adını koşul olarak kullanırsanız, direk "yanlış" dönecektir. Ayrıca yalnızca boşluk karakterini içerek dizgiler de yanlış döndürür. Mantıksal işleyiciler, aynen matematikte kullanıldığı gibi programlama dillerinde de kullanılır. Mantıksal işleyicilerden VE kelimesi && ile, VEYA ifadesi || ile, DEĞİL ifadesi _!_ ile sembolize edilir. Bu mantıksal ifadelerdeki ve, veya, değil durumları çift köşeli parantez ile ifade edilmelidir. [[]]

Sayısal karşılaştırma

Kabuk gösterimi    Şu ifadelerle eşdeğerdir:
$a -lt $b                 $a < $b
$a -gt $b                 $a > $b
$a -le $b                 $a <= $b
$a -ge $b                 $a >= $b
$a -eq $b               $a eşittir $b
$a -ne $b             $a eşit değildir $b

Dizgi karşılaştırma

Kabuk gösterimi    Şu ifadelerle eşdeğerdir:
"$a" = "$b"         $a aynısıdır $b nin
"$a" == "$b"        $a aynısıdır $b nin
"$a" != "$b"        $a farklıdır $b den
-z "$a"             $a boştur, değersizdir
  • Çok önemli not! Koşullu ifadeler kurulurken unutulmamalıdır ki köşeli parantezler ile ifade arasında boşluk olmalıdır. Dizgi karşılaştırmasında ise işleyicilerden (örn. =, ==, !=...) önce ve sonra boşluk bırakılmalıdır.

  • Dizgileri belirtirken, özel karakterlerden kaçınmak için çift tırnak kullanmanız önem arz eder. Zorunlu değildir.

Mantıksal işleyicileri kullanma

if [[ $deg_A[0] -eq 1 && ($deg_B = "bee" || $deg_T = "tee") ]] ; then
    # işlenecek kod bloğu
fi

"case" Yapıları

"case" yapıları da, "if" yapıları gibi çoğu programlama dilinde bulunan önemli yapılardır. "If" ile koşullu durumlar kurduğunuzda çok fazla "elif (else if)" yapısı kurmanız gerekiyor ise aslında tercih etmeniz gerekenin "case" yapıları olduğunu anlamanız gerekmektedir.

case "$degisken" in
    "$kosul" )
        # komut
    ;;
    "$kosul2" )
        # komut2
    ;;
esac

Basit Bir "case" Yapısı Örneği

Bu örneğimizi yukarıdaki yapı ile kıyaslayalım. Yapımızdaki $degisken, örneğimizde kendini $mycase olarak göstermiş. Yani biz $mycase'in hangi duruma sahip olduğunu sorguluyoruz. 1), 2) gibi ifade edilen değerler aslında bizim $kosul, $kosul2 olarak ifade ettiğimiz değerlerdir. Koşulların dışına çift tırnak konmamış (çünkü değişken olarak çağırılmamışlar) ve alt satıra geçilmeden tek satırda yazılarak kodun görüntüsü düzenlenmiştir. Komutlarımız ise "echo"lar ile ifade edilmiş ve çift noktalı virgül ile diğer sorguya geçilmiştir. Kısacası anlatılan şudur:

# mycase 1'e eşit olsun.
# mycase şuna eşitse:
#     1 e eşitse -> BASH'ı seçtiniz yaz.
#     2 ye eşitse -> PERL'ü seçtiniz yaz.
#     3 e eşitse -> PYTHON'ı seçtiniz yaz.
#     4 e eşitse -> C++'ı seçtiniz yaz.
# sorguyu bitir

mycase=1
case $mycase in
    1) echo "BASH'ı seçtiniz.";;
    2) echo "PERL'ü seçtiniz.";;
    3) echo "PYTHON'ı seçtiniz.";;
    4) echo "C++'ı seçtiniz.";;
    5) exit
esac

Exercise

İlk kısımdaki değişkenlerle öyle bir oynayın ki tüm koşullu ifadeler "doğru" döndürsün.


Copyright © learnshell.org. Read our Terms of Use and Privacy Policy