zoukankan      html  css  js  c++  java
  • shell的流程控制语句case

    流程控制语句case

    case语法

    case 变量 可以是直接传参 赋值 read读入
    case 变量  in
             模式1)
                 命令序列
                 ;;
             模式2)
                 命令序列
                 ;;
             模式3)
                 命令序列
                 ;;
                 *)
                 无匹配后命令序列
    esac

    案例:

    #!/bin/sh
    cat<<EOF
                    1.NFS
                    2.MySQL
                    3.Redis
                    4.DOCKER
                    5.KVM
                    6.退出脚本
    EOF
    while true
    do
    read -p "请输入你想要安装的服务编号或者服务名称: " num
    case $num in
            1)
            echo "yum -y instll NFS........"
            ;;
            2)
            echo "yum -y install MySQL......"
            ;;
            3)
            echo "yum -y install Redis......."
            ;;
            6)
            exit
            ;;
            *)
             echo "USAGE: $0 read -p [NFS|MySQL|Redis|DOCKER|KVM]"
    esac
    done

    批量创建用户:

    #!/bin/sh
    read -p "请输入用户的前缀名称: " prefix  
    [ -z $prefix ] && echo "请输入用户的前缀" && exit
    read -p "请输入要创建多少个:"   num
    if [[ ! $num =~ ^[0-9]+$ ]];then
       echo "请输入整数"
       exit
    fi
    for i in `seq $num`
    do
         echo ${prefix}$i
    done
    
    read -p "你确定要创建以上用户吗?[y|yes|Y|YES|n|N|NO]: " re
    
    for a in `seq $num`
    do
            case $re in
                      y|Y|YES|yes)
                            useradd ${prefix}$a &>/dev/null
                              if [ $? -eq 0 ];then
                                    echo "${prefix}$a 创建成功"
                              else
                                    echo "useradd: user ${prefix}$a already exists"
                              fi
                            ;;
                      n|N|no|NO)
                            exit
                            ;;
                      *)
                            echo "USAGE: $0 请输入[y|n]"
            esac
    done

    批量删除用户:

    #!/bin/sh
    read -p "请输入用户前缀名称: " prefix
    read -p "请输入用户个数: " num
    for i in `seq $num`
    do
        echo $prefix$num
    done
    read -p "你确定要删除以上用户吗?[y|Y|n|N]: " re
    for a in `seq $num`
    do
    case $re in
              y|Y)
                  userdel -r $prefix$a &>/dev/null
                  if [ $? -eq 0 ];then
                  echo "$prefix$a 删除成功"
                  else
                  echo "$prefix$a 删除失败"
                  fi
                  ;;
              n|N)
                  echo "玩啥"
                  exit
                  ;;
                *)
                 echo "USAGE $0 [y|Y|n|N]"
    esac
    done

    案例:
    使用case语句写一个可查看系统资源的脚本

    #!/bin/sh
    menu(){
    cat<<EOF
                    1. 查看内存
                    2. 查看磁盘
                    3. 查看负载
                    4. 查看登陆信息  
                    5. 查看菜单
                    6. 退出
    EOF
    }
    menu
    
    while true
    do
    read -p "请输入查看系统信息的编号:[1-5(6:查看菜单)]: " num
    case $num in
                 1)
                  clear
                  free -h
                  ;;
                 2)
                  clear
                  df -h
                  ;;
                 3)
                  clear
                  uptime
                  ;;
                 4)
                  clear
                  w
                  ;;
                 5)
                  clear
                  menu
                  ;;
                 6)
                  exit
                  ;;
                 *)
                 echo "USAGE $0 请按照规则来办事"
    esac
    done

    Nginx服务启停

    /usr/sbin/nginx								# 启动
    /usr/sbin/nginx -s stop 						# 停止
    /usr/sbin/nginx -s reload 					# 重新加载
    /usr/sbin/nginx -s stop  && /usr/sbin/nginx   # 先停止 后启动--> 重启
    通过三剑客过滤Nginx状态 PID 端口 输出到屏幕   # 查看Nginx状态
    
    #!/bin/sh
    if [ $# -eq 1 ];then
    pl=$1
    TEST(){
                   if [ $? -eq 0 ];then
                       action "Nginx $pl Is" /bin/true
                   else
                       action "Nginx $pl Is" /bin/false
                   fi
    }
    
    START(){
            if [ `ps axu|grep nginx|grep master|wc -l` -gt 0 ];then
                  echo "Nginx is running....."
                  exit
            else
                  nginx -t &>/dev/null
                  if [ $? -eq 0 ];then
                      /usr/sbin/nginx
                  else
                      echo "请检查Nginx配置文件" 
                      exit
                  fi
            fi
    }
    
    STOP(){
            /usr/sbin/nginx -s stop
    }
    
    RELOAD(){
            /usr/sbin/nginx -s reload
    }
    
    RESTART(){
            /usr/sbin/nginx -s stop
            sleep 1
            /usr/sbin/nginx
    }
    STATUS(){
              if [ `ps axu|grep nginx|grep master|wc -l` -eq 0 ];then
                    echo "Nginx服务目前是停止状态无法查看"
                    exit
              else
                 if [ `curl -sI http://127.0.0.1|awk 'NR==1{print $2}'` -eq 200 ];then
                    action "Nginx is running....." /bin/true
                 else
                    action "Nginx is error......" /bin/false
                 fi
              fi
    }
    USAGE(){
              echo "USAGE $0 [start|stop|reload|restart|status]"
    }
    [ -f /etc/init.d/functions ] && . /etc/init.d/functions
    case $1 in
             start)
                  START
                   TEST
                  ;;
             stop)
                  STOP
                  TEST
                  ;;
            reload)
                  RELOAD
                  TEST
                 ;;
            restart)
                 RESTART
                 TEST 
                ;;
            status)
                 STATUS
                 ;;
                *)
                 USAGE
    esac
    else
        echo "输入一个就行"
        exit
    fi

    JUMPSERVER跳板机

    1.职责 运维 开发测试 权限
    2.菜单 可以连接的服务器有哪些
    3.免秘钥登陆
    4.开发把脚本ctrl+c掉 直接ssh登陆数据库删除 跑路 禁止ctrl+c z 不能让脚本退出
    5.运维口令

    简单版)

    #!/bin/sh
    WEB01=10.0.0.7
    WEB02=10.0.0.8
    NFS=10.0.0.31
    menu(){
    cat<<EOF
                    1.WEB01
                    2.WEB02
                    3.NFS
                    4.菜单
    EOF
    }
    menu
    trap "echo 不要瞎操作,小心炸掉你" HUP INT TSTP
    while true
    do
    read -p "请输入你要连接的服务器编号或者是主机名:[WEB01|1|WEB0|2] " num
    case $num in
               1)
                ssh root@$WEB01
                ;;
               2)
                ssh root@$WEB02
                ;;
               3)
                ssh root@$NFS
                ;;
               4)
                 clear
                 menu
                ;;
            woshiyunwei)
                        echo "客官慢走.....下次在来"
                        exit
                 ;;
                *)
                read -p "请输入你要连接的服务器编号或者是主机名:[WEB01|1|WEB0|2] "
    esac
    done

    完善版)

    #!/bin/sh
    JD_menu(){
    cat<<EOF
                    1.我是运维
                    2.我是开发
                    3.啥也不是
    EOF
    }
    OP_menu(){
    cat<<EOF
                    1. WEB01
                    2. WEB02
                    3. MySQL
                    4. NFS
                    5. Redis
                    6. ZABBIX
                    7. ELK
                    8. Git
                    9. Jenkins
    EOF
    }
    DEV_menu(){
    cat<<EOF
    
                    1.WEB01
                    2.WEB02
                    3.Git
    EOF
    }
    JD_menu
    while true
    do
       read -p "请输入你的职责: " jd
       trap "" INT TSTP HUP
       while true
       do
       case $jd in
              1)
                if [ $jd -eq 1 ];then
                   read -p "请输入运维的暗号: " pass
                    if [ "$pass" = "woshiyunwei" ];then
                        OP_menu
                        read -p "请输入你要连接的服务器编号: " num
                        case $num in
                                   1)
                                    ssh root@10.0.0.7
                                    ;;
                                   2)
                                    ssh root@10.0.0.8
                                    ;;
                                   *)
                                    echo "输入服务器编号"
                        esac
                     else 
                        read -p "不要假冒运维,请重新输入你的职责"
                        break
                    fi
                 fi
                ;;
              2)
                DEV_menu
                   read -p "请输入你要连接的服务器编号: " num
                    case $num in
                              1)
                              ssh root@10.0.0.7
                              ;;
                              2)
                              ssh root@10.0.0.8
                              ;;
                              *)
                              echo "输入服务器编号"
                    esac
                ;;
              3)
                read -p "请输入你的职责: " jd                   
                ;;
       woxiangtuichu)
                    exit
                    ;;
              *)
                read -p "必须输入身份"
                break
       esac
       done
    done
  • 相关阅读:
    HDU 1874 畅通工程续
    HDU 1232 畅通工程
    HDU 1233 还是畅通工程
    HDU 1269 迷宫城堡
    洛谷 P1078 文化之旅
    POJ 3461 Oulipo
    最长链
    矩形面积求并
    有趣的数
    修复公路
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12706482.html
Copyright © 2011-2022 走看看