shell模式匹配case

一、case 语法结构
1.case 语法结构(字符串比较)
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
*)
无匹配后命令序列
esac
2.初始案例
操作系统选择:

[root@localhost ~]# vim case1.sh
#!/bin/bash
read -p "请输入你要选择的操作系统: " str
case $str in
windows)
echo "windows操作系统"
;;
linux)
echo "linux操作系统"
;;
*)
echo "其他操作系统"
;;
esac

[root@localhost ~]# bash case1.sh
请输入你要选择的操作系统: linux
linux操作系统
二、案例1:简单的模式匹配
邀请用户输入待删除用户名,询问用户,确定要继续删除吗 yes/no: y.

[root@localhost ~]# vim case2.sh
#!/bin/bash
read -p "请输入你要删除的用户: " user
id $user &> /dev/null
if [ $? -ne 0 ]
then
        echo "$user用户不存在"
exit
fi
read -p "确认是否删除该用户: " action
case $action in
Y|y|yes|YES)
userdel -r $user
echo "$user is deleted!"
;;
*)
echo "Thank you."
;;
esac

[root@localhost ~]# bash case2.sh
请输入你要删除的用户: lili
确认是否删除该用户: y
lili is deleted!
[root@localhost ~]# bash case2.sh
请输入你要删除的用户: lili
lili用户不存在

三、案例2:简单的JumpServer
1.需要先做免密登录
机1:ip:192.168.64.140(跳板)
机2:ip :192.168.64.142
机3:ip:192.168.64.143
[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id 192.168.64.143
[root@localhost ~]# ssh-copy-id 192.168.64.142
2.跳转服务器jump.sh

[root@localhost ~]# vim jump.sh
#!/bin/bash
ip1=192.168.64.142
ip2=192.168.64.143
while :
do
cat <<EOF
1.web1
2.web2
3.quit
EOF
read -p "请输入你管理的服务器:" num
case $num in
1)
ssh root@$ip1
;;
2)
ssh root@$ip2
;;
3)
exit
;;
esac
done
[root@localhost ~]# bash jump.sh
1.web1
2.web2
3.quit
请输入你管理的服务器:3
[root@localhost ~]# bash jump.sh
1.web1
2.web2
3.quit
请输入你管理的服务器:1
Last login: Mon Jan  4 21:12:07 2021 from 192.168.64.140
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:9a:9b:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.64.142/24 brd 192.168.64.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::16bd:239b:da67:39b4/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::c6c4:19a4:a8a1:e923/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

四、案例3:系统管理工具箱
Command action:
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序

[root@localhost ~]# vim jump.sh
#!/usr/bin/bash
#打印菜单
cat <<-EOF
f. disk partation
d. filesystem mount
m. memory
u. system load
q.exit
EOF

#读取用户输入,进行模式匹配

read -p "请输入你要操作的字符:  " action
case "$action" in
f)
        fdisk -l
        ;;
d)
        df -hT
        ;;
m)
        free -m
        ;;
u)
        uptime
        ;;
q)
        exit
        ;;
"")
        ;;
*)
        echo "error"
        ;;
esac
[root@localhost ~]# bash jump.sh
f. disk partation
d. filesystem mount
m. memory
u. system load
q.exit
请输入你要操作的字符: m        
              total        used        free      shared  buff/cache   available
Mem:           1980         121        1735           9         123        1719
Swap:          1023           0        1023
上一篇:docker的网络模式


下一篇:云数据库POLARDB 新增多款计算型规格,最高可达88核