Hemen her programlama dilinde olan if kalıbı bir
Linux komutunun çalışmasını kontrol (test) eder.
if komutu yerleşik bir komuttur ve her
if, bir fi komutuyla bitmelidir.
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.
Aşağıda if-else-then 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 seçenekler
ve/veya karşılaştırılacak olan değerler yazılır. Her seçenek bir
mantıksal işleme karşılık gelir. Örneğin -lt
seçeneği ilk girilen aritmetik değişkenin ikinci değerden küçük
olup olmadığını denetler. Benzer şekilde =
seçeneği 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önderilir.
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ırmalar
-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ırmalar
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.