码:
if [cond1]
then if [cond2]
then ...
else skip to elif
fi
elif[cond3]
then ...
fi
如果第二个条件不匹配跳到ELIF。
码:
if [cond1]
then if [cond2]
then ...
else skip to elif
fi
elif[cond3]
then ...
fi
如果第二个条件不匹配跳到ELIF。
请注意,在下面的代码, 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...
因此,这里是你的代码:
if [cond1]
then
if [cond2]
then
doX
else
skip to elif
fi
doY
elif[cond3]
then
doZ
fi
我已经添加doX
, doY
,并doZ
作为任何代码,你会在这种情况下运行的占位符。 因此,这意味着:
doX
当执行[cond1]
为真,并[cond2]
为真 doY
当执行[cond1]
为真,并[cond2]
为真 doZ
被执行时或者: [cond1]
为真,并[cond2]
为假并[cond3]
为真 [cond1]
为假并[cond3]
为真 这意味着你的代码可以写成这样:
if [cond1] && [cond2]
then
doX
doY
elif [cond3]
doZ
fi
编辑:它看起来像@fedorqui其实这个建议的意见。
这是很难看到什么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
条款。 对?