11 Nisan 2020 Cumartesi

bash kodlama - case ... esac

Giriş
Sözdizimi (syntax) şöyle. Koşul yazıldıktan sonra ) karakteri ile kapatılır.
case EXPRESSION in
  CASE1) COMMAND-LIST;;
  CASE2) COMMAND-LIST;;
  ... CASEN) COMMAND-LIST;;
esac
Örnek
Şöyle yaparız.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac
Örnek - Otomatik Break Vardır
Girdimiz bir koşula uyuyorsa otomatik olak break ile çıkar. Elimizde şöyle bir kod olsun. Eğer bunu cuma günü çalıştırırsak çıktı olarak "Tue|Wed|Thu|Fri" alırız. Kod otomatik olarak uyan koşuldan sonra break eder. İkinci Fri ile başlayan koşul işletilmez.
#!/bin/bash

NOW=$(date +"%a")
case $NOW in
    Mon)
        echo "Mon";;
    Tue|Wed|Thu|Fri)
        echo "Tue|Wed|Thu|Fri";;
    Fri|Sat|Sun)
        echo "Fri|Sat|Sun";;
    *) ;;
esac
Eğer ;; yerine ;;& kullanırsak otomatik break olmaz. Açıklaması şöyle
Using ;;& in place of ;; causes the shell to test
the next pattern list in the statement, if any, and execute  any
associated  list on a successful match
Şöyle yaparız
#!/bin/bash

NOW=$(date +"%a")
case $NOW in
    Mon)
        echo "Mon";;
    Tue|Wed|Thu|Fri)
        echo "Tue|Wed|Thu|Fri";;&
    Fri|Sat|Sun)
        echo "Fri|Sat|Sun";;
    *) ;;
esac
Eğer bunu cuma günü çalıştırırsak çıktı olarak
 "Tue|Wed|Thu|Fri" 
 "Fri|Sat|Sun" 
alırız.

Örnek
Şöyle yaparız. [aA] a veya A ise anlamına gelir.
case "$CODE" in
    [aA] ) PN="com.tencent.ig" ;;
    [bB] ) PN="com.vng.pubgmobile" ;;
    [cC] ) PN="com.pubg.krmobile" ;;
    [dD] ) PN="com.rekoo.pubgm" ;;
    * ) printf '\a\t%s\n' 'ERROR!' 'CODE KOSONG' 'MELAKUKAN EXIT OTOMATIS' >&2
        exit 1 ;;
esac
Örnek - Tuple
Şöyle yaparız.
grep -qw -- "$users" "$file1"; in_file1=$?
grep -qw -- "$users" "$file2"; in_file2=$?

case "${in_file1},${in_file2}" in
    0,0) echo found in both files ;;
    0,*) echo only in file1 ;;
    *,0) echo only in file2 ;;
      *) echo in neither file ;;
esac
Örnek - Default Case
Default durum için   *) kullanılır. Şöyle yaparız.
#!/bin/bash

case "$1" in 
  "cat"|"dog"|"mouse")
    echo "dollar 1 is either a cat or a dog or a mouse"
  ;;
  *)
    echo "none of the above"
  ;;
esac

Hiç yorum yok:

Yorum Gönder