if-else Kalıbı ve Kontrol İşlemleri

Next: case Kalıbı Up: Kabuk Programlamaya Giriş Previous: Aritmetik İşlemler

## if-else Kalıbı ve Kontrol İşlemleri

Hemen her programlama dilinde olan `if` kalıbı bir Linux komutunun çalışmasını kontrol (`test`) eder. `if` komutu yerleşik bir komuttur. `if` komutunun ardından gelen Linux komutu çalıştırılır ve komutun çıkış durumu (exit status) gözönüne alınarak ardından gelen `then` deyimiyle birlikte devamı işletilir. Genellikle komutun iki türlü çıkış durumu olacağından `else` komutunun ardından gelen komut zinciri, diğer çıkış durumunda çalıştırılır. Her `if`, bir `fi` komutuyla bitmelidir. Aşağıda if-then-else komutunun örnek sözdizimi görülüyor.

    if linux komutu
        then
            komut1
            komut2
            ...
        else
            komut1
            komut2
            ...
    fi

`if` komutu genellikle kendine `test` komutu ile birlikte kullanım bulur. Bu komut yardımıyla mantıksal işlemler yapılabilir, sayılar ve hatta diziler karşılaştırılabilir. Anahtar sözcük olan `test`'ten sonra opsiyonlar ve/veya karşılaştırılacak olan değerler yazılır. Her opsiyon bir mantıksal işleme karşılık gelir. Örneğin `-lt` opsiyonu ilk girilen aritmetik değişkenin ikinci değerden küçük olup olmadığını denetler. Benzer şekilde `=` opsiyonu da iki karakter kümesinin eşitliğini kontrol eder. Aşağıda `test` komutunun örnek kullanımı yeralıyor.

    $ test 5 -eq 3
    $ a="linux"
    $ test $a="linux"

komutun işletilmesinin ardından kabuğa bir değer döndürülür. Bu değer komut başarılı olarak işletilmişse 0, değilse 1'dir. Son çalıştırılan tüm Linux komutlarının çıkış değeri $? değişkeninde tutulur. test komutunun çıkış değeri de bu yolla öğrenilebilir.

    $ sayi=4
    $ test $sayi -eq 4
    $ echo $?
    0
    $ test $sayi -lt 2
    $ echo $?
    1

`test` komutu yerine parantezler de kullanılabilir. Yukarıdaki iki örnek, parantez kullanılarak şu şekilde yazılabilir:

    $ [ $sayi -eq 4 ]
    $ [ $sayi -lt 12 ]

Dikkat edilmesi gereken bir nokta, köşeli parantez kullanırken araya boşlukların eklenmesidir. Parantezler başlı başına bir komut olarak görüldüklerinden sağında ve solunda en az bir boşluk bırakılmalıdır. `test` komutunda sıkça kullanılan diğer seçenekler şunlardır:

Aritmetik karşılaştırma |
-gt | büyük
-lt | küçük
-ge | büyük eşit
-le | küçük eşit
-eq | eşit
-ne | eşit değil
Dizisel karşılaştırma |
-z | boş dizi
-n | tanımlı dizi
= | eşit diziler
!= | farklı diziler
Dosya karşılaştırması |
-f | dosya var
-s | dosya boş değil
-r | dosya okunabilir
-w | dosyaya yazılabilir
-x | çalıştırılabilir dosya
-h | sembolik bağlantı
-c | karakter aygıt
-b | blok aygıt
Mantıksal karşılaştırma |
-a | VE
-o | VEYA
! | DEĞİL

`if` komutunun `test` ile birlikte kullanılabildiğini daha önce belirtmiştik. Aşağıda bununla ilgili küçük bir örnek yeralıyor.

    #!/bin/bash
    echo "0 ile 20 arasinda bir sayi secin"
    read sec
    if [ $sec -lt 10 ]
       then
            echo "Secilen sayi tek basamakli"
       else
            echo "Secilen sayi cift basamakli"
    fi

Her `if` komutu bir `fi` ile son bulmalıdır.

Next: case Kalıbı Up: Kabuk Programlamaya Giriş Previous: Aritmetik İşlemler