如果巴什 - >然后如果 - >否则跳到第一ELIF(Bash if -> then i

2019-10-30 10:08发布

码:

if [cond1]
   then if [cond2]
        then ...
        else skip to elif
   fi

elif[cond3]
   then ...
fi

如果第二个条件不匹配跳到ELIF。

Answer 1:

请注意,在下面的代码, elif quux...是任何一个占位符elif你在那之后elif cond3

如果你不需要测试cond3跳绳

(也就是说,你要执行它,当你跳过,即使代码cond3是假的。)

正如@ code4me建议,你可以使用一个函数:

foo() { 
  # do work
}

if cond1; then
  if cond2; then
    ...
  else
    foo
  fi
elif cond3; then
  foo
elif quux...

这也是@ fedorqui的建议的工作:

if cond1 && cond2; then
  ...
elif cond3; then
  # do work
elif quux...

如果需要测试cond3跳绳

逻辑变得更难跟踪。

foo() {
  # Note the condition is tested here now
  if cond3; then
    # do work
  fi
}

if cond1; then
  if cond2; then
    ...
  else
    foo
  fi
else
  # This code is carefully constructed to ensure that subsequent elifs
  # behave correctly
  if ! foo; then
    # Place the other elifs here
    if quux...


Answer 2:

因此,这里是你的代码:

if [cond1]
then
    if [cond2]
    then
        doX
    else
        skip to elif
    fi
    doY
elif[cond3]
then
    doZ
fi

我已经添加doXdoY ,并doZ作为任何代码,你会在这种情况下运行的占位符。 因此,这意味着:

  • doX当执行[cond1]为真,并[cond2]为真
  • doY当执行[cond1]为真,并[cond2]为真
  • doZ被执行时或者:
    • [cond1]为真,并[cond2]为假并[cond3]为真
    • [cond1]为假并[cond3]为真

这意味着你的代码可以写成这样:

if [cond1] && [cond2]
then
    doX
    doY
elif [cond3]
    doZ
fi

编辑:它看起来像@fedorqui其实这个建议的意见。



Answer 3:

这是很难看到什么elif做你希望你的代码在第一中间执行它if部分。 是elif部分的东西,需要一个功能?

否则,你可以重新编写你的if语句时要condition2考虑。

if [ condition1 -a ! condition2 ]
then
    ....
elif [ condition3 -o condition1 ]
    ....
fi

现在, if如果两个条件1是真实的 条件2是不正确的条款将只执行。 不需要检查条件2 else子句内。

在你elif子句中,你会如果 condition3是真 条件1为真执行。 默认情况下,如果条件1是真实的,只有当条件2也是如此,这将执行。 否则,你会执行if条款。

顺便说一句,一些问题的答案几乎是一致什么都给。 然而,他们需要添加or子句是elif条件。 如果条件1为真什么, 条件2是真实的,但condition3是假的? 要执行该elif条款。 对?



文章来源: Bash if -> then if -> else skip to first elif
标签: bash shell