CASE ifadeleri

Bash Script Yazmaya Giriş

Alex Scriven

Data Scientist

CASE ifadelerine neden ihtiyaç var?

Birden çok veya karmaşık koşul varsa, CASE ifadeleri IF ifadelerinden daha verimli olabilir.

Diyelim ki aşağıdaki koşulları ve işlemleri test etmek istiyorsunuz:

  • Bir dosya sydney içeriyorsa /sydney dizinine taşıyın
  • Bir dosya melbourne veya brisbane içeriyorsa silin
  • Bir dosya canberra içeriyorsa, özgün dosya adı filename ise adını IMPORTANT_filename olarak değiştirin
Bash Script Yazmaya Giriş

Karmaşık bir IF ifadesi

Birden fazla IF ifadesi şöyle yazılabilir:

  • Bu kod, koşul için ilk ARGV argümanında grep çalıştırır.
if grep -q 'sydney' $1; then
    mv $1 sydney/
fi
if grep -q 'melbourne|brisbane' $1; then
    rm $1
fi
if grep -q 'canberra' $1; then
    mv $1 "IMPORTANT_$1"
fi
  • Oldukça karmaşık ve tekrarlı görünüyor, değil mi?
Bash Script Yazmaya Giriş

CASE ifadesi oluşturma

  • Önce hangi değişkenin ya da dizgenin eşleşeceğini seçin
    • Burada kabuk-içinde-kabuk da çağırabilirsiniz!
  • İstediğiniz kadar olası eşleşme ve işlem ekleyin.
    • PATTERN için regex kullanabilirsiniz. Örn. başı 'Air' ile başlayanlar için Air* veya 'hat' içerenler için *hat*.
  • Desen ile çalıştırılacak kodu kapalı parantez ile ayırın ve komutları çift noktalı virgül ile bitirin

Temel CASE söz dizimi:

case 'STRINGVAR' in

PATTERN1) COMMAND1;; PATTERN2) COMMAND2;;
Bash Script Yazmaya Giriş

CASE ifadesi oluşturma

 

  • *) DEFAULT COMMAND;;

    • Hiçbiri eşleşmezse çalışacak varsayılan bir komutla bitirmek yaygındır (zorunlu değildir).
  • esac Son sözcük 'esac'

    • 'case'in tersten yazımıdır!

Temel CASE söz dizimi:

case 'STRING' in
  PATTERN1)
  COMMAND1;;
  PATTERN2)
  COMMAND2;;

*) DEFAULT COMMAND;;
esac
Bash Script Yazmaya Giriş

IF'ten CASE'e

Eski IF ifademiz:

if grep -q 'sydney' $1; then
    mv $1 sydney/
fi

if grep -q 'melbourne|brisbane' $1; then
    rm $1
fi

if grep -q 'canberra' $1; then
    mv $1 "IMPORTANT_$1"
fi

Yeni CASE ifademiz:

case $(cat $1) in

*sydney*) mv $1 sydney/ ;; *melbourne*|*brisbane*) rm $1 ;; *canberra*) mv $1 "IMPORTANT_$1" ;;
*) echo "No cities found" ;; esac
Bash Script Yazmaya Giriş

Hadi pratik yapalım!

Bash Script Yazmaya Giriş

Preparing Video For Download...