GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Pernyataan Kasus di Bash

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.

Untuk mengingat kata kunci untuk menyelesaikan pernyataan kasus, ingat saja 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!


Linux
  1. Bagaimana Menggemakan Bang!?

  2. Menggunakan Ekspor Di .bashrc?

  3. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  1. Array di Bash Tidak Ditemukan

  2. Menggunakan output dari perintah sebelumnya di bash

  3. Bash/sh pernyataan 'jika lain'

  1. 5 Contoh Pernyataan Kasus Bash

  2. Pisahkan keluaran perintah dengan kolom menggunakan Bash?

  3. Baca baris demi baris dalam skrip bash