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 paylaştığım GitHub reposu: Shell Scripting 101
Shell script case kullanımı şu yapıdadır:
İçinde bulunduğumuz ayın hangi ay olduğunu gösteren bir shell script yazalım. Bunun için, öncelikle "date" 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:
