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]#
网友评论