intranet-case-yapisi

Case Yapısı

 

Case yapısı, kendisine gönderilen parametreyi kontrol eder ve ona uygun komut satır(lar)ının çalışmasını sağlar. Muhtemel durumları ele almak için kullanılır. Genel yapısı aşağıdaki gibidir:

 

Örnek:

case secenek in
durum_1)
komutlar
;;
durum_2)
komutlar
;;
durum_3)
komutlar
;;
durum_N)
komutlar

;;
*)
komutlar
;;
esac

Yukarıdaki belirtilen durumlarda hiç birisi girdi (secenek) ile eşleşmediği durumlarda *) ile belirtilen kısımdaki komutlar çalıştırılır.

 

Dikkat edilmesi gereken hususlar:

-\   Case kontrol aralığı "case" ifadesiyle başlayıp "esac" ile sonlandırılır.

-\   Her durum için uygulanacak komutlar ";;" ile bitmelidir.

-\   Bir durum için birden fazla komut uygulanabilir.

-\   Seçenek herhangi bir durum ile eşleştiği takdirde diğer durumlar kontrol edilmez, eşleşen duruma ait komutlar uygulanarak case kontrolünden çıkılır.

-\   *) seçeneği bütün değerler ile eşleştiği için kendisinden sonraki seçenekler geçersiz sayılır.

-\   *) seçeneğinin kullanımı isteğe bağlıdır.

 

 

Örnek:

#!/bin/sh
echo "1 ile 3 arasinda bir sayi giriniz."
read Sayi_Degeri
case $
Sayi_Degeri in
1) echo "bir";;
2) echo "iki";;
3) echo "uc";;
*) echo "
Yanlış bir değer girdiniz. Program 5 saniye içerisinde kapatılacak.";
sleep 5; exit;;
esac

###

1 ile 3 arasinda bir sayi giriniz.
3
uc

Yukarıdaki örnekte Sayi_Degeri değişkeninin değeri olarak 1'den 3'e kadar bir sayı girildiği takdirde girilen sayıyı yazı olarak shell ekranına yazacaktır. Aksi takdirde uyarı mesajı verildikten 5 saniye sonra shell ekranı kapatılır.

 

Case Yapısında Regex Kullanımı

Case yapısı içerisinde [ ] , [^ ] , \ , ?, ! ve * regular expressions deyimlerini kullanmak da mümkündür.

 

Örnek:

#!/bin/sh
echo "Giriş yapınız."
read Giris
case $Giris in
[[:upper:]]*) echo "Büyük harf ile baslayan ifade";;
[^0-9]??) echo "Sayi ile baslamayan 3 karakterli ifade";;
\*) echo " * karakteri";;
*) echo "Yukarıdaki seçeneklerle eşleşmiyor.";;
esac

###

u?8
Sayi ile baslamayan 3 karakterli ifade

 

Örnek:

#!/bin/sh
echo "Bir karakter giriniz."
read -n 1 Keypress

echo
case "$Keypress" in
[[:lower:]] ) echo "Küçük harf";;
[[:upper:]] ) echo "Büyük harf";;
[0-9] ) echo "Rakam";;
esac

###

K
Büyük harf.

Yukarıdaki örnekte bir tuşa basılması istenir ve girilen karakter "a-z" aralığında ise shell ekranına "Küçük harf", "A-Z" aralığında ise "Büyük harf", "0-9" aralığında ise "Rakam" yazılır. Eğer özel bir karakter girilir ise herhangi bir işlem yapılmaz.

 

Ortak işlemler

Case yapısında birden fazla seçenek için aynı işlemin yapılmasını istediğimizde "|" kullanabiliriz. "|" karakteri "veya" anlamına gelir.

 

Örnek:

#!/bin/sh
dosya=rapor.txt
case $dosya in
rapor | rapor.txt) rm -f $dosya;
echo "$dosya silindi.";;
*) echo "Rapor bulunamadi";;
esac

###

rapor1.txt silindi

Yukarıdaki case kontrolü "dosya" değişkeninin değeri "rapor" veya "rapor.txt" olması halinde bu isme sahip olan dosyayı siler. Aksi takdirde "Rapor bulunamadı" yazar.

"dosya" değişkeninin değeri önceden "rapor.txt" olarak belirlendiği için rapor.txt dosyası silinir ve "rapor.txt silindi" şeklinde mesaj görüntülenir.

 

Örnek:

#!/bin/sh
aylar=02

case $aylar in  
01 | 1) echo "Ocak Ayı Takvimi";;  
02 | 2) echo "Şubat Ayı Takvimi";;  
03 | 3) echo "Mart Ayı Takvimi";;  
04 | 4) echo "Nisan Ayı Takvimi";;  
05 | 5) echo "Mayıs Ayı Takvimi";;  
06 | 6) echo "Haziran Ayı Takvimi";;  
07 | 7) echo "Temmuz Ayı Takvimi";;  
08 | 8) echo "Ağustos Ayı Takvimi";;  
09 | 9) echo "Eylül Ayı Takvimi";;  
10) echo "Ekim Ayı Takvimi";;  
11) echo "Kasım Ayı Takvimi";;  
12) echo "Aralık Ayı Takvimi";; 
esac
cal $aylar 2011

###

Şubat Ayı Takvimi
     Şubat 2011    
Pz Sa Çr Pr Cu Ct Pa
              1  2  3  4  5  6
 7    8   9  10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28

Yukarıdaki komut "aylar" değişkeninin değerine göre takvimi görüntüler.

 

Döngü İçerisinde "case" Kullanımı

 

Örnek:

#!/bin/sh
for Dosya_Adi in $( ls ); do
case $Dosya_Adi in
*.txt) rm -f $Dosya_Adi;;
*.odt) cp $Dosya_Adi $Dosya_Adi.bak;;
*.jpg) mv $Dosya_Adi /home/ceren/resimler/;;
*) mkdir "$Dosya_Adi dizin";;
esac;
done

Yukarıdaki komut dizin içerisindeki .txt uzantılı dosyaları siler; odt uzantılı dosyaların yedeğini .bak uzantısıyla alır; .jpg uzantılı dosyaları /home/ceren/resimler/ içerisine taşır; ve diğer dosyalar için (sonuna "dizin" ekleyerek) dizin oluşturur.