shell 之 case。。。esac多分支选择
case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。
语法:
case 变量值 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
*)
默认命令序列
esac
注意:
1.在命令序列后一定要以 ;; 结束,最后一个命令序列也可不写。
2.在case分支写完之后,要以esac结束。
例子:
通过位置变量来获取赋值
[root@gameserver1 shell]# vim case_test.sh #!/bin/bash case $1 in #用位置变量获取值 start) echo "start";; stop) echo "stop";; other) echo "other";; *) #默认命令序列 echo "默认命令序列" esac
执行脚本,位置参数赋值start
[root@gameserver1 shell]# ./case_test.sh start start #输出start
执行脚本,位置参数赋值stop
[root@gameserver1 shell]# ./case_test.sh stop stop
执行脚本,位置参数赋值restart (case中没有定义对应的restart模式)
[root@gameserver1 shell]# ./case_test.sh restart 默认命令序列 #当赋值case中没有定义的模式时,则输出的 *)默认命令序列
执行脚本,位置参数不赋值
[root@gameserver1 shell]# ./case_test.sh 默认命令序列 #输出默认序列
总结:
当执行脚本时,变量值==模式,则执行对应模式下的命令序列。
当执行脚本时,变量值不存在case模式中,则执行默认命令序列。
当执行脚本时,没有指定变量的值,则执行默认命令序列。
常用于菜单选择,比如程序的启动,停止,重启,更新等,或者其他需要根据选择来执行对应选项下的命令的场景。