代码:
if [cond1]
then if [cond2]
then ...
else skip to elif
fi
elif[cond3]
then ...
fi
如果第二个条件不匹配则跳至elif。
答案 0 :(得分:1)
请注意,在下面的代码中,elif quux...
是elif
之后elif cond3
的占位符。
cond3
(也就是说,即使cond3
为false,您也希望在跳过时执行其代码。)
正如@ 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...
答案 1 :(得分:0)
所以这是你的代码:
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]
为false且[cond3]
为真[cond1]
为false且[cond3]
为真这意味着你的代码可以这样编写:
if [cond1] && [cond2]
then
doX
doY
elif [cond3]
doZ
fi
编辑:看起来@fedorqui在评论中提到了这一点。
答案 2 :(得分:0)
很难看到elif
正在做什么,希望您的代码在第一个if
部分的中间执行它。 elif
部分是否需要成为一种功能?
否则,您可以重新编码if
语句以考虑condition2
。
if [ condition1 -a ! condition2 ]
then
....
elif [ condition3 -o condition1 ]
....
fi
现在,if
子句只有在 condition1 都为真并且 condition2 不为真时才会执行。无需检查else子句中的 condition2 。
在elif
子句中,如果 condition3 为真或 condition1 ,您将执行是真的。默认情况下,仅当 condition1 为true且 condition2 也为真时,才会执行此操作。否则,您将执行if
子句。
顺便说一下,一些答案 几乎 与我给出的相符。但是,他们需要将or
子句添加到elif
条件。如果 condition1 为真, condition2 为真,但 condition3 为假,该怎么办?您想执行该elif
子句。正确?