一、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