GNU/Linux >> Belajar Linux >  >> Linux

Bash Scripting – Pernyataan Kasus

Pada artikel sebelumnya, kita telah melihat cara bekerja dengan pernyataan bersyarat di bash untuk mengevaluasi kondisi dan mengambil keputusan berdasarkan hasil. Demikian pula, dalam artikel ini, kita akan mempelajari cara menggunakan pernyataan kasus dalam skrip Bash, yang juga digunakan untuk mengevaluasi kondisi. Anda dapat menggunakan pernyataan kasus Bash alih-alih menulis daftar panjang if..elif..else penyataan. Jika Anda tidak tahu tentang pernyataan bersyarat, kami memiliki artikel terperinci tentang topik tersebut. Saya sarankan Anda melihatnya sebelum membaca artikel ini.

  • Skrip Bash – Pernyataan Bersyarat

Sintaks pernyataan kasus

Sintaks pernyataan kasus di bash diberikan di bawah ini:

case expression in
  pattern1) STATEMENTS ;;
  pattern2) STATEMENTS ;;
  Pattern3 | Pattern4 | pattern5) STATEMENTS ;;
  pattern-N) STATEMENTS ;;
  *) STATEMENTS ;;
esac

Penjelasan:

  1. Kata kunci "case" dan "esac" menandai awal dan akhir pernyataan kasus.
  2. Kasus kata kunci harus diikuti oleh "expression" . Ekspresi ini akan dievaluasi dan outputnya akan dicari berdasarkan daftar pola.
  3. Setelah ekspresi, "in" kata kunci harus ditulis, yang menunjuk ke "value in patterns" .
  4. Anda dapat membuat pola sebanyak yang Anda inginkan. Anda dapat menganggap setiap pola sebagai if dan elif klausa dalam pernyataan bersyarat. Jika nilai yang dievaluasi dari ekspresi dicocokkan dengan suatu pola, pola itu akan menjalankan blok kodenya. Pola yang tersisa akan dilewati.
  5. Setiap pernyataan di dalam pola harus diakhiri dengan titik koma ganda (;; ).
  6. Serupa dengan klausa else dalam pernyataan if, dalam pernyataan case terdapat pola default yang disebut tanda bintang (* ) yang akan menjalankan blok kodenya jika tidak ada pola yang cocok.

Contoh 1 - Kalkulator menggunakan pernyataan kasus

Dalam contoh ini, saya telah membuat kalkulator sederhana menggunakan pernyataan kasus. Biarkan saya menjelaskan apa yang terjadi ketika Anda menjalankan kode ini.

  1. Pengguna diminta untuk memasukkan dua angka dan disimpan dalam variabel "X" dan "Y" .
  2. Pengguna diminta untuk memasukkan jenis operasi (menambah, mengurangi, mengalikan, membagi) dan disimpan dalam variabel "OPERATOR" .
  3. Dalam pernyataan kasus variabel "OPERATOR" dievaluasi dan pola . yang berbeda (+ ,- ,x ,/ ,% ) dibuat untuk operasi yang berbeda.
  4. Jika suatu pola cocok, pola tertentu akan menjalankan pernyataannya dengan melewatkan semua pola lain dalam pernyataan kasus.
  5. Jika Anda mencoba memasukkan nilai lain selain operator aritmatika yang diinginkan, maka pola default (* ) akan menjalankan pernyataannya.
#!/usr/bin/env bash

read -p "Enter the first number(X)  :  " X
read -p "Enter the second number(Y) :  " Y
read -p "
Addition => +
Subtract => -
Multiply => x
Division => /
Reminder => %

Choose any one operator   :  " OPERATOR
case "$OPERATOR" in
 +)
   echo -e "\nAddition of X and Y is $(( X + Y ))" ;;
 -)
   echo -e "\nSubtraction of X and Y is $(( X - Y ))" ;;
 x)
   echo -e "\nMultiply X and Y is $(( X * Y ))" ;;
 /)
   echo -e "\nDivision of X and Y is $(( X / Y ))" ;;
 %)
   echo -e "\nReminder of X and Y is $(( X % Y ))" ;;
 *)
   echo -e "\n[ERROR] You have chosen an operator that is not in the list.
You can choose either(+, -, x, /, %) operator from the list.
Rerun the program again."
esac

Lihat gambar di bawah ini, saya mengirimkan kode dan memilih "Operator Tambahan" .

Saya menjalankan kode yang sama lagi tetapi kali ini memberikan nilai acak yang akan membuat pola default (* ) jalankan pernyataannya.

Contoh 2 - Membuat beberapa pola dalam satu klausa

Pada contoh sebelumnya, kami telah membuat pola yang berbeda untuk operator aritmatika yang berbeda. Dimungkinkan juga untuk membuat beberapa pola dalam klausa yang sama dan jika ada pola yang cocok, pernyataan tertentu akan dijalankan. Sintaksnya akan sama tetapi Anda akan menambahkan pipa simbol (| ) dan tambahkan pola yang berbeda pada baris yang sama seperti di bawah ini.

case expression in
   Pattern1 | Pattern2 | pattern3) 
   STATEMENTS ;;
   *)
   STATEMENTS ;;
esac

Pada contoh di bawah ini, pengguna akan memasukkan tahun sebagai input dan akan mendapatkan detail tutup oranye dari data IPL. Pada tahun 2015, 2017, dan 2019 pemain yang sama memenangkan topi oranye jadi saya telah membuat tahun yang berbeda sebagai pola dalam klausa yang sama.

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "\nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 *)
   echo -e "\n[ERROR] Enter the year between 2015 - 2021."
esac

