21-流程控制-case语句-《shell脚本》

admin 2025-11-06 14:39:00 系统网络 来源:ZONE.CI 全球网 0 阅读模式
  • 一、条件循环语句-case
    • 1.1、case介绍
    • 1.2、case语法
    • 1.3、案例

    一、条件循环语句-case

    在生产环境中,我们总会遇到一个问题需要根据不同的状况来执行不同的预案,那么我们要处理这样的问题就要首先根据可能出现的情况写出对应预案,根据出现的情况来加载不同的预案。

    1.1、case介绍

    特点:根据给予的不同条件执行不同的代码块

    1. 比如你去相亲:你会在脑子里出现以下的预案:
    2. 第一眼看到对方父亲,你应该说:伯父好
    3. 第一眼看到对方母亲,你应该说:伯母好
    4. 第一眼看到对方奶奶,你应该说:奶奶好
    5. 。。。。
    6. 而这个例子中触发就是你第一眼看到了对方的谁,预案则是叫什么称呼。
    7. 再来说一个计算机的相关例子---监控内存使用率
    8. 内存使用率低于80%,脚本输出: 绿色字体的Memory use xx%
    9. 内存使用率大于80%小于90%,脚本输出: 黄色字体的Memory use xx%
    10. 内存使用大于90%,脚本输出: 红色字体的Memory use xx%

    1.2、case语法

    1. case $var in 定义变量;var代表是变量名
    2. pattern 1) 模式1;用 | 分割多个模式,相当于or
    3. command1 需要执行的语句
    4. ;; 两个分号代表命令结束
    5. pattern 2)
    6. command2
    7. ;;
    8. pattern 3)
    9. command3
    10. ;;
    11. *) default,不满足以上模式,默认执行*)下面的语句
    12. command4
    13. ;;
    14. esac esac表示case语句结束

    1.3、案例

    案例需求写一个nginx启动管理脚本,可以实现/etc/init.d/nginx start|stop|restart|status|reload或者systemctl start nginx

    1. #!/bin/bash
    2. #Description:
    3. #Author: www.zutuanxue.com
    4. #Created Time:
    5. #nginx service manage script
    6. #variables
    7. nginx_install_doc=/usr/local/nginx
    8. proc=nginx
    9. nginxd=$nginx_install_doc/sbin/nginx
    10. pid_file=$nginx_install_doc/logs/nginx.pid
    11. # Source function library.
    12. if [ -f /etc/init.d/functions ];then
    13. . /etc/init.d/functions
    14. else
    15. echo "not found file /etc/init.d/functions"
    16. exit
    17. fi
    18. #假如pid文件存在,那么统计一下nginx进程数量
    19. if [ -f $pid_file ];then
    20. nginx_process_id=`cat $pid_file`
    21. nginx_process_num=`ps aux |grep $nginx_process_id|grep -v "grep"|wc -l`
    22. fi
    23. #function
    24. start () {
    25. #如果nginx 没有启动直接启动,否则报错 已经启动
    26. if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
    27. echo "nginx running..."
    28. else
    29. #如果pid文件存在,但是没有进程,说明上一次非法关闭了nginx,造成pid文件没有自动删除,所以启动nginx之前先删除旧的pid文件
    30. if [ -f $pid_file ] && [ $nginx_process_num -lt 1 ];then
    31. rm -f $pig_file
    32. #可以使用两个函数,两种方法来执行命令,并返回执行结果
    33. #1)daemon
    34. #2)action 建议这个,简单易用
    35. #echo " nginx start `daemon $nginxd` "
    36. action "nginx start" $nginxd
    37. fi
    38. #echo " nginx start `daemon $nginxd` "
    39. action "nginx start" $nginxd
    40. fi
    41. }
    42. stop () {
    43. #判断nginx启动的情况下才会执行关闭,如果没启动直接报错,或者提示用户服务没启动,这里我直接报错的原因是为了给大家演示失败的输出
    44. if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
    45. action "nginx stop" killall -s QUIT $proc
    46. rm -f $pid_file
    47. else
    48. action "nginx stop" killall -s QUIT $proc 2>/dev/null
    49. fi
    50. }
    51. restart () {
    52. stop
    53. sleep 1
    54. start
    55. }
    56. reload () {
    57. #重载的目的是让主进程重新加载配置文件,但是前提是服务必须开启
    58. #这里先判断服务是否开启,开启就执行加载,没有开启直接报加载错误
    59. if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
    60. action "nginx reload" killall -s HUP $proc
    61. else
    62. action "nginx reload" killall -s HUP $proc 2>/dev/null
    63. fi
    64. }
    65. status () {
    66. if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
    67. echo "nginx running..."
    68. else
    69. echo "nginx stop"
    70. fi
    71. }
    72. #callable
    73. case $1 in
    74. start) start;;
    75. stop) stop;;
    76. restart) restart;;
    77. reload) reload;;
    78. status) status;;
    79. *) echo "USAGE: $0 start|stop|restart|reload|status";;
    80. esac
    01-shell脚本介绍-《shell脚本》 系统网络

    01-shell脚本介绍-《shell脚本》

    一、shell脚本是什么二、为什么要学shell,而不是其他计算机语言三、学习这门课程的优势四、学了能干什么五、学习什么内容六、学习的技巧七、成长路径八、学习环
    评论:0   参与:  17