如何使交换机执行2例

如何使交换机执行2例?

我尝试使用下面的代码,但它只执行第一种情况

#!/bin/sh action="titi" case "$action" in toto|titi) echo "1_$action" ;; tata|titi) echo "2_$action" ;; esac 

bash中的case语句仅执行第一个匹配的COMMAND-LIST中的COMMAND-LIST

然而,在bash version 4或更高版本中引入了;&终止符。 ;;&运算符就像;; ,但case语句不会在执行关联列表后终止 – Bash只是继续测试下一个模式,就好像前一个模式不匹配一样。 例如,使用这些终止符,case语句可以配置为针对所有模式进行测试,或在代码块之间共享代码。

参考:摘自http://wiki.bash-hackers.org/syntax/ccmd/case

所以,如果你有bash v 4 or later这会给你想要的结果:

 #!/bin/sh action="titi" case "$action" in toto|titi) echo "1_$action" ;;& tata|titi) echo "2_$action" ;; esac 

基于@josay评论,这被称为“通过”,可以用bash脚本通过使用;;&而不是;; 在第一种情况下。 但是,只有当bash版本是4.0或更高版本时,“通过”才有效

以下源代码更新了“fall through”

 #!/bin/sh action="$1" case "$action" in toto|titi) echo "1_$action" ;;& tata|titi) echo "2_$action" ;; esac 

if两次使用,则匹配两次。

 if [ "$action" = 'toto' -o "$action" = 'titi' ]; then echo "1_$action" fi if [ "$action" = 'tata' -o "$action" = 'titi' ]; then echo "2_$action" fi 

如果您需要使用case ,使用function如何

 function f1 { echo "1_$action" } function f2 { echo "2_$action" } case "$action" in titi) f1 f2 ;; toto) f1 ;; tata) f2 ;; esac 

如果没有模式匹配,可以考虑使用默认值执行

 #!/bin/sh action="titi" case "$action" in toto) echo "1_$action" ;; tata) echo "2_$action" ;; *) echo "1_$action" echo "2_$action" esac