Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

5 Ví dụ về tuyên bố trường hợp Bash

5 Ví dụ về tuyên bố trường hợp Bash Câu lệnh Bash shell tương tự như câu lệnh switch trong C. Nó có thể được sử dụng để kiểm tra các giá trị đơn giản như số nguyên và ký tự.

Câu lệnh trường hợp không phải là một vòng lặp, nó không thực thi một khối mã trong n số lần. Thay vào đó, bash shell sẽ kiểm tra điều kiện và kiểm soát luồng của chương trình.

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

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

Cú pháp của câu lệnh viết hoa bash.

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

Sau đây là những điểm chính của câu lệnh bash case:

  • Trước tiên, câu lệnh viết hoa mở rộng biểu thức và cố gắng khớp biểu thức đó với từng mẫu.
  • Khi tìm thấy kết quả khớp, tất cả các câu lệnh liên quan cho đến khi dấu chấm phẩy kép (;;) được thực thi.
  • Sau lần so khớp đầu tiên, trường hợp kết thúc với trạng thái thoát của lệnh cuối cùng được thực thi.
  • Nếu không khớp, trạng thái thoát của trường hợp bằng không.

Ví dụ về trường hợp Bash 1. Gửi tín hiệu đến một quá trình

Tập lệnh sau chấp nhận số tín hiệu và id quy trình làm đối số của nó và gửi tín hiệu đến một id quy trình nhất định bằng cách sử dụng tên tín hiệu.

Tập lệnh này để chứng minh cách sử dụng câu lệnh trường hợp.

$ 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ần lượt là số tín hiệu và id quy trình.
  • Sử dụng lệnh kill, nó sẽ gửi tín hiệu tương ứng đến id quy trình đã cho.
  • Nó thực hiện lệnh ngủ trong một số giây.
  • So sánh cuối cùng tùy chọn *) là trường hợp mặc định và phù hợp với bất kỳ điều gì.

Cách sử dụng tập lệnh shell ở trên:Tìm hiểu id quy trình của lệnh ngủ và gửi tín hiệu hủy tới id quy trình đó để hủy quy 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

Ngoài ra, hãy tham khảo bài viết tiêu diệt trước đó của chúng tôi - 4 phương pháp để tiêu diệt một quy trình.

Ví dụ về trường hợp Bash. 2. Khớp mẫu trong tệp

Ví dụ này in số dòng, số từ và xóa các dòng phù hợp với mẫu đã cho.

$ 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

Việc thực thi tập lệnh trên được hiển thị bên 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.

Bash case regex đầu ra. Sau khi xóa các dòng phù hợp với mẫu Vim:

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

Ngoài ra, hãy tham khảo bài viết trước đây của chúng tôi về Bash ~ expansaion và {} mở rộng.

Ví dụ về trường hợp Bash 3. Tìm loại tệp từ Phần mở rộng

Ví dụ này in loại tệp (văn bản, Csource, v.v.) dựa trên phần mở rộng của tên tệp.

$ 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

Ví dụ về Bash Case 4. Nhắc người dùng bằng Có hoặc Không

Trong hầu hết các cài đặt phần mềm, trong quá trình thỏa thuận cấp phép, nó sẽ yêu cầu người dùng nhập vào có hoặc không. Đoạn mã sau là một trong những cách để nhận được thông tin đầu vào có hoặc không 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 số mẫu được phân tách bằng ký tự ống dẫn, biểu thức có thể khớp với bất kỳ mẫu nào trong số chúng để chạy các câu lệnh liên quan. Các mẫu được kiểm tra theo thứ tự cho đến khi tìm thấy kết quả phù hợp; nếu không tìm thấy, không có gì xảy ra.

Ngoài ra, hãy tham khảo bài viết 15 ví dụ về mảng bash trước đó của chúng tôi.

Ví dụ về trường hợp Bash 5. Tập lệnh khởi động

Các tập lệnh khởi động trong thư mục /etc/init.d sử dụng câu lệnh trường hợp để khởi động và dừng ứng dụng.

Bạn có thể sử dụng bất kỳ loại mẫu nào, nhưng luôn được khuyến khích sử dụng câu lệnh trường hợp, khi bạn đang kiểm tra các giá trị của nguyên mẫu. (tức là. 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 đề xuất

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