美文网首页
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