Saat menulis skrip Bash, biasanya memeriksa string terhadap variabel, dan kemudian melakukan sesuatu berdasarkan apa yang ditentukan.
Perhatikan skrip berikut. Ini memeriksa argumen pertama yang ditentukan pengguna, dan melakukan hal yang berbeda tergantung pada apa yang diberikan:
#!/usr/bin/env bash
if [[ "${1}" == "" ]]; then
echo "No shape was specified."
elif [[ "${1}" == "square" ]]; then
echo "You specified 'square'."
elif [[ "${1}" == "circle" ]]; then
echo "You specified 'circle'."
elif [[ "${1}" == "triangle" ]]; then
"You specified 'triangle'."
else
echo "Unknown shape '${1}'."
exit 1
fi
Ini menunjukkan, meskipun tanpa fungsionalitas, tugas sederhana yang dapat mengulangi bentuk yang diketahui kembali ke pengguna, atau jika bentuknya tidak diketahui, menampilkan pesan kesalahan.
Semuanya baik-baik saja dan keren dalam hal ini, dan semuanya bekerja seperti yang diharapkan. Tapi lihat berapa banyak baris yang diambil. Lihat bagaimana Anda harus menangani setiap opsi yang dilewati pengguna melalui elif
pernyataan?
Sekarang pencitraan program ini memiliki lebih banyak pilihan, katakanlah 20. Dengan pendekatan saat ini, Anda akan menulis if
pernyataan dengan 20 elif
bagian di dalamnya.
Ya, Anda mungkin akan dapat membacanya untuk sebagian besar. Tapi itu kikuk, memakan terlalu banyak ruang, dan yang paling penting, ada alternatif yang lebih baik.
Memperkenalkan pernyataan kasus di Bash
Di sinilah pernyataan kasus masuk. Ini dapat mengurangi jumlah baris kode yang Anda butuhkan untuk memeriksa sesuatu dengan cepat dibandingkan dengan if
pernyataan.
if
yang sama pernyataan yang Anda gunakan untuk memeriksa opsi yang disediakan dapat ditulis ulang seperti di dalam kasus satu:
#!/usr/bin/env bash
case "${1}" in
"") echo "No option was specified."; exit 1 ;;
square) echo "You specified 'square'." ;;
circle) echo "You specified 'circle'." ;;
triangle) echo "You specified 'triangle'." ;;
*) echo "Unknown shape '${1}'."; exit 1 ;;
esac
Lihat betapa lebih sederhana dan terorganisir yang terlihat. Itu adalah 12 baris kode di if
pernyataan, dan hanya 7 dalam case
satu. Dan semakin banyak opsi yang Anda izinkan, semakin drastis perbedaannya.
Dan di situlah case
pernyataan bersinar. Meskipun keduanya benar-benar terbaca, terutama dalam jumlah kecil, case
pernyataan hanya membuat segalanya lebih bersih dan lebih dapat dipelihara dalam jangka panjang.
Bagaimana Anda membuat pernyataan kasus di Bash?
Pernyataan kasus cukup sederhana untuk dipahami hanya dengan sedikit latihan. Dengan itu, inilah dasar-dasar untuk apa yang terjadi:
Baris pertama yang Anda lihat adalah case ${1} in
. ${1}
memberikan string yang akan diperiksa, di sini menjadi argumen pertama yang diteruskan ke skrip.
Misalnya, perhatikan pernyataan kasus ini:
case linux in
windows) echo "windows" ;;
macos) echo "macos" ;;
linux) echo "linux" ;;
esac
Dalam contoh ini, ia akan selalu menjalankan echo "linux"
. case *string* in
bagian hanya menentukan string apa yang akan Anda periksa, dan kemudian opsi di bawahnya akan menjalankan perintah setiap kali kecocokan ditemukan.
Selanjutnya, Anda mulai menentukan opsi Anda. Ingat, Anda memiliki ""
, square
, circle
, triangle
, dan *
sebagai opsi dalam skrip pertama Anda.
Pernyataan kasus diperiksa dari atas ke bawah, dan hanya dijalankan pada pertandingan pertama. Perhatikan contoh berikut:
case linux in
linux) echo "linux" ;;
windows) echo "windows" ;;
linux) echo "linux 2.0" ;;
esac
Di sini, satu-satunya perintah yang akan dijalankan adalah echo "linux"
. Pertandingan kedua kemudian akan dilewati, karena ada kecocokan yang sudah ditemukan.
Setiap baris dalam pernyataan kasus juga harus diakhiri dengan ;;
. Ini menandakan akhir dari daftar perintah untuk sebuah opsi, dan tidak ada perintah lebih lanjut yang harus diproses.
Daftar argumen dalam pernyataan kasus (linux)
dan windows)
bagian juga mendukung wildcard. Jadi, memasukkan sesuatu seperti linu*)
akan cocok dengan keduanya linux
dan linus
.
Terakhir, Anda mengakhiri pernyataan kasus dengan esac
. Ini menunjukkan bahwa Anda telah mencantumkan semua yang ingin diproses, seperti done
akan dilakukan dalam for
atau while
lingkaran.
esac
adalah case
ke belakang. Pernyataan kasus dalam praktik - pemeriksaan argumen
Penggunaan pernyataan kasus yang sering dalam pemrograman saya sendiri adalah memeriksa daftar argumen.
Katakanlah Anda mengizinkan opsi berikut untuk diberikan ke program Anda:
--vertical
--add-txt
--replace
--verify
Untuk memeriksa ini dalam pernyataan kasus, Anda dapat menggunakan sesuatu seperti ini:
while [[ "${1}" != "" ]]; do
case "${1}" in
--vertical) verticle="true" ;;
--add-txt) add_txt="true" ;;
--replace) replace="true" ;;
--verify) verify="true" ;;
esac
shift 1
done
Ini menjalankan while
loop saat ${1}
(argumen pertama yang diberikan pada skrip) tidak kosong. Ini kemudian memeriksa daftar argumen, dan menetapkan variabel ketika opsi yang disediakan disetel.
Setelah memeriksa pernyataan kasus, ia kemudian menjalankan shift 1
, menyebabkan nilai ${2}
(argumen kedua yang diberikan ke skrip) untuk pindah ke nilai ${1}
, dan ulangi ini terhadap ${1}
. yang baru (yang sebelumnya ${2}
) sampai ${1}
tidak disetel ke apa pun.
Dan itu dia! Itu semua dasar untuk menggunakan pernyataan kasus.
Menutup
Pernyataan kasus dapat membantu Anda menulis kode dengan lebih cepat, dan lebih efisien. Mereka juga membantu membuat segala sesuatunya lebih mudah dibaca dan dipelihara dalam jangka panjang.
Jika Anda baru mengenal Bash, Anda dapat mempelajari dasar-dasar Bash dari awal di Seri Bash Pemula kami.
Punya pertanyaan, atau ada yang tidak berfungsi dengan benar? Jangan ragu untuk meninggalkan komentar di bawah, dan saya akan mencoba yang terbaik untuk membalasnya!