GNU/Linux >> Belajar Linux >  >> Linux

5 Contoh Pernyataan Kasus Bash

Pernyataan kasus shell bash mirip dengan pernyataan switch di C. Ini dapat digunakan untuk menguji nilai sederhana seperti bilangan bulat dan karakter.

Pernyataan kasus bukan loop, itu tidak mengeksekusi blok kode untuk n kali. Sebagai gantinya, bash shell memeriksa kondisinya, dan mengontrol aliran program.

Dalam artikel ini mari kita tinjau perintah bash case dengan 5 contoh praktis.

Konstruksi case di bash shell memungkinkan kita untuk menguji string terhadap pola yang dapat berisi karakter wild card. Pernyataan kasus bash adalah bentuk paling sederhana dari pernyataan bash if-then-else.

Sintaks pernyataan kasus bash.

case expression in
    pattern1 )
        statements ;;
    pattern2 )
        statements ;;
    ...
esac

Berikut ini adalah poin kunci dari pernyataan kasus bash:

  • Pernyataan huruf besar-kecil terlebih dahulu memperluas ekspresi dan mencoba mencocokkannya dengan setiap pola.
  • Ketika kecocokan ditemukan, semua pernyataan terkait hingga titik koma ganda (;;) dieksekusi.
  • Setelah pertandingan pertama, kasus berakhir dengan status keluar dari perintah terakhir yang dieksekusi.
  • Jika tidak ada kecocokan, status keluar dari kasus adalah nol.

Contoh Kasus Bash 1. Mengirim Sinyal ke Proses

Skrip berikut menerima nomor sinyal dan id proses sebagai argumennya, dan mengirimkan sinyal ke id proses tertentu menggunakan nama sinyal.

Skrip ini untuk mendemonstrasikan penggunaan pernyataan kasus.

$ cat signal.sh
#!/bin/bash

if [ $# -lt 2 ]
then
        echo "Usage : $0 Signalnumber PID"
        exit
fi

case "$1" in

1)  echo "Sending SIGHUP signal"
    kill -SIGHUP $2
    ;;
2)  echo  "Sending SIGINT signal"
    kill -SIGINT $2
    ;;
3)  echo  "Sending SIGQUIT signal"
    kill -SIGQUIT $2
    ;;
9) echo  "Sending SIGKILL signal"
   kill -SIGKILL $2
   ;;
*) echo "Signal number $1 is not processed"
   ;;
esac

Pada contoh di atas:

  • $1 dan $2 masing-masing adalah nomor sinyal dan id proses.
  • Menggunakan perintah kill, ia mengirimkan sinyal yang sesuai ke id proses yang diberikan.
  • Ini menjalankan perintah sleep selama beberapa detik.
  • Perbandingan terakhir opsional *) adalah kasus default dan cocok dengan apa pun.

Penggunaan skrip shell di atas:Cari tahu id proses dari perintah sleep dan kirim sinyal mematikan ke id proses itu untuk mematikan proses.

$ sleep 1000

$ ps -a | grep sleep
23277 pts/2    00:00:00 sleep

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

Juga, lihat artikel kill kami sebelumnya – 4 metode untuk mematikan suatu proses.

Contoh Kasus Bash. 2. Pencocokan Pola dalam File

Contoh ini mencetak jumlah baris, jumlah kata dan menghapus baris yang cocok dengan pola yang diberikan.

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
        echo "Usage : $0 option pattern filename"
        exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
        echo "Filename given \"$3\" doesn't exist"
        exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
    grep -c -i $2 $3
    ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
    grep -o -i $2 $3 | wc -l
    ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
    grep -i $2 $3
    ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
    sed -n "/$2/!p" $3
    ;;
*) echo "Invalid option"
   ;;
esac

Eksekusi skrip di atas ditunjukkan di bawah ini.

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

Output regex kasus bash. Setelah menghapus garis cocok dengan pola Vim:

$ ./fileop.sh  -d Vim text
It is the most popular editor amongst Linux Journal readers.

Juga, lihat artikel kami sebelumnya tentang Bash ~ expansaion dan {} expansion.

Contoh Kasus Bash 3. Temukan jenis File dari Ekstensi

Contoh ini mencetak jenis file (teks, Csource, dll) berdasarkan ekstensi nama file.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
	# Take extension available in a filename
        ext=${filename##*\.}
        case "$ext" in
        c) echo "$filename : C source file"
           ;;
        o) echo "$filename : Object file"
           ;;
        sh) echo "$filename : Shell script"
            ;;
        txt) echo "$filename : Text file"
             ;;
        *) echo " $filename : Not processed"
           ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Contoh Kasus Bash 4. Meminta Pengguna dengan Ya atau Tidak

Di sebagian besar instalasi perangkat lunak, selama perjanjian lisensi, ia akan meminta masukan ya atau tidak dari pengguna. Cuplikan kode berikut adalah salah satu cara untuk mendapatkan input ya atau tidak dari pengguna.

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

        [yY] | [yY][Ee][Ss] )
                echo "Agreed"
                ;;

        [nN] | [n|N][O|o] )
                echo "Not agreed, you can't proceed the installation";
                exit 1
                ;;
        *) echo "Invalid input"
            ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

Jika ada beberapa pola yang dipisahkan oleh karakter pipa, ekspresi dapat cocok dengan salah satu pola tersebut agar pernyataan terkait dapat dijalankan. Pola diperiksa secara berurutan sampai ditemukan kecocokan; jika tidak ada yang ditemukan, tidak ada yang terjadi.

Juga, lihat artikel 15 contoh array bash kami sebelumnya.

Contoh Kasus Bash 5. Skrip Startup

Skrip startup di direktori /etc/init.d menggunakan pernyataan kasus untuk memulai dan menghentikan aplikasi.

Anda dapat menggunakan jenis pola apa pun, tetapi selalu disarankan untuk menggunakan pernyataan kasus, saat Anda menguji nilai primitif. (yaitu bilangan bulat atau karakter).

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

Bacaan yang Disarankan

Bash 101 Hacks, oleh Ramesh Natarajan . Saya menghabiskan sebagian besar waktu saya di lingkungan Linux. Jadi, tentu saja saya penggemar berat baris perintah Bash dan skrip shell. 15 tahun yang lalu, ketika saya mengerjakan berbagai rasa *nix, saya biasa menulis banyak kode pada shell C dan shell Korn. Bertahun-tahun kemudian, ketika saya mulai bekerja di Linux sebagai administrator sistem, saya cukup banyak mengotomatisasi setiap tugas yang mungkin menggunakan skrip Bash shell. Berdasarkan pengalaman Bash saya, saya telah menulis eBook Bash 101 Hacks yang berisi 101 contoh praktis pada baris perintah Bash dan skrip shell. Jika Anda berpikir untuk menguasai Bash, bantulah diri Anda sendiri dan baca buku ini, yang akan membantu Anda mengendalikan baris perintah Bash dan skrip shell.


Linux
  1. Menggunakan Pernyataan Kasus di Bash

  2. 6 Contoh Ekspresi Kondisional Bash ( -e, -eq, -z, !=, [, [[ ..)

  3. 4 Contoh Pernyataan Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  1. Pernyataan Bash If-Else Dengan Contoh

  2. 4 Contoh Pernyataan Awk If ( if, if else, if else if, :? )

  3. Contoh Bash untuk loop

  1. Cara Menulis Skrip Bash dengan Contoh

  2. Bash/sh pernyataan 'jika lain'

  3. Apakah ada pernyataan goto di bash?