Shell Script #10 – Karar Yapıları (case)

Bir önceki yazımda, shell script’lerde if, elif, else kullanımından bahsetmiştim. Bu yazımda ise, başka bir karar yapısı olan case konusunu ele alacağız.

Kod örneklerini GitHub reposunda bulabilirsiniz.

Shell script case kullanımı şu yapıdadır:

case deger in
pattern1)
       #komutlar
       ;;
pattern2)
       #komutlar
       ;;
*)
       #eşleşmeme durumu
       ;;
esac

İçinde bulunduğumuz ayın hangi ay olduğunu gösteren bir shell script yazalım. Bunun için, öncelikle “data” komutunu kullanarak ayın sayısal değerini çekeceğiz. Sonrasında, gelen değere göre bir çıktıyı ekrana yazdıracağız:

#! /bin/bash

#Hangi aydayız?

#Öncekikle, içinde bulunduğumuz ayın sayısal değerini çekelim:

ay=$(date +%m)

#Şimdi de dönen sayısal değere göre ekrana bir çıktı yazdıralım:

case $ay in
01)
	echo "Ocak"
	;;
02)
	echo "Şubat"
	;;
03)
	echo "Mart"
	;;
04)
	echo "Nisan"
	;;
05)
	echo "Mayıs"
	;;
06)
	echo "Haziran"
	;;
07)
	echo "Temmuz"
	;;
08)
	echo "Ağustos"
	;;
09)
	echo "Eylül"
	;;
10)
	echo "Ekim"
	;;
11)
	echo "Kasım"
	;;
12)
	echo "Aralık"
	;;
*)
	echo "Bunu nasıl başardın gerçekten?!?"
esac
[root@gnuadmin ShellScripting101]# ./17-case_ornekleri.sh 
Ocak

Aşağıdaki örnek ise, SELINUX konfigürasyon dosyasını okuyup, “SELINUX=” satırındaki değere göre bir çıktı vermektedir. Takdir edersiniz ki, hiç de taşınabilir bir script değil. Konfigürasyon dosyasının yerine ve yapısına göre, sizin sisteminizde çalışmaması muhtemel. Örnek vermek amacıyla yazıyorum:

# SELINUX durumu
# /etc/selinux/config dosyasındaki SELINUX ifadesinin değerine göre
# çıktı verir:

durum=$(grep ^SELINUX= /etc/selinux/config  | cut -d "=" -f 2)

case $durum in
"enforcing")
	echo "SELinux security policy is enforced."
	;;
"permissive")
	echo "SELinux prints warnings instead of enforcing."
	;;
"disabled")
	echo "No SELinux policy is loaded."
	;;
*)
	echo "This script won't work anyway..."
esac

Çıktı ise aşağıdaki gibi olacaktır:

Shell script case örneği
Shell script case örneği

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.