Pernyataan CASE

Pengantar Bash Scripting

Alex Scriven

Data Scientist

Kebutuhan akan pernyataan CASE

Pernyataan CASE bisa lebih optimal daripada IF saat ada banyak atau kondisi kompleks.

Misalkan Anda ingin menguji kondisi dan aksi berikut:

  • Jika file berisi sydney lalu pindahkan ke direktori /sydney
  • Jika file berisi melbourne atau brisbane lalu hapus
  • Jika file berisi canberra lalu ubah namanya menjadi IMPORTANT_filename di mana filename adalah nama asli
Pengantar Bash Scripting

IF yang kompleks

Anda bisa menyusun beberapa IF seperti ini:

  • Kode ini memanggil grep pada argumen ARGV pertama untuk kondisional.
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
  • Terlihat rumit dan berulang, bukan?
Pengantar Bash Scripting

Membuat pernyataan CASE

  • Mulai dengan memilih variabel atau string yang akan dicocokkan
    • Anda bisa memanggil shell-di-dalam-shell di sini!
  • Tambahkan sebanyak mungkin pola dan aksi yang Anda butuhkan.
    • Anda bisa gunakan regex untuk PATTERN, mis. Air* untuk 'diawali Air' atau *hat* untuk 'mengandung hat'.
  • Pastikan memisahkan pola dan kode dengan tanda kurung tutup, dan akhiri perintah dengan dua titik koma

Format dasar pernyataan CASE:

case 'STRINGVAR' in

PATTERN1) COMMAND1;; PATTERN2) COMMAND2;;
Pengantar Bash Scripting

Membuat pernyataan CASE

  • *) DEFAULT COMMAND;;

    • Umum (tidak wajib) menutup dengan perintah default yang berjalan jika tidak ada pola lain yang cocok.
  • esac Terakhir, kata penutupnya adalah 'esac'

    • Ini adalah 'case' yang dibalik!

Format dasar pernyataan CASE:

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

*) DEFAULT COMMAND;;
esac
Pengantar Bash Scripting

Dari IF ke CASE

Pernyataan IF lama kita:

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

Pernyataan CASE baru kita:

case $(cat $1) in

*sydney*) mv $1 sydney/ ;; *melbourne*|*brisbane*) rm $1 ;; *canberra*) mv $1 "IMPORTANT_$1" ;;
*) echo "No cities found" ;; esac
Pengantar Bash Scripting

Ayo berlatih!

Pengantar Bash Scripting

Preparing Video For Download...