代码:
if [cond1]
then if [cond2]
then ...
else skip to elif
fi
elif[cond3]
then ...
fi
如果第二个条件不匹配跳到 elif。
请注意,在下面的代码中,elif quux...
是一个占位符,用于表示elif
您所拥有的任何 s after 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
现在,仅当条件 1为真且条件2不为真时,该if
子句才会执行。无需检查else 子句中的condition2 。
在您的子句中,如果条件3为真或条件1 为真,elif
您将执行。默认情况下,仅当条件2 也为真时才会在条件 1为真时执行。否则,您将执行该子句。 if
顺便说一句,有些答案几乎与我给出的相符。但是,他们需要将该or
子句添加到该elif
条件。如果条件1为真,条件2为真,但条件3为假怎么办?你想执行那个elif
子句。对?