2013-02-19 30 views
48

Tôi muốn có một số nhóm điều kiện trong câu lệnh Bash nếu. Cụ thể, tôi đang tìm kiếm nội dung như sau:Nhóm các điều kiện hỗn hợp trong thử nghiệm Bash

if <myCondition1 and myCondition2> or <myCondition3 and myCondition4> then... 

Tôi có thể nhóm các điều kiện lại với nhau theo cách tôi mô tả để sử dụng với câu lệnh if if Bash? Tôi cảm ơn bạn vì bất kỳ ý tưởng bạn có thể có về điều này.

+0

Tôi đã làm nhưng không thể tìm thấy thủ thuật nhóm (và không biết thuật ngữ để tìm kiếm để tìm nó). Khi nghi ngờ, hãy hỏi. Cảm ơn các liên kết! – d3pd

+4

Tôi không chắc chắn điều này sẽ được đánh dấu là trùng lặp. Câu trả lời cho câu hỏi này đặc biệt giải quyết các điều kiện nhóm, trong khi câu trả lời cho bản sao thì không. – JoBu1324

+0

Tôi luôn ngạc nhiên về cách các câu hỏi dễ dàng có thể được đánh dấu là trùng lặp khi chúng rõ ràng là không. Câu hỏi này là về các điều kiện nhóm. Không có gì trong câu trả lời của câu hỏi khác mà thực sự trả lời câu hỏi này. – Calimo

Trả lời

109

Sử dụng & & (và) và || (Hoặc) khai thác:

if [[ expression ]] && [[ expression ]] || [[ expression ]] ; then 

Họ cũng có thể được sử dụng trong một đơn [[]]:

if [[ expression && expression || expression ]] ; then 

Và, cuối cùng, bạn có thể nhóm chúng lại để đảm bảo trật tự thẩm định:

if [[ expression && (expression || expression) ]] ; then 
+4

IMO đây là câu trả lời rõ ràng hơn "trùng lặp". Trong ví dụ thứ ba, hãy chắc chắn sử dụng dấu ngoặc kép - '[[]]' – JoBu1324

+1

Đối với những người quan tâm đến khả năng tương thích với các loại trình bao khác, tôi sẽ lưu ý rằng việc làm ở trên dường như không hoạt động với các dấu ngoặc đơn '[]' . – SeldomNeedy

+5

Lưu ý rằng trong ví dụ đầu tiên, '&&' và '||' là các toán tử đường ống của trình bao. Trong các ví dụ thứ hai và thứ ba, chúng là các toán tử được xử lý bởi trình phân tích lệnh điều kiện '[[...]]'. Các công trình đầu tiên về các giá trị thoát của số không và khác 0, phần còn lại hoạt động trên các giá trị trả về của true và false. Trong khi tất cả các ví dụ _work_, chúng hoạt động vì nhiều lý do khác nhau. –

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