一、case语句简介
1、什么是case条件语句
case条件语句就相当于多分支的if/elif/else条件语句,但是比这样的语句更规范更好看,经常被用在失效系统服务启动脚本等企业应用中
程序将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较,如果获取的变量值和某个值相匹配,就会执行值后面对应的执行知道执行双分号;;才停止,然后在跳出case语句主体,执行case语句(esac字符)后面的其他命令
如果没找到匹配变量的任何值,则执行"*)"后面的指令,通常是给使用者的使用提示直到遇到双分号;;或者esac结束,这个类似if多分支语句中最后else语句
case语句表达式对应值的部分,可以使用管道等更多功能来匹配
2、语法
case "变量" in
值 1)
指令1...
;;
值 2)
指令2...
;;
*)
指令3...
esac
3、逻辑图
二、范例
1、根据用户输入判断用户收入的是哪个数字
如果用户输入的是1~9的任易数字,则输出对应输入的数字;如果是其他数字级字符,则发回输入不正确的提示,并退出
1)case方式表达
[root@web1 scripts]# cat test26.sh #!/bin/bash #this script is created by zxg #www.cnblogs.com/zhangxingeng/ read -p "please input a number:" ans #<---打印信息提示用户输入,输入信息复制给ans变量 case "$ans" in #<---case语句获取ans变量值,进入程序匹配比较 1) echo "the num you input is 1" ;; 2) echo "the num you input is 2" ;; [3-9]) echo "the num you input is $ans" ;; *) echo "please input [0-9] int" exit; #<---esac语句结束最后一个值,可以省略双分号 esac [root@web1 scripts]# ./test26.sh please input a number:1 the num you input is 1 [root@web1 scripts]# ./test26.sh please input a number:3 the num you input is 3 [root@web1 scripts]# ./test26.sh please input a number:7 the num you input is 7 [root@web1 scripts]# ./test26.sh please input a number:10 please input [0-9] int [root@web1 scripts]#
2)if表达式方法
[root@web1 scripts]# cat test27.sh #!/bin/bash read -p "please input a number:" ans if [ $ans -eq 1 ];then echo "the num you input is 1" elif [ $ans -eq 2 ];then echo "the num you input is 2" elif [ $ans -eq 3 -a $ans -le 9 ];then echo "the num you input is $ans" else echo "the num you input must be [1-9]" exit fi [root@web1 scripts]# ./test2 test20.sh test21.sh test23.sh test25.sh test27.sh test21-1.sh test22.sh test24.sh test26.sh test2.sh [root@web1 scripts]# ./test27.sh please input a number:1 the num you input is 1 [root@web1 scripts]# ./test27.sh please input a number:10 the num you input must be [1-9] [root@web1 scripts]#
2、执行shell脚本,打印一个如下的水果菜单
(1)apple
(2)pear
(3)banana
(4)cherry
当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色,要用case语句
1)首先集中常用的颜色,并把zxg的字符串加上颜色
[root@web1 scripts]# cat test28.sh #!/bin/bash RED_COLOR='E[1;31m' GREEN_COLOR='E[1;32m' YELLOW_COLOR='E[1;33m' BLUE_COLOR='E[1;34m' RES='E[0m' echo -e "$RED_COLOR zxg $RES" echo -e "$YELLOW_COLOR zxg $RES" [root@web1 scripts]#
2)然后开始做带颜色的水果菜单
[root@web1 scripts]# chmod +x test29.sh [root@web1 scripts]# cat test29.sh #!/bin/bash RED_COLOR='E[1;31m' GREEN_COLOR='E[1;32m' YELLOW_COLOR='E[1;33m' BLUE_COLOR='E[1;34m' RES='E[0m' echo ' #echo打印菜单,可以是使用cat更好 ===================== 1.apple 2.pear 3.banana 4.cherry ===================== ' read -p "pls select a num:" num #提示用户输入 case "$num" in 1) #如果是1就输出echo的命令,下了一次类推 echo -e "${RED_COLOR}apple${RES}" ;; 2) echo -e "${GREEN_COLOR}pear${RES}" ;; 3) echo -e "${YELLOW_COLOR}banana${RES}" ;; 4) echo -e "${BLUE_COLOR}cherry${RES}" ;; *) echo "muse be {1|2|3|4}" #如果不匹配就提示
#这里省略了双分号
esac [root@web1 scripts]# ./test29.sh ===================== 1.apple 2.pear 3.banana 4.cherry ===================== pls select a num:1 apple [root@web1 scripts]# ./test29.sh ===================== 1.apple 2.pear 3.banana 4.cherry ===================== pls select a num:2 pear [root@web1 scripts]# ./test29.sh ===================== 1.apple 2.pear 3.banana 4.cherry ===================== pls select a num:3 banana [root@web1 scripts]# ./test29.sh
3)cat打印菜单的方法,推荐
[root@web1 scripts]# chmod +x test30.sh [root@web1 scripts]# cat test30.sh #!/bin/bash RED_COLOR='E[1;31m' GREEN_COLOR='E[1;32m' YELLOW_COLOR='E[1;33m' BLUE_COLOR='E[1;34m' RES='E[0m' menu(){ cat <<END #另外一种方式是cat也可以用select循环,不常用,还有函数的方式也可以使用,方便重复使用 1.apple 2.pear 3.banana END } menu read -p "pls input your choice:" fruit case "$fruit" in 1) echo -e "${RED_COLOR}apple${RES}" ;; 2) echo -e "${GREEN_COLOR}pear${RES}" ;; 3) echo -e "${YELLOW_COLOR}banana${RES}" ;; esac [root@web1 scripts]# ./test30.sh 1.apple 2.pear 3.banana pls input your choice:1 apple [root@web1 scripts]# ./test30.sh 1.apple 2.pear 3.banana pls input your choice:5 no fruit you choose. [root@web1 scripts]#
4)函数的方式表达,更加的专业
[root@web1 scripts]# cat test31.sh
#!/bin/bash RED_COLOR='E[1;31m' GREEN_COLOR='E[1;32m' YELLOW_COLOR='E[1;33m' BLUE_COLOR='E[1;34m' RES='E[0m' function usage(){ #使用帮助写成usage函数,方便重复使用 echo "USAGE: $0 {1|2|3|4}" exit 1 } function menu(){ #菜单内容写成函数,也是方便重复使用 cat <<END 1.apple 2.pear 3.banana END } function chose(){ #将输入也写成函数,方便重复使用 read -p "pls input your choice:" fruit case "$fruit" in 1) echo -e "${RED_COLOR}apple${RES}" ;; 2) echo -e "${GREEN_COLOR}pear${RES}" ;; 3) echo -e "${YELLOW_COLOR}banana${RES}" ;; *) usage esac } function main(){ #主函数,执行定义的所有函数,这是程序的入口,模拟c的编程方式
menu chose } main #执行主函数,如下: [root@web1 scripts]# ./test31.sh 1.apple 2.pear 3.banana pls input your choice:1 apple [root@web1 scripts]# ./test31.sh 1.apple 2.pear 3.banana pls input your choice:5 USAGE: ./test31.sh {1|2|3|4} [root@web1 scripts]#
3、给输出的字符串加颜色
这个比较有趣了,通过echo 的-e参数,结合特殊的数字给不同的字符加上颜色并显示
1)内容加上不同的颜色
[root@web1 scripts]# echo -e "