2014-05-08 22 views
5

Tôi muốn biết liệu có thể có nhiều hơn hai câu lệnh trong câu lệnh if khi bạn đang viết tập lệnh shell không?Nhiều điều kiện trong kịch bản lệnh if statement

username1="BOSS1" 
username2="BOSS2" 
password1="1234" 
password2="4321" 

if(($username == $username1)) && (($password == password1)) || 
    (($username == $username2)) && (($password == password2)) ; then 

Điều này không hoạt động. Nhưng có cách nào để làm cho nó hoạt động không?

Cảm ơn!

Trả lời

8

Bạn đang cố so sánh các chuỗi bên trong lệnh số học (((...))). Sử dụng [[ để thay thế.

if [[ $username == "$username1" && $password == "$password1" ]] || 
    [[ $username == "$username2" && $password == "$password2" ]]; then 

Lưu ý rằng tôi đã giảm này đến hai bài kiểm tra riêng biệt tham gia của ||, với && chuyển bên trong các bài kiểm tra. Điều này là do các toán tử shell &&|| có quyền ưu tiên bằng nhau và được đánh giá đơn giản từ trái sang phải. Kết quả là, nó thường không đúng là a && b || c && d tương đương với mục đích (a && b) || (c && d).

+2

Cũng phải cẩn thận về khoảng trắng. Tất cả những không gian đó cần phải có mặt ở đó! Nó phải là 'if [[$ username' và không phải là' if [[$ username'. Khoảng trắng chính xác rất quan trọng trong các kịch bản lệnh shell, không giống như hầu hết các ngôn ngữ lập trình khác. –

25

nếu sử dụng /bin/sh bạn có thể sử dụng:

if [ <condition> ] && [ <condition> ]; then 
    ... 
fi 

nếu sử dụng /bin/bash bạn có thể sử dụng:

if [[ <condition> && <condition> ]]; then 
    ... 
fi 
Các vấn đề liên quan