2013-09-24 9 views
1

Я пытался сделать эту штуку работать в течение нескольких часов, но я не могу заставить его работать:Bash IF: mutliple условия

if [ "$P" = "SFTP" -a "$PORT" != "22" ] || [ "$P" = "FTPS" && [ "$PORT" != "990" -a "$PORT" != "21" ] ] ; then

Может кто-нибудь мне помочь? Я знаю, что несколько условий можно записать так:

if [ "$P" = "SFTP" ] && [ "$PORT" != "22" ]; then

, но как я могу черепитчатые диссертаций условия, как в моем первом примере?

Заранее спасибо.

ответ

3

Вы не можете вставлять выражения в отдельные скобки. Это должно быть написано так:

if [ "$P" = "SFTP" -a "$PORT" != "22" ] || [ "$P" = "FTPS" -a "$PORT" != "990" -a "$PORT" != "21" ] ; then 

Это можно записать в виде одного выражения, как:

if [ \("$P" = "SFTP" -a "$PORT" != "22" \) -o \("$P" = "FTPS" -a "$PORT" != "990" -a "$PORT" != "21" \) ] ; then 

хотя не полностью совместим со всеми оболочками.

Поскольку вы используете Баш, вы можете использовать двойные скобки, чтобы сделать команду более читаемым:

if [[ ($P = "SFTP" && $PORT != "22") || ($P = "FTPS" && $PORT != "990" && $PORT != "21") ]] ; then 
+1

Спасибо, это работает! – BDR

Смежные вопросы