2015-03-26 14 views
12

Tôi muốn kiểm tra, nếu có nhiều biến được đặt hay không, nếu đặt thì chỉ thực thi mã tập lệnh, nếu không thoát.Cách kiểm tra xem nhiều biến được xác định hay không trong bash

cái gì đó như:

if [ ! $DB=="" && $HOST=="" && $DATE=="" ]; then 
    echo "you did not set any variable" 
    exit 1; 
else 
    echo "You are good to go" 
fi  
+0

cho biến kiểm tra có giá trị hay không [-z $ a -a -z $ b -a -z $ c] && echo "không có giá trị" || echo "ok tốt để đi!" – powershell

Trả lời

25

Bạn có thể sử dụng -z để kiểm tra xem một biến là unset hoặc rỗng:

if [[ -z $DB || -z $HOST || -z $DATE ]]; then 
    echo 'one or more variables are undefined' 
    exit 1 
fi 

echo "You are good to go" 

Như bạn đã sử dụng thẻ , tôi đã sử dụng một thử nghiệm mở rộng [[, có nghĩa là tôi không cần sử dụng dấu ngoặc kép xung quanh các biến của tôi. Tôi giả định rằng bạn cần tất cả ba biến được xác định để tiếp tục. Các exit trong chi nhánh if có nghĩa là else là thừa.

Cách thông thường để làm điều đó trong bất kỳ vỏ POSIX-compliant sẽ là như thế này:

if [ -z "$DB" ] || [ -z "$HOST" ] || [ -z "$DATE" ]; then 
    echo 'one or more variables are undefined'   
    exit 1 
fi 

Sự khác biệt quan trọng ở đây là rằng mỗi lần kiểm tra biến đi bên trong một thử nghiệm riêng biệt và dấu ngoặc kép được sử dụng xung quanh mỗi mở rộng tham số.

+0

Cảm ơn! Tôi đoán bạn cũng có thể sử dụng '-o' để kết hợp các phép thử trong một biến vị ngữ duy nhất, thay vì sử dụng || và ba cuộc gọi '[' riêng biệt? – BeeOnRope

+1

@BeeOnRope Khuyến nghị là [tránh sử dụng '-a' và' -o'] (http://pubs.opengroup.org/onlinepubs/009696899/utilities/test.html) (xem phần _Application Usage_), đặc biệt khi xử lý các biến có thể do người dùng xác định. –

+0

Làm cho tinh thần, cảm ơn một lần nữa! – BeeOnRope

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