Ana içeriğe geç

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:

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 "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:

Shell script case örneği