Contoh 3 - Pencocokan pola dalam pernyataan kasus

Pencocokan pola dapat digunakan dalam pernyataan kasus. Saya menggunakan contoh yang sama dari bagian sebelumnya tetapi menambahkan pola tambahan (20[2-9][2-9]) di mana jika pengguna memasukkan tahun apa pun di atas 2021, ia akan mencetak pesan yang mengatakan "seri belum terjadi".

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "\nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 20[2-9][2-9])
   echo -e "\nSeries is yet to happen for the year $CAP" ;;
 *)
   echo -e "\n[ERROR] Enter the year between 2015 - 2021."
esac

Contoh 4 - Dapatkan konfirmasi pengguna

Terkadang Anda mungkin meminta pengguna untuk memberikan konfirmasi untuk melanjutkan ke langkah berikutnya dalam program Anda. Menggunakan pernyataan kasus akan menjadi pilihan yang baik untuk kasus penggunaan ini.

Pada contoh sebelumnya, pola ditulis dalam satu baris dan pernyataan di baris lain, tetapi Anda juga dapat menulis pola dan pernyataan dalam satu baris seperti yang ditunjukkan di bawah ini.

read -p "Input file is received in CSV format, Please confirm to load the data into production database  : " CONFIRM
case "$CONFIRM" in
 [Yy] | [Yy][Ee][Ss] ) echo "++ Running the utility to load the data to the database.." ;;
 [Nn] | [Nn][Oo] ) echo -e "++ Skipping load db step upon user confirmation..\n Exiting the script.." ;;
 *) echo -e "[ERROR] = Wrong Input, Exiting the script.."
esac

Contoh 5 - Pernyataan kasus dengan kode pengembalian

Anda dapat menulis logika untuk menangkap kode pengembalian dari perintah yang dijalankan sebelumnya dan mengambil beberapa tindakan menggunakan pernyataan kasus. Saya membuat kotak dialog GUI untuk menerima nama pengguna dan kata sandi dari pengguna menggunakan zenity . Jika pengguna berhasil mengirimkan nama pengguna dan kata sandi, zenity akan membuang kode pengembalian sebagai nol dan berdasarkan itu saya telah menambahkan logika untuk menambahkan pengguna baru. Apa pun selain nol, pesan kesalahan akan ditampilkan.

INFO=$(zenity --password --username)
case $? in
 0)
   USERNAME=$(echo ${INFO} | awk -F "|" '{ print $1 }')
   PASSWORD=$(echo ${INFO} | awk -F "|" '{ print $2 }')
   useradd -m -p "${PASSWORD}" "${USERNAME}"
   ;;
 *)
   echo "[ERROR] - User not added."
esac

Saya telah menekan tombol "Batal" tombol di kotak dialog, sehingga membuat saya kesalahan menggunakan pola default (* ).

Bacaan yang disarankan:

  • Cara Membuat Kotak Dialog GUI Dalam Skrip Bash Dengan Zenity Di Linux Dan Unix

Skrip referensi

Agar lebih nyaman dengan pernyataan kasus, Anda dapat melihat kode yang ada yang ditulis menggunakan pernyataan kasus. Tempat yang lebih baik untuk memulai adalah dengan membaca skrip startup di bawah /etc/init.d direktori. Misalnya, saya telah menginstal virtualbox di mesin saya dan memiliki file startup di bawah /etc/init.d direktori. Ada bagian kode yang ditulis menggunakan pernyataan kasus yang akan memberikan gambaran yang baik tentang cara kerja pernyataan kasus.

$ cd /etc/init.d/
$ cat bluetooth

Kesimpulan

Pada artikel ini, kita telah melihat apa itu pernyataan kasus di Bash dan berbagai cara untuk menggunakannya. Pernyataan kondisional dan pernyataan kasus memiliki tujuan yang sama. Anda harus memiliki pemahaman yang lebih baik tentang metode mana yang sesuai dengan kasus penggunaan. Pernyataan kasus juga akan digunakan ketika Anda harus membuat fungsi bantuan menggunakan getopt dan getopts program. Buat skrip dan mulailah mempraktikkan contoh yang telah kami berikan di sini untuk memahami lebih lanjut tentang pernyataan kasus.

Panduan pembuatan skrip Bash:

  • Skrip Bash – Pernyataan Bersyarat
  • Skrip Bash – Manipulasi String
  • Bash Scripting – Perintah Printf Dijelaskan Dengan Contoh
  • Bash Scripting – Array Terindeks Dijelaskan Dengan Contoh
  • Bash Scripting – Array Asosiatif Dijelaskan Dengan Contoh
  • Bash Scripting – Untuk Loop Dijelaskan Dengan Contoh
  • Bash Scripting – Sementara Dan Sampai Loop Dijelaskan Dengan Contoh
  • Pengalihan Bash Dijelaskan Dengan Contoh
  • Bash Scripting – Variabel Dijelaskan Dengan Contoh
  • Bash Scripting – Fungsi Dijelaskan Dengan Contoh
  • Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux
  • Tutorial Bash Heredoc Untuk Pemula

Linux
  1. Mekanisme Blok Pernyataan Dalam Scripting Shell?

  2. Bash/sh pernyataan 'jika lain'

  3. Apakah ada pernyataan goto di bash?

  1. Menggunakan Pernyataan Kasus di Bash

  2. Pernyataan Bash If-Else Dengan Contoh

  3. 5 Contoh Pernyataan Kasus Bash

  1. Sintaks Pernyataan Bash case dan Contohnya

  2. Bash melanjutkan:Cara Melanjutkan Loop

  3. Skrip bash(I)