2014-01-25 51 views
0

是否有可能做到这一点:一个案例中的多个命令?

case $ans1_1 in 
    y)fedoraDeps;; 
     echo "something here";; 
     make -j 32;; 
    n)echo "Continuing"...;; 
     ;; 
    *) echo "Answer 'y' or 'n'";; 
    esac 

哪里fedoraDepsyum命令的功能。

我试图用个案复制此:

if [[ $ans1_1 = y ]]; then 
    fedoraDeps 
    echo "something here" 
    make -j 32 
elif [[ $ans1_1 = n ]]; then 
     echo "Continuing..." 
     : 
else 
    echo "Answer 'y' or 'n'" 
fi 
+3

的'';;结束的情况下。不要把它放在每一行的末尾,只是每一行的最后一行。只是谷歌“bash案例声明”的更多细节。 – lurker

+0

完整的猜测,但你有没有尝试过使用单个';'来分隔命令,而不是使用'';;'来结束大小写?或者,对于这个问题,让换行符没有';'分隔命令,我认为它会在脚本文件中。 – IMSoP

+1

我通常会把';;'结束放在一行上,使它更加突出。 –

回答

6

;或换行来结束命令。 ;;用于结束case语句。只是不尝试每一条命令后结束case语句,和它的罚款:

case $ans1_1 in 
    y) 
     fedoraDeps 
     echo "something here" 
     make -j 32 ;; 
    n) 
     echo "Continuing"... ;; 
    *) 
     echo "Answer 'y' or 'n'" ;; 
esac 
+0

使用'''LF'''是否会导致可移植性的问题?该脚本是否可以在FreeBSD,Debian,Fedora,RHEL中以完全相同的方式工作? – user3084450

+0

这个语法在所有POSIX兼容shell中都可以正常工作。 FreeBSD是否有一个名为'fedoraDeps'的命令是另一回事。 –

+0

'''fedoraDeps'''是一个定义在文件顶部的函数,所以不会引起任何问题,谢谢! – user3084450

1

由于壳行为的变化,我建议分号... 单之前,使用空间“;”允许你想要什么。双';' '结束' 的情况下 '匹配',即

这应该工作:

case $ans1_1 
in 
    y) fedoraDeps ; 
     echo "something here" ; 
     make -j 32 ;; ## last command for case 'match' 
    n) echo "Continuing"... ;; 
     ## if you want a blank line then just use one 
    *) echo "Answer 'y' or 'n'" ;; 
esac 
+3

在';'前面插入空格应该没有区别。 –

+0

什么shell不能把';'当作控制字符,允许它成为前面的单词的一部分? – chepner

+0

嗯合理的评论;在与许多* Nix(或* Nix-like OS和shell)工作了大约30年之后,我的经验反映了我遇到的情况,即如果我们将讨论限制在当前版本的Bash中,那么评论是有效的而我的可以简单地被忽略。 :) –