6. Lập trình shell.
6.5.2 .L nh case ệ
Lệnh case cho phép bạn so sánh một mẫu với một số các mẫu khác và thực thi một khối mã nếu một sự giống nhau được tìm thấy. Lệnh case trong shell mạnh hơn lệnh case trong Pascal hay lệnh switch trong C. Với lệnh shell trong case , bạn có thể so sánh các xâu với các kí tự đại diện trong chúng; bạn có thể chỉ có thể so sánh các kiểu được liệt kê hoặc các giá trị số nguyên trong Pascal và C.
Cú pháp cho lệnh case trong bash và pdksh là như sau: case string1 in str1) commands;; str2) commands;; *)
commands;; esac
String1 được so sánh với str1 và str2. Nếu một trong các xâu này hộ với string1, các câu lệnh bên dưới nó cho đến khi gặp hai dấu chấm phẩy(;;) được thực hiện. Nếu không có xâu nào (str1 hoặc str2) hợp với string1, các câu lệnh kết hợp với dấu hoa thị được thực thi. Các câu lệnh này là điều kiện case mặc định bởi vì dấu hoa thị hợp với tất cả các xâu.
Câu lệnh trong tcsh tương đương với câu lệnh case trong bash và pdksh được gọi là lệnh switch. Lệnh này gần gũi với cú pháp lệnh switch trong C. Cú pháp cho lệnh switch là như sau:
switch (string1) case str1: statements breaksw case str2: statements breaksw default: statements breaksw endsw
Lệnh này xử lý giống nư cách sử lý của lệnh case trong bash và pdksh. Mỗi xâu trong từ khóa case được so sánh với string1. Nếu xâu bất kỳ trong các xâu trên hợp với string1, các mã bên dưới nó cho đến khi gặp từ khóa breaksw keyword được thực hiện. Nếu không có xâu nào phù hợp, các mã ở bên dưới từ khóa default cho đến khi gặp từ khóa breaksw được thực thi.
Mã bên dưới là một ví dụ về lệnh case trong shell bash hay pdksh. Mã này kiểm tra xem tùy chọn đầu tiên trong dòng lệnh là -i hay -e. Nếu nó là -i, chương trình đếm số các dòng trong một file xác định bởi tùy chọn thứ hai trong dòng lệnh bắt đầu với ký tự i. Nếu tùy chọn thứ nhất là -e, chương trình đếm số các dòng trong file được xác định bởi tùy chọn thứ hai của dòng lệnh bắt đầu với ký tự e. Nếu tùy chọn thứ nhất của dòng lệnh khác -i và khác -e, chương trình sẽ in ra thông tin báo lỗi trên màn hình.
case $1 in -i)
count=`grep ^i $2 | wc -l`
echo "The number of lines in $2 that start with an i is $count" ;;
-e)
count=`grep ^e $2 | wc -l`
echo "The number of lines in $2 that start with an e is $count" ;;
* )
echo "That option is not recognized" ;;
esac
Ví dụ tương tự được viết theo cú pháp tcsh:
# remember that the first line must start with a # when using tcsh switch ( $1 )
case -i | i:
set count = `grep ^i $2 | wc -l`
echo "The number of lines in $2 that begin with i is $count" breaksw
case -e | e:
set count = `grep ^e $2 | wc -l`
echo "The number of lines in $2 that begin with e is $count" breaksw
default:
echo "That option is not recognized" breaksw
endsw