shell编程之case语句
shell编程之case语句
1.case语句的用途用语法
case 结构条件句相当于多分支的if/elif/else条件句,但是它比这些条件语句看起来更规范工整,常被用于实现系统服务启动脚本等企业
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;">