Cũng giống như bất kỳ lệnh đơn giản nào khác, [ ... ]
hoặc test
yêu cầu khoảng trắng giữa các đối số của nó.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Hoặc là
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Gợi ý
Khi ở Bash, thích sử dụng [[ ]]
thay vì nó không thực hiện phân tách từ và mở rộng tên đường dẫn đến các biến của nó mà trích dẫn có thể không cần thiết trừ khi đó là một phần của biểu thức.
[[ $# -ne 1 ]]
Nó cũng có một số tính năng khác như nhóm điều kiện không trích dẫn, khớp mẫu (khớp mẫu mở rộng với extglob
) và khớp regex.
Ví dụ sau kiểm tra xem các đối số có hợp lệ không. Nó cho phép một hoặc hai đối số.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Cho các biểu thức số học thuần túy, sử dụng (( ))
đối với một số vẫn có thể tốt hơn, nhưng họ vẫn có thể ở [[ ]]
với toán tử số học của nó thích -eq
, -ne
, -lt
, -le
, -gt
, hoặc -ge
bằng cách đặt các biểu hiện như một đối số chuỗi duy nhất:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Điều đó sẽ hữu ích nếu bạn cũng cần kết hợp nó với các tính năng khác [[ ]]
.
Thoát khỏi kịch bản
Nó cũng hợp lý để làm cho đoạn mã thoát khi các tham số không hợp lệ được truyền cho nó. Điều này đã được đề xuất trong các bình luận của e Khangas nhưng ai đó đã chỉnh sửa câu trả lời này để có nó với -1
giá trị trả về, vì vậy tôi cũng có thể làm đúng.
-1
mặc dù được Bash chấp nhận như là một đối số exit
không được ghi lại rõ ràng và không được sử dụng như một gợi ý chung. 64
cũng là giá trị trang trọng nhất kể từ khi nó được định nghĩa trong sysexits.h
với #define EX_USAGE 64 /* command line usage error */
. Hầu hết các công cụ như ls
cũng trả 2
về các đối số không hợp lệ. Tôi cũng đã từng quay trở lại 2
trong các kịch bản của mình nhưng gần đây tôi không còn quan tâm nữa, và chỉ đơn giản là sử dụng 1
trong tất cả các lỗi. Nhưng chúng ta hãy đặt 2
ở đây vì nó phổ biến nhất và có thể không dành riêng cho hệ điều hành.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Người giới thiệu
test
. Đó là tên của một lệnh Unix tiêu chuẩn, bạn sẽ không muốn làm mờ nó.