Mỗi case
là một biểu thức khớp với một mẫu. Các lệnh trong LIST-LIST cho trận đấu đầu tiên được thực thi. Các |
biểu tượng được sử dụng để tách nhiều mô hình, và các )
nhà điều hành chấm dứt một danh sách mẫu. Mỗi trường hợp cộng với các lệnh theo nó được gọi là một mệnh đề. Mỗi mệnh đề phải được chấm dứt với ;;
. Mỗi tuyên bố trường hợp được kết thúc với esac
.
Đây là kịch bản Bash sẽ được trình bày trong hướng dẫn này, với phần giải thích về từng phần của kịch bản.
#!/bin/bash
echo "Starting sctipt $0"
display_usage() {
echo
echo "Usage: $0"
echo
echo " -h, --help Display usage instructions"
echo " -p, --print Print welcome message"
echo
}
print_message() {
echo
echo "Welcome to Bash case statements!"
echo
}
raise_error() {
local error_message="$@"
echo "${error_message}" 1>&2;
}
argument="$1"
if [[ -z $argument ]] ; then
raise_error "Expected argument to be present"
display_usage
else
case $argument in
-h|--help)
display_usage
;;
-p|--print)
print_message
;;
*)
raise_error "Unknown argument: ${argument}"
display_usage
;;
esac
fi
echo "Finished script $0"
Đây là đầu ra từ việc chạy tập lệnh với tham số –print
❯ ./bashcase.sh --print
Starting sctipt ./bashcase.sh
Welcome to Bash case statements!
Finished script ./bashcase.sh
Cấu trúc case
Câu lệnh tình huống này cung cấp ba tùy chọn: để hiển thị trợ giúp, in một chuỗi hoặc đưa ra lỗi cho bất kỳ đối số nào khác được truyền khi chạy tập lệnh. Dưới đây là những gì một số từ khóa chính làm liên quan đến cấu trúc mã.
case $argument in
-h|--help)
display_usage
;;
-p|--print)
print_message
;;
*)
raise_error "Unknown argument: ${argument}"
display_usage
;;
esac
case
từ khóa bắt đầu khối câu lệnhin
theo biến được kiểm tra trong báo cáo trường hợp)
kết thúc một mẫu để khớp với biến (xem thêm bên dưới);;
kết thúc một phần
Biến $argument lưu trữ giá trị của $ 1, là đối số đầu tiên trong danh sách tham số được truyền cho tập lệnh hoặc hàm Bash. Đối số được kiểm tra đối với từng mẫu theo thứ tự. Một tập hợp các điều kiện để kiểm tra bắt đầu từ một dòng của mỗi mệnh đề trường hợp.
- Mẫu hoặc tập hợp các điều kiện để kiểm tra kết quả khớp với)
- Bạn có thể có nhiều tùy chọn để khớp cách nhau bởi |
-h|--help)
Điều này sẽ phù hợp với cả hai -h
hoặc --help
. Khi điều này xảy ra, mã trong mệnh đề trường hợp được kích hoạt, trong trường hợp này để gọi hàm display_usage để hiển thị hướng dẫn cho người dùng.
Mỗi mệnh đề kết thúc bằng ;; và tuyên bố trường hợp kết thúc. Mã sẽ tiếp tục chạy từ cuối câu lệnh tình huống, như được hiển thị bởi từ khóa esac. Bạn sẽ có thể quan sát điều này trong thiết bị đầu cuối khi nó in thông báo dưới đây.
❯ ./bashcase.sh --help
Starting sctipt ./bashcase.sh
Usage: ./bashcase.sh
-h, --help Display usage instructions
-p, --print Print welcome message
Finished script ./bashcase.sh
Bạn có thể muốn bắt bất kỳ điều gì không được xác định trong tuyên bố trường hợp. Ký tự đại diện để khớp với tất cả được xác định là *. Ví dụ: nếu bạn muốn cung cấp một thông báo lỗi hữu ích, bạn có thể in một thông báo giải thích nguyên nhân của vấn đề.
*)
raise_error "Unknown argument: ${argument}"
display_usage
;;
❯ ./bashcase.sh what?
Starting sctipt ./bashcase.sh
Unknown argument: what?
Usage: ./bashcase.sh
-h, --help Display usage instructions
-p, --print Print welcome message
Finished script ./bashcase.sh
Có nhiều cách để thêm mã xung quanh các câu lệnh tình huống để tăng tính mạnh mẽ của mã và mở rộng những gì họ có thể làm. Dưới đây là một vài gợi ý để xem xét thêm: xác thực đối số và vòng lặp trong nhiều đối số.
Xác thực đối số
Nó rất hữu ích để xác định xem các đối số dự kiến có mặt và ở định dạng chính xác trước khi thực thi mã hay không. Dưới đây là một ví dụ về cách kiểm tra sự hiện diện của một đối số.
if [[ -z $argument ]] ; then
raise_error "Expected argument to be present"
display_usage
else ...
Điều kiện if với dấu ngoặc vuông đôi gọi một phép thử trên đối số, với -z
tùy chọn được sử dụng để trả về true khi không có giá trị.
./bashcase.sh
Starting sctipt ./bashcase.sh
Expected argument to be present
Usage: ./bashcase.sh
-h, --help Display usage instructions
-p, --print Print welcome message
Finished script ./bashcase.sh
Trong các vòng lặp
case trường hợp thường được sử dụng kết hợp với vòng lặp while. Điều này có thể cho phép bạn sử dụng cùng một câu lệnh tình huống để làm việc với nhiều đối số.
while CONDITION_IS_TRUE ; do
COMMANDS
done
Không có nhận xét nào:
Đăng nhận xét