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 cond3
之後擁有的任何elif
的佔位符。
測試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
作爲任何代碼,你會在這種情況下運行的佔位符。因此,這意味着:
[cond1]
是真實的,當[cond1]
是真實[cond2]
是真的doZ
被執行時,無論是doY
執行[cond2]
是真的
doX
執行[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。
在你elif
條款,你會如果要麼condition3是真的或條件1是真正執行。默認情況下,如果條件1是真的只有條件2也是如此,這將執行。否則,您將執行if
子句。
順便說一句,一些答案幾乎比賽是我給的。然而,他們需要的or
條款添加到elif
條件。如果什麼條件1是真實的,條件2是真實的,但condition3是假的?你想執行elif
子句。對?
聽起來像是你需要的功能。 –
不知何故逃脫這個區塊是不好的做法,因爲這將需要某種去的到,在這種情況下,將開始導致一些嚴重的意大利麪條代碼。編寫一個函數,並在兩個地方調用它。 – Buggabill
'如果cond1 && cond2,elif cond3'呢? – fedorqui