2013-02-19 4 views
48

Chcę mieć pewne grupy warunków w instrukcji Bash if. Konkretnie, szukam czegoś tak:Grupy warunków złożonych w teście Bash

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

Jak mogę grupa warunki razem w sposób opiszę do użytku z jednym if w bash? Dziękuję wam za wszelkie pomysły, które możecie w tej sprawie przedstawić.

+0

Zrobiłem, ale nie mogłem znaleźć sztuczki grupującej (i nie znałem terminologii wyszukiwania, aby ją znaleźć). W razie wątpliwości zapytaj. Dzięki za link! – d3pd

+4

Nie jestem pewien, czy powinien to być oznaczony jako duplikat. Odpowiedź na to pytanie dotyczy w szczególności warunków grupowania, podczas gdy odpowiedź na duplikat nie. – JoBu1324

+0

Zawsze jestem zaskoczony, jak łatwo pytania mogą być oznaczone jako duplikaty, gdy wyraźnie nie są. To pytanie dotyczy warunków grupowania. Nie ma nic w odpowiedziach na to inne pytanie, które faktycznie odpowiada na to pytanie. – Calimo

Odpowiedz

109

Użyj & & (and) and || (Lub) Operatorzy:

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

Mogą być również stosowane w jednym [[]]:

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

I wreszcie, można je pogrupować w celu zapewnienia porządku ocena:

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

IMO jest to bardziej przejrzysta odpowiedź niż "duplikat". W trzecim przykładzie upewnij się, że używasz podwójnych nawiasów - '[[]]' – JoBu1324

+1

Dla tych, którzy dbają o kompatybilność z innymi typami powłok, zauważę, że wykonanie powyższego nie wydaje się działać z pojedynczymi nawiasami '[]' . – SeldomNeedy

+5

Należy pamiętać, że w pierwszym przykładzie operatory potokowe to '&&' i '||'. W drugim i trzecim przykładzie operatory są obsługiwane przez parser poleceń warunkowych "[[...]]". Pierwsze działa na wartości wyjściowe zero i niezerowe, reszta działa na zwracanych wartościach true i false. Wszystkie przykłady _work_ działają z różnych powodów. –