2013-07-19 59 views
0

代碼:猛砸如果 - >那麼如果 - >否則跳到第一ELIF

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

elif[cond3] 
    then ... 
fi 

如果第二個條件不匹配跳到ELIF。

+1

聽起來像是你需要的功能。 –

+2

不知何故逃脫這個區塊是不好的做法,因爲這將需要某種去的到,在這種情況下,將開始導致一些嚴重的意大利麪條代碼。編寫一個函數,並在兩個地方調用它。 – Buggabill

+6

'如果cond1 && cond2,elif cond3'呢? – fedorqui

回答

1

請注意,在以下代碼中,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... 
0

因此,這裏是你的代碼:

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

我已經添加doXdoY,並且doZ作爲任何代碼,你會在這種情況下運行的佔位符。因此,這意味着:

  • :當[cond1]是真實的,當[cond1]是真實[cond2]是真的
  • doZ被執行時,無論是
  • doY執行[cond2]是真的

    • doX執行[cond1]爲真,[cond2]爲假,[cond3]爲真
    • [cond1]是假的,[cond3]是真的

這意味着你的代碼可以寫成這樣:

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

編輯:它看起來像@fedorqui其實這個建議的意見。

0

很難看到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子句。對?

相關問題