
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.
Case Kalıbı
Birkaç alternatif arasından seçim yapmak için kullanılan bir komut olan case, bir eşleştirme gördüğü anda belirli bir komut kümesini işleme sokar. case yapısı case komutu ile başlar, eşleştirilecek olan anahtar sözcük yazılır ve seçenekler alt alta, her seçeneğe ait olan komutlarla birlikte belirtilir. Tüm yapı esac komutu ile son bulur.
case anahtar-sozcuk in
secenek1)
komutlar
;;
secenek2)
komutlar
;;
*)
komutlar
;;
esac
Seçenekler arasında özel karakterler (*, [, ], ? gibi) kullanılabilir. Hiçbir eşleme yapılmadığı zaman *) seçeneği değerlendirilecek ve buna bağlı olan komutlar işletilecektir. * kullanımı isteğe bağlıdır. Aşağıda case komutuna ilişkin kısa bir örnek veriliyor.
#!/bin/bash
clear
echo “1. ekrani temizle”
echo “2. sistemdekileri goruntule”
echo “3. dizindeki dosyalari goster”
echo -n “Secenegi giriniz : ”
read secenek
case $secenek in
1)
clear
;;
2)
w
;;
3)
ls -al
;;
*)
echo Hatali secenek
esac
Döngüler
Diğer hemen tüm programlama dillerinin en büyük gücü olan döngü işlemlerine kabuk altında da izin veriliyor. Burada programcı tarafından en çok kullanılan 2 döngü tipi anlatılacaktır: while ve for. while komutu her döngüde bir denetleme mekanizmasını harekete geçirirken for döngüsü bir listenin elemanlarını sırayla seçer.
while-do Döngüsü
Döngü bloğu while anahtar kelimesiyle başlar, ardından gelen koşul sağlandığı sürece döngü işletilir. Önce koşulun sağlanıp sağlanmadığına bakılır. Döngüden çıkabilmek için mutlaka döngü içindeki koşul ifadesinin değerini yanlış yapacak bir durum oluşmalıdır, aksi halde sonsuz döngü oluşur.
while kosul ifadesi
do
komutlar
done
if komutuyla birlikte kullanılan test komutu, while döngüsünde koşul ifadesi olarak da yer alabilir. Aşağıda 1′den 100′e kadar sayan ve ekrana basan bir döngü görülüyor.
#!/bin/bash
deger=0
while [ $deger -lt 100 ]
do
deger=$((deger+1))
echo $deger
done
Yukarıda kullanılan (( ve )) karakterleri arasına matematiksel bir işlem getirilebilir. Bu özellik bash kabuğuna özgüdür.
for-do döngüsü
Bir liste dahilindeki tüm değerlere sırayla erişimi sağlar. for komutundan sonra yeralan liste sırayla kullanılır ve herbirisi için döngü çalıştırılır. Listenin sonuna gelindiğinde ise döngüden çıkılır.
for degisken1 in deger1 deger2 … degerX
do
komutlar
done
Aşağıdaki örnek bu döngüyü kullanarak ekrana bir dizi kelime yazıyor. Döngü boyunca akasya, elma ve visne kelimeleri “agac” değişkenine kopyalanıyor ve her döngüde bu değişkenin içerdiği bilgiler ekrana yazılıyor.
for agac in akasya elma visne
do
echo $agac
done
for-do döngüsü, dosya isimleri üzerinde yapılan işlemlerde de büyük kolaylıklar sağlar. Bunun için özel karakterlerden yararlanmak da olasıdır. Örnek olarak * karakteri o anki çalışma dizini içindeki tüm dosyaları seçer.
for a in * ; do
file $a
done