【问题标题】:Bash IF : multiple conditionsBash IF:多个条件
【发布时间】:2013-09-29 06:23:47
【问题描述】:

我一直试图让这个东西工作几个小时,但我无法让它工作:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您不能将表达式嵌套在单括号中。应该这样写:

    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
    

    虽然 is 不完全兼容所有的 shell。

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2016-01-20
      • 2015-02-07
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多