Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành Thạo Câu Lệnh Case Bash: 5 Ví Dụ Thực Tế Cho Scripting Hiệu Quả

Thành Thạo Câu Lệnh Case Bash: 5 Ví Dụ Thực Tế Cho Scripting Hiệu QuảCâu lệnh case trong bash shell tương tự câu lệnh switch trong C. Nó có thể dùng để kiểm tra giá trị đơn giản như số nguyên và ký tự.

Câu lệnh case không phải vòng lặp, nó không thực thi khối mã n lần. Thay vào đó, bash shell kiểm tra điều kiện, và điều khiển luồng chương trình.

Trong bài này, chúng ta sẽ xem lại lệnh case bash với 5 ví dụ thực tế.

Cấu trúc case trong bash shell cho phép kiểm tra chuỗi đối với mẫu có thể chứa ký tự đại diện. Câu lệnh case bash là dạng đơn giản nhất của câu lệnh if-then-else bash.

Cú pháp câu lệnh case bash.

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

Các điểm chính của câu lệnh case bash:

  • Case trước mở rộng biểu thức và thử khớp với từng mẫu.
  • Khi tìm thấy khớp, tất cả câu lệnh liên kết cho đến dấu chấm phẩy kép (;;) được thực thi.
  • Sau khớp đầu tiên, case kết thúc với trạng thái thoát của lệnh cuối cùng thực thi.
  • Nếu không khớp, trạng thái thoát của case là 0.

Ví Dụ Case Bash 1. Gửi Tín Hiệu Cho Tiến Trình

Script sau chấp nhận số tín hiệu và process id làm đối số, và gửi tín hiệu cho process id cho trước dùng tên tín hiệu.

Script này để demo việc dùng câu lệnh case.

$ 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

Trong ví dụ trên:

  • $1 và $2 là số tín hiệu và process id tương ứng.
  • Dùng lệnh kill, nó gửi tín hiệu tương ứng cho process id cho trước.
  • Nó thực thi lệnh sleep một số giây.
  • So sánh cuối tùy chọn *) là trường hợp mặc định và khớp bất cứ thứ gì.

Cách dùng script shell trên: Tìm process id của lệnh sleep và gửi tín hiệu kill đến process id đó để kill tiến trình.

$ sleep 1000
$ ps -a | grep sleep
23277 pts/2 00:00:00 sleep
$ ./signal.sh 9 23277
Sending SIGKILL signal
$ sleep 1000
Killed

Cũng tham khảo bài trước về kill – 4 phương pháp kill tiến trình.

Ví Dụ Case Bash 2. Khớp Mẫu Trong File

Ví dụ này in số dòng, số từ và xóa dòng khớp với mẫu cho trước.

$ cat fileop.sh
#!/bin/bash
# Kiểm tra 3 đối số cho trước
if [ $# -lt 3 ]
then
  echo "Usage : $0 option pattern filename"
  exit
fi
# Kiểm tra file cho trước có tồn tại
if [ ! -f $3 ]
then
  echo "Filename given \"$3\" doesn't exist"
  exit
fi
case "$1" in
  # Đếm số dòng khớp
  -i) echo "Number of lines matches with the pattern $2 :"
      grep -c -i $2 $3 ;;
  # Đếm số từ khớp
  -c) echo "Number of words matches with the pattern $2 :"
      grep -o -i $2 $3 | wc -l ;;
  # In tất cả dòng khớp
  -p) echo "Lines matches with the pattern $2 :"
      grep -i $2 $3 ;;
  # Xóa tất cả dòng khớp
  -d) echo "After deleting the lines matches with the pattern $2 :"
      sed -n "/$2/!p" $3 ;;
  *) echo "Invalid option" ;;
esac

Thực thi script trên như dưới.

$ 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.

Đầu ra Bash case regex. Sau khi xóa dòng khớp mẫu Vim:

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

Cũng tham khảo bài trước về mở rộng ~ và { } trong Bash.

Ví Dụ Case Bash 3. Tìm Loại File Từ Phần Mở Rộng

Ví dụ này in loại file (text, Csource, v.v.) dựa trên phần mở rộng tên file.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
  # Lấy phần mở rộng trong tên file
  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

Ví Dụ Case Bash 4. Nhắc Người Dùng Yes Hoặc No

Trong hầu hết cài đặt phần mềm, khi đồng ý giấy phép, nó sẽ hỏi yes hoặc no từ người dùng. Đoạn mã sau là một cách để lấy đầu vào yes hoặc no từ người dùng.

$ 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

Nếu có một vài mẫu phân tách bằng ký tự pipe, biểu thức có thể khớp bất kỳ cái nào trong số đó để thực thi câu lệnh liên kết. Các mẫu được kiểm tra theo thứ tự cho đến khi tìm thấy khớp; nếu không tìm thấy, không có gì xảy ra.

Cũng tham khảo bài trước 15 ví dụ mảng bash.

Ví Dụ Case Bash 5. Script Khởi Động

Script khởi động trong thư mục /etc/init.d dùng câu lệnh case để khởi động và dừng ứng dụng.

Bạn có thể dùng bất kỳ loại mẫu nào, nhưng luôn khuyến khích dùng câu lệnh case, khi bạn kiểm tra giá trị nguyên thủy (số nguyên hoặc ký tự).

$ 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

Đọc Thêm

Thành Thạo Câu Lệnh Case Bash: 5 Ví Dụ Thực Tế Cho Scripting Hiệu QuảBash 101 Hacks, tác giả Ramesh Natarajan. Tôi dành hầu hết thời gian trên môi trường Linux. Vì vậy, tự nhiên tôi là fan hâm mộ lớn của dòng lệnh Bash và shell scripting. 15 năm trước, khi tôi làm việc trên các hương *nix khác nhau, tôi thường viết nhiều mã trên C shell và Korn shell. Những năm sau, khi bắt đầu làm quản trị hệ thống trên Linux, tôi khá nhiều tự động hóa mọi tác vụ có thể bằng Bash shell scripting. Dựa trên kinh nghiệm Bash, tôi đã viết eBook Bash 101 Hacks chứa 101 ví dụ thực tế về cả dòng lệnh Bash và shell scripting. Nếu bạn đang suy nghĩ về việc thành thạo Bash, hãy làm ơn đọc cuốn sách này, nó sẽ giúp bạn kiểm soát dòng lệnh Bash và shell scripting của mình.