在shell变成中,case语句是if语句的一种扩展,将if中的判断语句,展开,同一个变量,对应多个可能的值时,执行不同的操作。具体句型如下:
case "变量" in values1) 指令,执行的操作 ;; values2) 指令,执行的操作 ;; *) 指令,执行的操作 esac
最常用的case语句,应用在各个程序的启动脚本中,通常是start|stop|restart等等。下面就自己写一个关于mysql服务脚本的启动,实际上也是对support-files/mysql.server的一种理解而已。具体代码如下:
BaseDir=/app/mysql BinDir=$BaseDir/support-files/mysql.server if [ $# -ne 1 ] then echo "Usage:$0 {start|stop|restart}" fi start() { if [ "`ps -ef|grep mysqld|grep -v grep|wc -l`" -ne 0 ] then echo "The mysql server is running!" exit 1 else echo "Starting Mysql server..." $BinDir start >/dev/null 2>/dev/null [ $? -eq 0 ] && action "starting mysql server " /bin/true || action "starting mysql server " /bin/false exit 1 fi } stop() { if [ "`ps -ef|grep mysqld|grep -v grep|wc -l`" -eq 0 ] then echo "The mysql server is not running" exit 1 else echo "Stopping mysql server" $BinDir stop >/dev/null 2>/dev/null [ $? -eq 0 ] && action "stopping mysql server " /bin/true || action "stopping mysql server " /bin/false exit 1 fi } restart() { if [ "`ps -ef|grep mysqld|grep -v grep|wc -l`" -eq 0 ] then sh $0 start exit 1 else sh $0 stop sh $0 start exit 1 fi } case $1 in start) start ;; stop) stop ;; restart) restart ;; *) exit 1 esac
首先是定义这个脚本的用法,需要的参数,然后就是定义了三个函数,实际上这三个函数在functions中也有定义过,由于是加载了functions这个脚本,所以在定义函数的时候能看到是特殊字体。最后才是一个case语句。可以测试一下操作脚本。
[root@CentOS_client server_scripts]# sh mysql_script.sh start Starting Mysql server... starting mysql server [ OK ] tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6115/mysqld [root@CentOS_client server_scripts]# sh mysql_script.sh start The mysql server is running! [root@CentOS_client server_scripts]# sh mysql_script.sh stop Stopping mysql server... stopping mysql server [ OK ] [root@CentOS_client server_scripts]# sh mysql_script.sh stop The mysql server is not running [root@CentOS_client server_scripts]# sh mysql_script.sh restart Starting Mysql server... starting mysql server [ OK ] tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6482/mysqld [root@CentOS_client server_scripts]# sh mysql_script.sh restart Stopping mysql server... stopping mysql server [ OK ] Starting Mysql server... starting mysql server [ OK ] tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6829/mysqld [root@CentOS_client server_scripts]# sh mysql_script.sh start The mysql server is running! [root@CentOS_client server_scripts]#