2014-10-20 69 views
1

我使用bash版本3.2.51。我的腳本需要一個函數來在主函數的不同步驟中輸入,並繼續執行所選步驟之後的其他步驟。bash - 級聯案例聲明? (v。3.2.51)

我嘗試以下:

case $variable in 
1) 
    function1 
    ;& 
2) 
    function2 
    ;& 
*) 
    function3 
    ;; 
esac 

我使用的; &終止符,所以我的腳本後來執行語句,而不檢查它們。但經過一番研究,我發現,由於我沒有bash的版本4,我得到以下語法錯誤:

./script.sh: line 223: syntax error near unexpected token `;' 
./script.sh: line 223: `   ;&' 

線223將在以上文本框中等於線7。

所以我的問題是,如果有另一個很好的選擇,可以讓bash 3或者,如果我必須在每個函數的最後執行下一個函數......

回答

2

;&bash 4引入的;您不能在bash的早期版本中使用它。你必須要明確:

case $variable in 
1) 
    function1 
    function2 
    function3 
    ;; 
2) 
    function2 
    function3 
    ;; 
*) 
    function3 
    ;; 
esac 

你也可以使用一系列if語句(或更簡潔,一系列&&列表):

((variable <= 1)) && function1 
((variable <= 2)) && function2 
((variable <= 3)) && function3 
+0

MEH我想第一種選擇將是一個很大的代碼,因爲我已經得到了相當多的功能,到目前爲止,並沒有沒有結束的跡象尚未:P buuuut第二個選擇似乎q uite good :-) ty 但有一個問題:如果我有超過9個功能,該選項將如何工作? 你會怎麼想一個櫃檯或每增加一個$變量?這意味着我使用讀變量從標準輸入,並在任何情況下加1 ...將這項工作?^^ – Ueffes 2014-10-20 15:09:02

+1

我從case語句更直譯切換到算術比較的列表。這對'變量'的任意值應該更好,而不是假設單數值。 – chepner 2014-10-20 15:27:39

+0

:當然 的dŸ我想我會用這個選項非常感謝 – Ueffes 2014-10-20 15:34:24

0

另一種選擇:

if [ $variable -eq 1 ]; then function1; fi 
if [ $variable -gt 0 ] && [ $variable -le 2 ]; then function2; fi 
function3 
+1

的代表不足^^你的答案的原因,可以考慮使用一個數學情境 - '如果((變量> 0 &&變量<= 2) )'更具可讀性。另一方面,如果你試圖保持與POSIX sh的兼容性,請更加關注你的引用:'[「$ variable」-gt 0]'。 – 2014-10-20 14:57:42

+0

如果我有很多功能,它不會是一大堆代碼嗎? – Ueffes 2014-10-20 15:10:33