2013-03-27 27 views
22

Tôi nên thay đổi điều này như thế nào để kiểm tra xem val có giá trị số chẵn hay lẻ không?Làm cách nào để kiểm tra xem biến có giá trị số chẵn (không lẻ) trong bash không?

val=2 
if $((RANDOM % $val)); ... 
+0

Bạn muốn kiểm tra điều gì? – fedorqui

+0

Tôi cần đây là câu lệnh có điều kiện chính xác để kiểm tra xem biến ngẫu nhiên có đồng đều hay không. Bây giờ nó chỉ nói: "0: lệnh không tìm thấy" – lizarisk

+0

Như thế này? http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash –

Trả lời

40
$ a=4 

$ [ $((a%2)) -eq 0 ] && echo "even" 
even 

$ a=3 

$ [ $((a%2)) -eq 0 ] && echo "even" 
+1

Đã học được điều gì đó mới mẻ với lệnh logic AND và echo. Cám ơn. – shparekh

9

$((...)) chỉ là một biểu hiện. Kết quả của nó xuất hiện ở nơi bash mong đợi một lệnh.

giải pháp

Một POSIX tương thích sẽ là:

if [ "$((RANDOM % 2))" -ne 0 ]; 

nhưng vì RANDOM không được định nghĩa trong POSIX một trong hai, bạn cũng có thể sử dụng lệnh ngay bash cho công việc: một lệnh phức hợp đánh giá số học:

if ((RANDOM % 2)); then 
+0

nó là lạ (ví dụ, khó đọc) rằng 'if ((RANDOM% 2)); sau đó' sẽ đúng khi RANDOM KHÔNG phải là bội số của 2 ... –

+0

Đây là thành ngữ tương tự thường được sử dụng trong các ngôn ngữ khác. C sẽ có 'if (random/2) {...}'. Python sẽ có 'if random/2: ...'. – chepner

24
foo=6 

if [ $((foo%2)) -eq 0 ]; 
then 
    echo "even"; 
else 
    echo "odd"; 
fi 
+0

Điều này giải quyết được vấn đề của tôi. – shparekh

Các vấn đề liên quan