Pendahuluan
case
ba bash Pernyataan adalah bentuk paling sederhana dari pernyataan kondisional if elif else. case
pernyataan menyederhanakan kondisi kompleks dengan beberapa pilihan yang berbeda. Pernyataan ini lebih mudah dipelihara dan lebih mudah dibaca daripada if
. yang disarangkan pernyataan.
case
pernyataan menguji nilai input hingga menemukan pola yang sesuai dan menjalankan perintah yang terkait dengan nilai input itu. Dengan demikian, ini adalah pilihan yang sangat baik untuk membuat menu di mana pengguna memilih opsi yang memicu tindakan yang sesuai.
Dalam tutorial ini, Anda akan mempelajari case
bash pernyataan dasar dan cara menggunakannya dalam skrip shell.
Prasyarat
- Mesin yang menjalankan Linux.
- Akses ke baris perintah.
- Editor teks seperti vi/vim.
Sintaks Pernyataan kasus Bash
case
ba bash pernyataan mengambil sintaks berikut:
case $variable in
pattern-1)
commands;;
pattern-2)
commands;;
pattern-3)
commands;;
pattern-N)
commands;;
*)
commands;;
esac
case
pernyataan dimulai dengan case
kata kunci diikuti oleh $variable
dan in
kata kunci. Pernyataan diakhiri dengan case
kata kunci mundur - esac
.
$variable
- Skrip membandingkan input
$variable
terhadap pola di setiap klausa sampai menemukan kecocokan.
Pola
- Pola dan perintahnya membuat klausa , yang diakhiri dengan
;;
. - Pola mendukung karakter khusus.
)
operator mengakhiri daftar pola.|
operator memisahkan beberapa pola.- Skrip mengeksekusi perintah yang sesuai dengan pola pertama yang cocok dengan input
$variable
. - Tanda bintang
*
simbol mendefinisikan kasus default, biasanya dalam pola akhir.
Status Keluar
Skrip memiliki dua status keluar:
- 0 . Status pengembalian saat input tidak cocok dengan pola.
- Status perintah yang dijalankan . Jika perintah cocok dengan variabel input ke suatu pola, status keluar perintah yang dijalankan akan dikembalikan.
Contoh Pernyataan Kasus Bash
Bagian ini menunjukkan contoh praktis penggunaan case
ba bash pernyataan.
Contoh 1:Keluarkan Deskripsi untuk Setiap Opsi
Contoh berikut adalah skrip yang memungkinkan pengguna memilih warna dan menampilkan komentar yang sesuai dengan input menggunakan perintah echo.
Ikuti petunjuk di bawah ini:
1. Buka terminal (Ctrl + Alt + T ) dan buat skripnya:
vi color.sh
2. Tambahkan baris berikut ke skrip:
#!/bin/bash
echo "Which color do you like best?"
echo "1 - Blue"
echo "2 - Red"
echo "3 - Yellow"
echo "4 - Green"
echo "5 - Orange"
read color;
case $color in
1) echo "Blue is a primary color.";;
2) echo "Red is a primary color.";;
3) echo "Yellow is a primary color.";;
4) echo "Green is a secondary color.";;
5) echo "Orange is a secondary color.";;
*) echo "This color is not available. Please choose a different one.";;
esac
Masing-masing baris memiliki peran sebagai berikut:
- Baris pertama di setiap skrip biasanya adalah shebang (
#!
), yang menginstruksikan sistem operasi juru bahasa mana yang akan digunakan untuk mengurai file. - Baris 2-7 adalah menu opsi yang disajikan kepada pengguna untuk dipilih.
- Warna
read color;
variabel meminta jawaban kepada pengguna dan menyimpannya. case
pernyataan berisi kemungkinan tanggapan yang sesuai dengan input pengguna. Dalam contoh ini, outputnya adalahecho
keluaran perintah.- Baris terakhir,
esac
, mengakhiricase
pernyataan.
3. Simpan skrip dan keluar vi dengan perintah berikut:
:wq
4. Sebelum menjalankan setiap skrip, pastikan untuk melakukan chmod agar dapat dieksekusi:
chmod +x color.sh
5. Jalankan skrip:
./color.sh
Script menawarkan menu opsi dan menampilkan pesan yang berbeda tergantung pada opsi yang dipilih.
Contoh 2:Menggunakan Beberapa Pola
case
pernyataan memungkinkan menggunakan beberapa pola di setiap klausa. Jika ekspresi cocok dengan pola yang ditentukan, skrip akan mengeksekusi perintah dalam klausa tersebut.
Contoh skrip ini meminta pengguna untuk memasukkan bulan dan menampilkan jumlah hari. Ada tiga kemungkinan jawaban:
- 30 hari.
- 31 hari.
- 28 atau 29 hari untuk bulan Februari.
Ikuti langkah-langkah di bawah ini untuk membuat skrip:
1. Buat skrip month.sh dengan menjalankan:
vi month.sh
2. Masukkan baris berikut dan simpan skrip:
#!/bin/bash
shopt -s nocasematch
echo "Enter the name of a month."
read month
case $month in
February)
echo "There are 28/29 days in $month.";;
April | June | September | November)
echo "There are 30 days in $month.";;
January | March | May | July | August | October | December)
echo "There are 31 days in $month.";;
*)
echo "Unknown month. Please check if you entered the correct month name: $month";;
esac
Pada contoh di atas:
shopt
perintah dengan-s nocasematch
opsi mengurangi kemungkinan kesalahan dengan pencocokan pola yang tidak peka huruf besar/kecil.- Simbol pipa
|
memisahkan pola di setiap klausa.
3. Jadikan skrip dapat dieksekusi:
chmod +x month.sh
4. Jalankan skrip:
./month.sh
Script mengabaikan perbedaan dalam kasus dan menampilkan jumlah hari yang benar dalam bulan yang dipilih.
Contoh 3:untuk Loop
Gunakan for
loop dalam case
pernyataan ketika ada banyak ekspresi untuk diproses. Skrip berikut mengembalikan semua jenis file dari direktori.
Ikuti langkah-langkah di bawah ini:
1. Buat skrip shell:
vi filelist.sh
2. Masukkan baris berikut lalu simpan skrip:
#!/bin/bash
for file in $(ls)
do
Extension=${file##*.}
case "$Extension" in
sh) echo "Shell script: $file";;
md) echo "A markdown file: $file";;
png) echo "PNG image file: $file";;
txt) echo "A text file: $file";;
zip) echo "An archive: $file";;
conf) echo "A configuration file: $file";;
py) echo "A Python script: $file";;
*) echo "Unknown file type: $file";;
esac
done
Pada contoh di atas:
- ls perintah menarik daftar file dari direktori.
for
loop menerapkan file globbing untuk mengekstrak setiap ekstensi file.
3. Jadikan skrip dapat dieksekusi:
chmod +x filelist.sh
4. Jalankan skrip:
./filelist.sh
Script mengidentifikasi setiap jenis file yang ada di direktori saat ini.
Contoh 4:Membuat Buku Alamat
Gunakan case
pernyataan untuk membuat database sederhana dan dengan cepat menghasilkan informasi yang diminta. Contoh berikut menampilkan nama, alamat email, dan alamat orang yang dipilih:
1. Buat skrip:
vi phonebook.sh
2. Tambahkan baris berikut dan simpan skrip:
#!/bin/bash
echo "Choose a contact to display information:"
echo "[C]hris Ramsey"
echo "[J]ames Gardner"
echo "[S]arah Snyder"
echo "[R]ose Armstrong"
read person
case "$person" in
"C" | "c" ) echo "Chris Ramsey"
echo "[email protected]"
echo "27 Railroad Dr. Bayside, NY";;
"J" | "j" ) echo "James Gardner"
echo "[email protected]"
echo "31 Green Street, Green Cove Springs, FL";;
"S" | "s") echo "Sarah Snyder"
echo "[email protected]"
echo "8059 N. Hartford Court, Syosset, NY";;
"R" | "r") echo "Rose Armstrong"
echo "[email protected]"
echo "49 Woodside St., Oak Forest, IL";;
*) echo "Contact doesn't exist.";;
esac
3. Chmod skripnya:
chmod +x phonebook.sh
3. Jalankan skrip:
./phonebook.sh
Skrip menampilkan detail kontak untuk orang yang dipilih. Memilih opsi yang tidak terdaftar akan memberi tahu pengguna bahwa kontak tidak ada.
Contoh 5:Periksa Jenis Karakter
Contoh berikut menunjukkan cara menggunakan case
pernyataan untuk memeriksa jenis karakter yang telah dimasukkan pengguna.
Ikuti langkah-langkah di bawah ini:
1. Buat skrip:
vi character.sh
2. Tambahkan baris berikut dan simpan skrip:
#!/bin/bash
echo "Enter a character:"
read var
case $var in
[[:lower:]) echo "You entered a lowercase character.";;
[[:upper:]]) echo "You entered an uppercase character.";;
[0-9]) echo "You entered a digit.";;
?) echo "You entered a special character.";;
*) echo "You entered multiple characters.";;
esac
Pada contoh di atas:
$var
variabel kontrol menyimpan input.- Daripada mengetik semua kemungkinan kombinasi untuk dicocokkan, gunakan tanda kurung siku
[]
untuk menunjukkan rentang karakter. Gunakan tanda kurung siku ganda[[]]
untuk rentang POSIX.if-else
mengharuskan memasukkan setiap kondisi karakter satu per satu. ?
karakter mencakup karakter yang bukan huruf kecil, huruf besar, atau angka. Itu hanya menggantikan satu karakter, bukan*
yang menggantikan semua hal lain yang tidak tercakup oleh ketentuan di atas.
3. Ubah izin untuk membuat skrip dapat dieksekusi:
chmod +x character.sh
4. Jalankan skrip:
./character.sh
Output menyatakan jenis karakter yang dimasukkan setelah mencocokkannya dengan kondisi yang ditentukan.