美文网首页
shell-case判断

shell-case判断

作者: 你好_请关照 | 来源:发表于2019-10-24 22:11 被阅读0次

    exit 、break、continue 三者区别 在此篇:https://www.jianshu.com/p/496c9d9f1b88

    1、case 判断语格式

    case 判断语句格式:
    
    
    case  $变量  in 
        变量1 )
            命令序列 1 
            ;;
        变量2 )
            命令序列 2 
            ;;
        变量 3 )
            ;;
        *)
            无法匹配
    case
            
    

    2、举例:

    [root@node3 /server/scripts]# cat case1.sh 
    #!/bin/bash
    
    cat <<EOF
    ** 1.Bachup **
    ** 2.copy   **
    ** 3.quit   **
    EOF
    
    read -p "请选择你要做的操作:" re
    
    case $re in
        1|backup|BACKUP)
            echo "Backup is Done..."
        ;;
        2)  
            echo "copy is Done..."
        ;;
        3)  
            echo "Quit..."
        ;;
        *)
            echo "Inpput Error!!"
    esac
    
    

    3、case 语句练习

    (1)、用case 写一个小工具实现以下功能

    • 按h显示菜单
    • 按f显示磁盘分区
    • 按d显示磁盘挂载
    • 按m查看内存
    • 按u查看系统负载
    • 按q退出程序
    [root@node3 /server/scripts]# cat case2.sh 
    #!/sbin/bash
    
    menu(){
    cat <<EOF
    *********************
    h 显示菜单          *
    f 显示磁盘分区      *
    d 显示磁盘挂载      *
    m 查看内存          *
    u 查看系统负载      *
    q 退出程序          *
    *********************
    EOF
    }
    menu
    while true
    do
    read -p "Please enter what you are looking for:" re
    
        case $re in
            h)
                menu
            ;;
            f)
                lsblk
            ;;
            d)
                df -h 
            ;;
            m)
                free -m
            ;;      
            u)
                uptime
            ;;
            q)
                exit
            ;;
            *)
            echo "Please follow the instructions"
        esac
    done
    [root@node3 /server/scripts]# 
    
    

    (2)、实现批量删除用户的shell脚本

    代码如下:

    [root@node3 /server/scripts]# cat case3.sh 
    #!/sbin/bash
    
    read -p "请输入您要删除的用户前缀:" User_name
    
    read -p "请输入您要删除用用户数量:" User_num
        if [[ ! "$User_num" =~ ^[0-9]+$ ]];then 
            echo "请输入纯数字..."
        fi
    #提示用户将要删除的用户前缀和数量   
    echo "您要删除的用户前缀为:$User_name"
    echo "您要删除的用户数量为:$User_num"
                 
    read -p "是否确认删除操作|yes|no|: " re
    
    
    for i in $(seq -w $User_num);do
        
        #将循环的次数进行复制,比如user01、user02...
        Full_user=$User_name$i
    
        case $re in 
            yes)
                userdel -r $Full_user &>/dev/null
                
                if [ $? -eq 0 ];then
                    echo "用户 $Full_user 已删除"    
                 else 
                    echo "用户 $Full_user 不存在"    
                fi
            ;;
            no)
             exit
            ;;
            *)
            echo “输入错误”
        esac
    done
    You have new mail in /var/spool/mail/root
    [root@node3 /server/scripts]# 
    
    

    (3)、用case 实现简单的跳板机的功能

    代码如下

    [root@node3 /server/scripts]# cat case4.sh 
    #!/sbin/bash
    
    node1=10.0.0.200
    node2=10.0.0.201
    web01=10.0.0.7
    web02=10.0.0.8
    
    meminfo(){
    cat <<-EOF
    -------------------------------
    |       1) node1=10.0.0.200     |
    |       2) node2=10.0.0.201     |
    |       3) web01-172.16.1.7     |
    |       4) web02-172.16.1.8     |
    |       h) help                 |
    ---------------------------------
    EOF
    }
    
    meminfo
    
    # trap 用来切断信号传出,如Ctrl+C、Ctrl+z 等
    trap "" HUP INT TSTP
    
    while true
    do
    read -p "请选择您要连接的主机:" re
        case $re in
            1)
                ssh root@$node1
                #如果执行登录node1,则记录登录时间和登录的IP
                if [ $? -eq 0 ];then
                    echo "`date`connect  $node1" >>/server/scripts/logs
                fi
            ;;
            2)
                ssh root@$node1
                #如果执行登录node2,则记录登录时间和登录的IP
                if [ $? -eq 0 ];then
                    echo "`date`connect  $node2" >>/server/scripts/logs
                fi
            ;;
            3)
                ssh root@$web01
                
                #如果执行登录web01,则记录登录时间和登录的IP
                if [ $? -eq 0 ];then
                    echo "`date`connect  $web01" >>/server/scripts/logs
                fi
            ;;
            4)
                ssh root@$web02
                #如果执行登录web02,则记录登录时间和登录的IP
                if [ $? -eq 0 ];then
                    echo "`date`connect  $web02" >>/server/scripts/logs
                fi
            ;;
            h)
                meminfo
            ;;
            exec)
                exit
            ;;
            *)
                continue    
        esac
    done
    [root@node3 /server/scripts]# 
    
    

    相关文章

      网友评论

          本文标题:shell-case判断

          本文链接:https://www.haomeiwen.com/subject/rdhjvctx.html