case条件结构语句
case "字符串变量" in
值1)
指令1
;;
值2)
指令2
;;
值*)
指令
esac
case与if的对比
case书写方式
case $name in
值1)
指令1
;;
值2)
指令2
;;
*)
指令
esac
if书写方式
if [ $name == "值1" ]
then
指令1
elif [ $name == "值2" ]
then
指令2
else
指令
fi
case值的书写方式
apple)
echo -e "$RED_COLOR apple $RES"
;;
也可以这样写,输入2种格式找同一个选项
apple|APPLE)
echo -e "$RED_COLOR apple $RES"
;;
case语句小结
case语句就相当于多分支的if语句。case语句的优势是更规范、易读。
case语句适合变量的值少,且为固定的数字或字符串集合。(1,2,3)或(start,stop,restart)。
系统服务启动脚本传参的判断多用case语句,多参考rpcbind/nfs/crond脚本;菜单脚本也可以使用case
写脚本规范及注意事项
1.变量名称不能和系统已经存在的命令等重复 free == > Free
2. 判断单位要统一
3. 脚本一行不超过一屏的一半。
4. 能写成变量的内容尽量写成变量
if 语句类似黑名单,需要把这种错误场景封堵
case 语句类似白名单,只要把正确结果列完整即可
练习
[root@oldboy scripts]# cat menu3.sh
#!/bin/bash
##############################################################
# File Name: menu2.sh
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu.com
##############################################################
echo '1.install MySQL
2.install Tomcat
3.exit'
read -p "请选择一个数字:" num
[ -z "$num" ] && exit 1
expr $num + 99 &>/dev/null
if [ $? -ne 0 ]
then
echo "请输入整数"
exit
fi
case "$num" in
1)
echo "install MySQL"
;;
2)
echo "install Tomcat"
;;
3)
echo bye
exit 1
;;
*)
echo "别瞎逼输入,请输入{1|2|3}"
esac
Rsync启动脚本
[root@oldboy scripts]# cat rsync1.sh
#!/bin/bash
##############################################################
# File Name: rsync.sh
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu.com
##############################################################
start(){
rsync --daemon &>/dev/null
retval=$?
if [ $retval -eq 0 ]
then
echo "rsyncd is started."
return $retval
else
echo "rsyncd startup fail."
return 1
fi
}
stop(){
pkill rsync &>/dev/null
retval=$?
if [ $retval -eq 0 ]
then
echo "rsyncd is stopped"
return 0
else
echo "rsyncd stop fail."
return 1
fi
}
case "$1" in
start)
start
retval=$?
exit $retval
;;
stop)
stop
retval=$?
exit $retval
;;
restart)
stop
sleep 2
start
retval=$?
exit $retval
;;
*)
echo $"Usage:$0 {start|stop|restart}"
exit 1
esac
exit $retval