day58-linux-shell-case

day 58 linux-case

1.case基本概述

  1. 什么是case

case语句和if类似,也是用来判断的,只不过当判断的条件较多时,使用case语句会比if更加的方便.

  1. case使用场景

在生产环境中,需要根据不同的状况来执行不同的预案,这样的问题首先要解决可能出现的情况写出预案,然后根据不同的选择来加载不同的预案.

  1. case基础语法
bash
case 变量 in
条件 1)
      执行代码块1
      ;;
条件 2)
      执行代码块2
      ;;
条件 3)
      执行代码块3
      ;;
*)
      无匹配后命令
esac
  1. case脚本案例
bash 
[root@manager-61 ~/case]#cat case01.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-30
#FileName: case01.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
cat <<EOF
****************
**  1. backup **
**  2. copy   **
**  3. quit   **
****************
EOF
read -p "请输入编号: [ 1 | 2 | 3 ]" Action
case $Action in
     1)
        echo "Backup..."
    ;;
     2)
        echo "Copy..."
        ;;
     *)
    echo "请输入正确的数字!"
        ;;
esac

需求一: 使用case实现nginx服务启停脚本

bash
[root@manager-61 ~/case]#cat nginx.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-30
#FileName: nginx.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
source /etc/init.d/functions
nginx_pid=/var/run/nginx.pid
case $1 in
    start)
        if [ -f ${nginx_pid} ];then
           if [ -s ${nginx_pid} ];then
              action "nginx 已启动" /bin/false
           else 
              rm -rf ${nginx_pid}
              systemctl start nginx >/dev/null
            if [ $? -eq 0];then
               action "nginx 启动成功" /bin/true
            else
               action "nginx 启动失败" /bin/false
            fi
          fi
            else
             systemctl start nginx
                if [ $? -eq 0 ];then
                           action "nginx 启动成功" /bin/true
            else
               action "nginx 启动失败" /bin/false
            fi
        fi
        ;;
    stop)
        if [ -f ${nginx_pid} ];then
           systemctl stop nginx
           rm -rf ${nginx_pid} 
           action "nginx 已停止" /bin/true
        else
           echo "[error] open() "$nginx_pid" failed (2: No such file or directory)"        

        fi
        ;;
    reload)
            if [ -f ${nginx_pid} ];then
           nginx -t -c /etc/nginx/nginx.conf &> nginx.err
           if [ $? -eq 0 ];then
            action "检测与法成功" /bin/true
           else
                nginx_conf=$(cat nginx.err |awk -F "[ :]" 'NR==1 {print $(NF-1)}')
            nginx_line=$(cat nginx.err |awk -F "[ :]" 'NR==1 {print $NF}')
            read -p " ${nginx_conf} 语法错误,是否进入文件 ${nginx_line} 行进行修改: " err
            case $err in
                y)
                  vim ${nginx_conf} +${nginx_line}
                ;;
                n)
                 exit
                ;;

            esac
           
           fi
                else
               action "nginx 未启动" /bin/false
        fi
        ;;
    status)
        if [ -f ${nginx_pid} ];then
                   echo "nginx (pid  $(cat $nginx_pid)) is running..."
           else
               echo "nginx is stopped"
            fi
            ;;
       *)
                echo "USAGE:  $0 {start|stop|status|reload}"
        exit 1
                ;;
esac

需求二:使用case实现nginx状态监控脚本.

[root@manager-61 ~/case]#cat nginx_status.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-30
#FileName: nginx_status.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Hostname=test.ltc.com
nginx_status_file=nginx.status
nginx_status_path=nginx_status
curl -sH Host:${Hostname} http://127.0.0.1/${nginx_status_path} > ${nginx_status_file}
case $1 in
    active)
          echo $(( $(awk 'NR==1 {print $NF}' ${nginx_status_file}) -1 ))
          ;;
    accepts)
          echo $(( $(awk 'NR==3 {print $(NF-2)}' ${nginx_status_file}) -1 ))
          ;;
    handled)
          echo $(( $(awk 'NR==3 {print $(NF-1)}' ${nginx_status_file}) -1 ))
          ;;
    requests)
          echo $(( $(awk 'NR==3 {print $NF}' ${nginx_status_file}) -1 ))
          ;;
    reading)
          echo $(( $(awk 'NR==4 {print $2}' ${nginx_status_file}) -1 ))
          ;;
    writing)
          echo $(( $(awk 'NR==4 {print $4}' ${nginx_status_file}) -1 ))
          ;;
    waiting)
          echo $(( $(awk 'NR==4 {print $6}' ${nginx_status_file}) -1 ))
          ;;
    *)
          echo "请输入查看的状态: [ active | accepts | handled | requests | reading  | writing  |waiting ]"
          exit
          ;;
esac

需求3:使用case实现php-fpm状态监控脚本。

[root@manager-61 ~/case]#cat php_status.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-30
#FileName: php_status.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Hostname=test1.ltc.com
php_status_file=php.status
php_status_path=status
curl -sH Host:${Hostname} http://127.0.0.1/${php_status_path} >${php_status_file}
case $1 in
    since)
          echo $(( $(awk 'NR==4 {print $NF}' ${php_status_file}) -1 ))
          ;;
    accepted)
          echo $(( $(awk 'NR==5 {print $NF}' ${php_status_file}) -1 ))
          ;;
    *)
          echo "请输入想要查看的状态: [ since | accepted ]"
          exit
          ;;
esac

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 5,472评论 0 0
  • 大多数 Nginx 新手都会频繁遇到这样一个困惑,那就是当同一个location配置块使用了多个 Nginx 模块...
    SkTj阅读 12,449评论 0 12
  • Shell入门 什么是shell? Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每...
    酷酷的伟阅读 3,203评论 0 1
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,750评论 0 38
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,244评论 0 10

友情链接更多精彩内容