Bash IF:多个条件

时间:2013-09-24 06:49:57

标签: bash if-statement nested conditional-statements multiple-conditions

我一直试图让这件事情工作几个小时,但我无法让它发挥作用:

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

有人能帮助我吗?我知道可以这样写出多个条件:

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

但是我怎么能像我的第一个例子那样覆盖这些条件呢?

1 个答案:

答案 0 :(得分: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

虽然与所有shell都不完全兼容。

由于您使用的是bash,因此可以使用双括号使命令更具可读性:

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