day67-shell编程之-case语句

case语句

case结构条件句相当于多分支的if/elif/else条件句,但是它比这些条件句看起来更规范公正,常被用于实现系统服务启动脚本等企业应用场景中。

在case语句中,程序会将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较,如果获取的变量值与某个值(例如值1)匹配,就会执行值(例如值1)的后面对应的指令(例如指令1,可能是一组指令),直到执行到双分号(;;)才停止,然后跳出case语句主体,执行case语句(即esac字符)后面的其他命令
如果没有找到匹配变量的任何值,则执行*)后面的指令(通常是给使用者的使用提示),直到遇到双分号(;;)或者esac结束,这部分相当于if多分支中最后的else语句部分。另外,case语句中的表达式对应值的部分,可以使用管道及通配符等更多功能匹配

1、 case语法

case结构条件句的语法格式为:

case “变量” in 
值1)
    指令1...
    ;;
值2)
    指令2...
    ;;
*)
    指令3...
esac

如果case语句以中文形式描述,那么就是以下情况:

case “老男孩的各位” in 
找到好工作)
    给父母买买买
    ;;
天上掉金子)
    给自己买买买
    ;;
天上掉女朋友)
    给女朋友买买买
*)
    还是老老实实学习吧!!
esac

2、case结构语句的流程图如下所示:

day67-shell编程之-case语句_第1张图片

3、 案例实操

3.1 编写脚本。使用单个字符进行传参,使用case判断是数字还是字母(使用正则)
[root@shell-project /server/scripts]# cat case-home01.sh
#!/bin/bash
# 使用单个字符进行传参,使用case判断是数字还是字母(使用正则)
read -p "请输入单个字符: " n
case "$n" in
    [a-zA-Z])
        echo "$n 是字母."
        ;;
    [0-9])
        echo "$n 是数字."
        ;;
    *)
        echo "其他"
esac
[root@shell-project /server/scripts]# 
3.2 将” 打印菜单,按照选择项一键安装不同的web服务”脚本,将其中的条件表达式修改成case或if语句
[root@shell-project /server/scripts]# vim case-home02.sh 
  1 #!/bin/bash
  8 # 将” 打印菜单,按照选择项一键安装不同的web服务”脚本,将其中的条件表达式修改成case或if语句
  9 
 10 #定义变量
 11 lamp="/server/scripts/lamp.sh"
 12 lnmp="/server/scripts/lnmp.sh"
 13 
 14 #打印菜单
 15 cat << EOF
 16  1.[install lamp]
 17  2.[install lnmp]
 18  3.[exit]
 19 EOF
 20 
 21 #使用read读取输入
 22 read -p 'please input the num you want: ' num
 23 #定义函数
 24 function lamp_lanp(){
 25     if [ -f "$1" ];then
 26         if [ ! -x "$1" ];then
 27             echo "$1 没有执行权限,不可执行"
 28             exit 2
 29         else
 30             $1
 31         fi
 32     else
 33         echo "error: $1 is not exist."
 34         exit 3
 35     fi
 36 }
 37 
 38 case "$num" in
 39     "1")
 40         echo 'start installing lamp……'
 41         lamp_lanp $lamp
 42         ;;
 43     "2")
 44         echo 'start installing lnmp……'
 45         lamp_lanp $lnmp
 46         ;;
 47     "3")
 48         echo 'good byb!'
 49         ;;
 50     *)
 51         echo 'Input Error'
 52         exit 5
 53 esac
3.3 将Nginx服务管理脚本改为case方式+函数方式,并通过systemctl进行控制启动停止
[root@shelledu ~]# cat /etc/init.d/nginxd_case
#!/bin/bash

#定义函数
function stat_check(){
    count=`netstat -lntup|grep nginx|wc -l`
}
function nginx_start(){
    stat_check
    if [ $count -gt 0 ];then
        echo 'nginx已经处于启动状态'
    else
        /application/nginx/sbin/nginx
        echo 'nginx启动成功'
    fi
}
function nginx_stop(){
    stat_check
    if [ $count -eq 0 ];then
        echo 'nginx已经处于关闭状态'
    else
        /application/nginx/sbin/nginx -s stop
        echo 'nginx已关闭'
    fi
}
# 如果参数是start,则执行start的启动方式(/application/nginx/sbin/nginx)
case "$1" in 
    "start")
        nginx_start
        ;;
    "stop")
        nginx_stop
        ;;
    "restart")
        nginx_stop
        sleep 2
        nginx_start
        ;;
    *)
        echo '参数错误,正确的参数是{start|stop|restart}'
esac
[root@shelledu ~]# 
3.4 使用case选择水果,并打印水果名及其颜色

1.apple
2.pear
3.banana
4.blueberry
其中,颜色表达式分别为
31m 红色
32m 绿色
33m 黄色
34m 蓝色
使用方式为
[root@oldboy-node101 ~]# echo -e "\E[1;31m我是红色 \E[0m"
我是红色
[root@oldboy-node101 ~]# echo -e "\E[1;32m我是绿色 \E[0m"
我是绿色
[root@oldboy-node101 ~]# echo -e "\E[1;33m我是黄色 \E[0m"
我是黄色
[root@oldboy-node101 ~]# echo -e "\E[1;34m我是蓝色 \E[0m"
我是蓝色
分析:
1)打印菜单
2)使用read,显示一句话“选择你喜欢的水果”
3)使用case判断数字是【1|2|3|4】
4)如果都不符合,报错退出

[root@shell-project /server/scripts]# cat  case-home02.sh
#!/bin/bash
# 使用case选择水果,并打印水果名及其颜色
#定义函数
function colors(){
    echo -e "your like \E[1;${1}m${2} \E[0m"
}
#打印菜单
cat <

你可能感兴趣的:(day67-shell编程之-case语句)