Trên thực tế, bạn có thể đặt một số thuộc tính trên các biến bằng cách sử dụng nội dung declare
(hoặc cũ typeset
). declare -i var1 var2
sẽ đặt thuộc tính số nguyên trên các biến đó. Sau các bài tập cố gắng đặt các giá trị không nguyên cho các biến đó sẽ gây ra lỗi.
Nhưng vấn đề của bạn là với cú pháp. Khi sử dụng giá trị của biến, bạn phải đặt tiền tố tên của nó bằng $
:
if [ "$var1" -lt "$var2" ]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
Các ngoại lệ là các đánh giá số học, trong đó không cần $
:
if ((var1<var2)); then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
Như một lời cảnh báo, bên trong [
.. ]
luôn trích dẫn hai biến của bạn để tránh mở rộng từ làm rối cú pháp biểu thức của bạn. (Ý tôi là, bạn sẽ gặp vấn đề với các biến unset, biến chứa chuỗi rỗng và biến chứa IFS
ký tự.) Hoặc bạn có thể sử dụng cái mới hơn và tốt hơn [[
.. ]]
thay vào đó xử lý chính xác các trường hợp như vậy:
if [[ $var1 -lt $var2 ]]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
[[ $var1 < $var2 ]]
là so sánh chuỗi , không phải so sánh số học ...[[ 11 > 2 ]]
kiểm tra là sai ...[[ 11 -gt 2 ]]
kiểm tra là đúng