shell编程之case语句
1.case语句的用途用语法
case 结构条件句至关于多分支的if/elif/else条件句,可是它比这些条件语句看起来更规范工整,常被用于实现系统服务启动脚本等企业node
case语法 case 变量名 in 值1) 指令1 ;; 值2) 指令2 ;; 值3) 指令3 ;; *) 指令1 esac
1.1 case结构条件语句的执行流程
1.2 case语句的使用总结
1.case语句与if条件句的适用性 case语句比较适合变量值较少且为固定的数字或字符串集合状况(非不肯定的内容,例如范围),若是变量的值是已知固定的start/stop/restart等元素,那么采用case语实现就比较适合 2.case语知与if语句的常见应用场景 case主要是写服务的启动脚本,通常状况下,传参不一样且具备少许的字符串,其适用范围窄 if就是取值判断、比较、应用比case更广。几乎全部的case语句均可以用if条件语句实现 3.case语句的优点与特色 case语句就至关于多分支的if/elif/else语句,但case语句的优点是更规范、易读
1.3 case语句案例
1.3.1 执行shell脚本,打印一个以下的水果菜单:
1.apple 2.pear 3.banana 4.cherry 当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。 [root@ci-node1 scripts]# cat 14.sh #!/bin/bash ############################################################## # File Name: 14.sh # Version: V1.0 # Author: liu # Organization: # Created Time : 2019-04-13 11:41:33 # Description: ############################################################## cat <<EOF 1.apple 2.pear 3.banana 4.cherry EOF read -p "请输入您的选择:" num red="\033[31m" green="\033[32m" yewllo="\033[33m" blue="\033[34m" tailer="\033[0m" case $num in 1) echo -e "$red apple $tailer" ;; 2) echo -e "$green pear $tailer" ;; 3) echo -e "$yewllo banana $tailer" ;; 4) echo -e "$blue cherry $tailer" ;; *) echo "Usage:$0{1|2|3|4}" exit 1 esac
1.3.2 利用case语句开发Rsync服务启动中止脚本,本例采用case语句以及新的思路来实现
[root@ci-node1 scripts]# cat rsync.sh #!/bin/bash ############################################################## # File Name: rsync.sh # Version: V1.0 # Author: liu # Organization: # Created Time : 2019-04-13 12:13:32 # Description: ############################################################## . /etc/init.d/functions #rsyncd进程号路径 rsyncd_pid_path=/var/run/rsyncd.pid #建立锁文件 lockfile=/var/lock/subsys/rsyncd start() { if [ ! -f $rsyncd_pid_path ] then rsync --daemon retval=$? if [ $retval -eq 0 ] then action "rsync is start ok" /bin/true touch $lockfile return $retval else action "rsync is start fail" /bin/false return $retval fi else echo "rsync in runing.." fi } stop() { if [ -f $rsyncd_pid_path ] then rsyncd_pid=`cat $rsyncd_pid_path` #判断进程是否存在 if (kill -0 $rsyncd_pid &>/dev/null) then kill $rsyncd_pid retval=$? if [ $retval -eq 0 ] then action "rsync is stop ok" /bin/true rm -f $lockfile return $retval else action "rsync stop fail" /bin/false return $retval fi fi else echo "$rsyncd_pid_path is not exist or rsyncd does not startup" fi } case $1 in start) start retval=$? ;; stop) stop retval=$? ;; restart) stop retval=$? sleep 1 start retval=$? ;; *) echo "Usage:$0{start|stop|restart}" exit 1 esac exit $retval
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">shell