【问题标题】:linux if / elif / fi commandlinux if/elif/fi命令
【发布时间】:2012-09-22 11:52:47
【问题描述】:

我有一个问题。如果我的if 语句是true,它会跳过elif 检查并直接转到fi 还是仍然检查elif 语句?

脚本示例:

if [ argument1 || argument2 ]  
     then  
          do something.  
elif [ argument2 || argument3 ]  
     then  
          do something.  
elif [ argument2 || argument4 ]  
     then  
          do somthing.  
else  
          do somthing else.  
fi  

我的问题是,如果我的第一个 if 声明为真,我希望我的 elif 声明仍被检查。如果我的第一个 elif 语句是 true... 等,我还希望检查我的 elif 语句。基本上我希望我的所有 ifelif 语句都被检查。

注意。我意识到我可以将所有elif 语句更改为if 语句,这可能会解决我的问题,因为所有if 语句都会被检查。但是这个问题也是出于对ifelif语句的好奇和更好的了解。

如果您需要更多信息,请告诉我。

【问题讨论】:

  • else if 的重点就是这个。您可以使用 just if 来执行所有真正的命令
  • [ condition || condition ] 无效,您需要使用[[[[ condition || condition ]],否则为[ condition ] || [ condition ]
  • 啊,是的!谢谢,我在做一些脚本测试时意识到了这一点。 :)

标签: linux bash if-statement sh


【解决方案1】:

elif 语句如果前面的语句之一匹配,则不会被检查。 elif 是“else if”的缩写;这意味着如果前一个不匹配,您应该检查其他条件。

正如您所说,您可以为您的用例使用多个 if 语句。

【讨论】:

    【解决方案2】:

    一旦满足某个条件,if 语句就会终止,并且不会检查剩余的elif 条件。

    例子:

    if echo foo
    then
       echo "in foo"
    elif echo bar
    then
       echo "in bar"
    fi
    

    打印

    foo
    in foo
    

    如果您希望它们都被检查,那么您需要按照您的建议将其分解为多个 if 语句。

    【讨论】:

      【解决方案3】:

      虽然我知道这是一篇旧帖子,但对于 OP 最初询问的内容,最好使用来自 BASH >=4.0 的 case/esac 语句以及 ;;& 终止符来提供更好的服务。而且,由于BASH 4.0 was released 20 Feb 2009,他们应该能够在该脚本中使用它。

      类似这样的:

          case $anyargument in
              [[ argument1 || argument2 ]] )
                  do something
                  ;;&
              [[ argument2 || argument3 ]] )
                  do something
                  ;;&
              [[ argument2 || argument4 ]] )
                  do something
                  ;;
              * ) 
                  do something else.
                  ;;
          esac
      

      现在,我在最后一次实际测试中使用了常规的 ;; 终止符,因此它不会落入包罗万象的(阅读:else)语句。但是按照编写的方式,所有的测试都会被检查,如果它们解析true,代码就会被执行。

      希望这会有用。

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多