Lệnh Case .. esac trong Shell Script

Bài viết này sẽ hướng dẫn cách sử dụng cú pháp Case esac trong shell script, cùng với các ví dụ minh họa rõ ràng để giúp bạn hiểu rõ và áp dụng lệnh này.

Xem thêm:

Logging trong Shell Script

Các debug code Shell Script trên Linux

1. Cú pháp lệnh case .. esac trong shell script

Câu lệnh case là một cách để so sánh một biến với nhiều giá trị khác nhau và thực hiện các lệnh tương ứng với giá trị khớp.

Nó thường được sử dụng thay thế cho câu lệnh if-else lồng nhau khi bạn cần so sánh một biến với nhiều giá trị.

Cú pháp của câu lệnh case bao gồm:

  • Từ khóa case, theo sau là biến cần kiểm tra và từ khóa in.
  • Danh sách các mẫu (pattern) để so sánh với biến, mỗi mẫu kết thúc bằng dấu ngoặc đơn ).
  • Các lệnh cần thực hiện nếu mẫu khớp, kết thúc bằng dấu chấm phẩy kép ;;.
  • Từ khóa esac để kết thúc câu lệnh case. esac
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
case $bien in
mau1)
# Các lệnh nếu $bien khớp với mau1
;;
mau2)
# Các lệnh nếu $bien khớp với mau2
;;
*)
# Các lệnh nếu $bien không khớp với bất kỳ mẫu nào ở trên
;;
esac
case $bien in mau1) # Các lệnh nếu $bien khớp với mau1 ;; mau2) # Các lệnh nếu $bien khớp với mau2 ;; *) # Các lệnh nếu $bien không khớp với bất kỳ mẫu nào ở trên ;; esac
case $bien in
    mau1)
        # Các lệnh nếu $bien khớp với mau1
        ;;
    mau2)
        # Các lệnh nếu $bien khớp với mau2
        ;;
    *)
        # Các lệnh nếu $bien không khớp với bất kỳ mẫu nào ở trên
        ;;
esac

2. Ví dụ lệnh case .. esac trong shell script

Ví dụ 1:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
case "$1" in
start)
/usr/sbin/sshd
;;
stop)
kill $(cat /var/run/sshd.pid)
;;
*)
echo "Usage: $0 {start|stop}"; exit 1
;;
esac
case "$1" in start) /usr/sbin/sshd ;; stop) kill $(cat /var/run/sshd.pid) ;; *) echo "Usage: $0 {start|stop}"; exit 1 ;; esac
case "$1" in
    start)
        /usr/sbin/sshd 
        ;;
    stop)
        kill $(cat /var/run/sshd.pid)
        ;;
    *)
        echo "Usage: $0 {start|stop}"; exit 1
        ;;
esac

Giải thích:

  • Nếu chạy script với tham số start, nó sẽ khởi động dịch vụ SSH daemon.
  • Nếu chạy với tham số stop, nó sẽ dừng dịch vụ SSH daemon.
  • Nếu tham số không hợp lệ, nó sẽ hiển thị thông báo hướng dẫn cách sử dụng.

Ví dụ 2:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
read -p "Enter y or n: " ANSWER
case "$ANSWER" in
[yY] | [yY] [eE] [sS])
echo "Your answered yes."
;;
[nN] | [nN] [oO]
echo "Your answered no."
;;
*)
echo "Invalid answered."
;;
esac
read -p "Enter y or n: " ANSWER case "$ANSWER" in [yY] | [yY] [eE] [sS]) echo "Your answered yes." ;; [nN] | [nN] [oO] echo "Your answered no." ;; *) echo "Invalid answered." ;; esac
read -p "Enter y or n: " ANSWER
case "$ANSWER" in
 [yY] | [yY] [eE] [sS])
  echo "Your answered yes."
  ;;
 [nN] | [nN] [oO]
  echo "Your answered no."
  ;;
 *)
  echo "Invalid answered."
  ;;

esac

Ví dụ 3:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/bin/sh
FRUIT="kiwi"
case "$FRUIT" in
"apple") echo "An tao rat ngon."
;;
"banana") echo "Chuoi nhieu chat dinh duong."
;;
"kiwi") echo "Kiwi noi tieng o New Zealand"
;;
esac
#!/bin/sh FRUIT="kiwi" case "$FRUIT" in "apple") echo "An tao rat ngon." ;; "banana") echo "Chuoi nhieu chat dinh duong." ;; "kiwi") echo "Kiwi noi tieng o New Zealand" ;; esac
#!/bin/sh
 
FRUIT="kiwi"
 
case "$FRUIT" in
   "apple") echo "An tao rat ngon."
   ;;
   "banana") echo "Chuoi nhieu chat dinh duong."
   ;;
   "kiwi") echo "Kiwi noi tieng o New Zealand"
   ;;
esac

Ví dụ 4:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
option="${1}"
case ${option} in
-f) FILE="${2}"
echo "File name is $FILE"
;;
-d) DIR="${2}"
echo "Dir name is $DIR"
;;
*)
echo "`basename ${0}`:usage: [-f file] | [-d directory]"
exit 1 # Command to come out of the program with status 1
;;
esac
option="${1}" case ${option} in -f) FILE="${2}" echo "File name is $FILE" ;; -d) DIR="${2}" echo "Dir name is $DIR" ;; *) echo "`basename ${0}`:usage: [-f file] | [-d directory]" exit 1 # Command to come out of the program with status 1 ;; esac
option="${1}"
case ${option} in
   -f) FILE="${2}"
      echo "File name is $FILE"
      ;; 
   -d) DIR="${2}"
      echo "Dir name is $DIR"
      ;; 
   *)  
      echo "`basename ${0}`:usage: [-f file] | [-d directory]"
      exit 1 # Command to come out of the program with status 1
      ;; 
esac

Qua bài viết này, biết cách sử dụng lệnh Case .. esac Shell Script. Nhờ vào tính linh hoạt và dễ sử dụng, lệnh này giúp bạn kiểm soát các luồng điều kiện phức tạp trong script, tiết kiệm thời gian và tối ưu hóa quy trình làm việc. Cảm ơn bạn đã tham khảo trên ttnguyen.net.

Bài viết liên quan:

Vòng lặp trong Shell Script

Mảng trong Shell Script

Hàm trong Shell Script

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em