2014-10-20 70 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