• 流程控制之case语句


    一 语法

    case 变量 in
    模式1)
    	命令序列1
    	;;
    模式2)
    	命令序列2
    	;
    模式3)
    	命令序列3
    	;;
    *)
    	无匹配后命令序列
    esac
    

    二 案例

    案例1

    #!/bin/bash
    read -p "username: " -t 5 username
    echo
    if [ -z $username ];then
        username="default"
    fi
    
    case $username in
    root)
        echo "管理员用户"
        ;;
    egon)
        echo "普通用户"
        ;;
    default)
        echo "默认用户"
        ;;
    *)
        echo "其他用户"
    esac
    

    案例2:编写nginx启动脚本

    [root@egon shell]# cat nginx_stat.sh 
    #!/bin/bash
    
    . /etc/init.d/functions
    if [ $# -ne 1 ]
       then
          echo "USAGE $0 {start|stop|restart}"
          exit 1
    fi
    
    
    if [ "$1" == "start" ]
       then 
          action "start nginx" /bin/true
    elif [ "$1" == "stop" ]
       then
          action "stop nginx" /bin/true
    elif [ "$1" == "restart" ]
       then
          action "restart nginx" /bin/true
    else
          echo "USAGE $0 {start|stop|restart}"
          exit 1
    fi
        
    [root@egon shell]# chmod +x nginx_stat.sh 
    [root@egon shell]# ./nginx_stat.sh start
    start nginx                                                [  确定  ]
    [root@egon shell]# ./nginx_stat.sh restart
    restart nginx                                              [  确定  ]
    [root@egon shell]# ./nginx_stat.sh 
    USAGE ./nginx_stat.sh {start|stop|restart}
    

    案例3:编写nginx启动脚本

    # 储备知识1
    netstat -lntup|grep  ":80"  # 锚定单词的结尾
    
    # 储备知识2
    action:打印一段信息并执行给定的命令,然后根据给定命令的执行的结果来调用 success,failure方法,确定最终显示的内容
     
    [root@egon shell]# action "nginx start is" :
    nginx start is                                             [  确定  ]
    [root@egon shell]# action "nginx start is" /bin/true
    nginx start is                                             [  确定  ]
    [root@egon shell]# action "nginx start is" /bin/false
    nginx start is                                             [失败]
    
    
    # 代码
    [root@egon shell]# cat nginx_stat.sh 
    #!/bin/bash
    
    . /etc/init.d/functions
    args=$1
    
    fun(){
        [ $? -eq 0 ] && action "Nginx $args is " /bin/true  || echo "Nginx $args is " /bin/false 
    }
    
    case $1 in
       start)
           netstat -an | grep -i Listen | grep -q "80"
           if [ $? -eq 0 ]
           then 
              echo "Nginx is runing..."
           else
               /usr/sbin/nginx
               fun
           fi
           ;;
       stop)
           /usr/sbin/nginx -s stop
           fun
           ;;
       reload)
           /usr/sbin/nginx -s reload
           fun
           ;;
      restart)
           netstat -lntup|grep  ":80" &>/dev/null
           if [ $? -ne 0 ]
           then
              /usr/sbin/nginx
              [ $? -eq 0 ] && echo "Nginx start is ok" || echo "Nginx start is failed"
           else
              /usr/sbin/nginx -s stop                             
              [ $? -eq 0 ] && echo "Nginx stop is ok" || echo "Nginx stop is failed"
              sleep 2
              /usr/sbin/nginx 
              fun 
           fi
           ;;
       status)
           netstat -lntup|grep  ":80" &>/dev/null
           if [ $? -eq 0 ]
           then
              echo "Nginx is runing ..."
           else
              echo "Nginx is not runing ..."
           fi
           ;;
        *)
            echo "Usage: $0 {start|stop|status|restart|reload}"
            exit 2
    esac
    

    案例4:编写一个简易跳板机脚本

    # 储备知识
    Linux中断信号区别为:键入不同、对应操作不同、启用不同。
    
    1、HUP中断信号:HUP中断信号的对应操作为让进程挂起,睡眠。同<Ctrl+X>
    
    2、INT中断信号:INT中断信号的对应操作为正常关闭所有进程。同<Ctrl+C>
    
    3、TERM中断信号 15:TERM中断信号的对应操作为正常的退出进程。
    
    4、KILL中断信号 9:KILL中断信号的对应操作为强制关闭进程。
    
    5、STOP 19暂停(同 Ctrl + Z)
    
    6、CONT 18继续(与STOP相反, fg/bg命令)
    
    7、TSTP中断信号:TSTP中断信号的对应操作为暂时停用进程。
    
    
    # 代码
    [root@egon shell]# cat jumpserver.sh 
    #!/bin/bash
        
    cat<<EOF
    1. BACKUP 10.0.0.41
    2. WEB02  192.168.12.21
    3. WEB03  10.0.0.9
    EOF
    trap "echo 不要乱按键盘,否则服务器将会爆炸" HUP INT TSTP
    
    while true
    do
        read -p "请输入连接主机编号信息: " num
        read -p "请输入账号: " user
        # read -p "请输入要执行的命令: " cmd
        case $num in
           1)
               ssh $user@10.0.0.41
               [ $? -ne 0 ] && echo "connect faild"
               ;;
           2)
               ssh $user@192.168.12.21
               [ $? -ne 0 ] && echo "connect faild"
               ;;
           *)
               echo "请输入连接主机信息"
        esac
    done 
    
  • 相关阅读:
    js 中读取JSON的方法探讨
    git 教程 git.oschina.net
    JS实现页面跳转重定向的几种方式
    AngularJs 学习
    firebug js版
    emmt html生成
    idea sass scss配置
    关于idea激活
    sublime text There are no packages 解决!
    js监听滚动条事件
  • 原文地址:https://www.cnblogs.com/caodan01/p/14949010.html
Copyright © 2020-2023  润新知