一.case流程控制语句
1.编写模板
case 变量名4 in
模式匹配1)
命令的集合
;;
模式匹配2)
命令的集合
;;
模式匹配3)
命令的集合
;;
*) *的下一行不需要有;;
echo USAGE[$0 1|2|3]
esac
2.举例
[root@web scripts]# cat case.sh
#!/bin/sh
case $1 in
Linux)
echo linux......
;;
Shell)
echo Shell......
;;
MySQL)
echo MySQL.....
;;
*)
echo "USAGE $0 [Linux|Shell|MySQL]"
esac
3.case 批量删除用户
[root@web scripts]# cat casedel.sh
#!/bin/sh
read -p "请输入用户名前缀: " prefix
read -p "请输入要删除几个用户: " num
for i in `seq $num`
do
echo $prefix$i
done
read -p "你确定要删除以上用户吗?[y|yes|YES|n|N|no]" ready
for n in `seq $num`
do
name=$prefix$n
case $ready in
y|yes|YES)
id $name &>/dev/null
if [ $? -eq 0 ];then
userdel -r $name
[ $? -eq 0 ] && echo "$name del is ok"
else
echo "id: $name: no such user"
fi
;;
n|N|no)
echo "不删除我玩啥呢?" && exit
;;
*)
echo "USAGE $0 [y|yes|YES|n|N|no]"
esac
done
4.菜单
[root@web scripts]# cat menu.sh
#!/bin/sh
echo -e "\t\t#########################"
echo -e "\t\t#\t1.系统负载\t#"
echo -e "\t\t#\t2.磁盘使用率\t#"
echo -e "\t\t#\t3.内存使用率\t#"
echo -e "\t\t#\t4.当前登录用户\t#"
echo -e "\t\t#\t5.当前eth0的IP\t#"
echo -e "\t\t#\t6.显示菜单\t#"
echo -e "\t\t#########################"
menu(){
cat<<EOF
1.u 系统负载
2.d 磁盘使用率
3.f 内存使用率
4.w 当前登录用户
5.ip 当前eth0的IP
6.h 显示帮助(菜单)
7.q 退出
EOF
}
menu
while true
do
read -p "请输入你想要查看的系统信息的编号: " num
case $num in
1|u)
uptime
;;
2|d)
df -h
;;
3|f)
free -h
;;
4|w)
w
;;
5|ip)
ip add
;;
6|h)
clear
menu
;;
7|q)
exit
;;
*)
menu
esac
done
5.Nginx 启动脚本
命令
/usr/sbin/nginx 使用命令进行启动后 systemctl 无法管理命令行启动的Nginx
/usr/sbin/nginx 启动
/usr/sbin/nginx -s stop 停止
/usr/sbin/nginx -s reload 重新加载\
/usr/sbin/nginx -s stop 重启
sleep 2
/usr/sbin/nginx
脚本文件
[root@web scripts]# cat nginxstart.sh
#!/bin/sh
. /etc/init.d/functions
en=$1
fun(){
[ $? -eq 0 ] && action "Nginx $en is" /bin/true || action "Nginx $en is" /bin/false
}
case $1 in
start)
/usr/sbin/nginx
fun
;;
stop)
/usr/sbin/nginx -s stop
fun
;;
reload)
/usr/sbin/nginx -s reload
fun
;;
restart)
/usr/sbin/nginx -s stop
sleep 2
/usr/sbin/nginx
fun
;;
status)
echo "当前Nginx的PID:`ps axu|grep nginx|grep master|awk '{print $2}'`"
;;
*)
echo "USAGE $0 [start|stop|reload|restart|status]"
esac
6.jumpserver 跳板机
[root@web scripts]# cat jumpserver.sh
#!/bin/sh
WEB01=10.0.0.7
WEB02=10.0.0.8
MySQL=10.0.0.51
NFS=10.0.0.31
menu(){
cat<<EOF
1. WEB01=10.0.0.7
2. WEB02=10.0.0.8
3. MySQL=10.0.0.51
4. NFS=10.0.0.31
5|h. 显示菜单
EOF
}
menu
trap "echo 不要乱输入!小心爆炸!" HUP INT TSTP
while true
do
read -p "请输入连接服务器的编号或者是主机名 :" num
case $num in
1|WEB01)
ssh root@$WEB01 # 免秘钥登录
;;
2|WEB02)
ssh root@$WEB02 # 免秘钥登录
;;
5|h)
clear
menu
;;
woshiyunwei)
exit
;;
*)
echo "USAGE:[WEB01|1|WEB02|2|h]"
esac
done