1、语句结构
case 变量值 in
模式一) 命令序列1
;;
模式二)命令序列2
;;
......
*)
esac
2、case语句应用示例
(1) 检查用户输入的字符类型
提示用户从键盘输入一个字符,通过case语句判断该字符是否为字母、数字或者其他控制字符
vim a.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z]) (匹配任意字母)
echo "您输入的是字母."
;;
[0-9]) (匹配任意数字)
echo "您输入的是数字."
;;
*) (默认模式,匹配任意字符)
echo "您输入的是空格、功能键或其他控制字符."
esac
chmod +x a.sh
./a.sh
(2) 编写系统脚本服务
通过位置变量$1指定的start, stop, restart, status控制参数,分别用来启动、停止、重启sleep进程
vim fuwu.sh
#!/bin/bash
case "$1" in
start)
echo -n "正在启动sleep服务..."
if sleep 9000 &
then
echo "OK"
fi
;;
stop)
echo -n "正在停止sleep服务..."
pkill "sleep" &> /dev/null
echo "OK"
;;
status)
if pgrep "sleep" &> /dev/null
then
echo "sleep服务已启动."
else
echo "sleep服务已停止."
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法:$0 {start|stop|status|restart}"
esac
chmod +x fuwu.sh
./fuwu.sh start
./fuwu.sh stop
./fuwu.sh status
./fuwu.sh restart
(3)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。(需要一个vsftp服务器)
将网段地址(如192.168.1.)赋值给变量NADD,作为检测地址的前缀。
使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。
vim getarp.sh
#!/bin/bash
# 1. 定义网段地址、MAC列表文件
NADD="192.168.1."
FILE="/etc/ethers"
# 2. 发送ARP请求,并记录反馈结果
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old (备份原有文件)
HADD=1 (定义起始扫描地址)
while [ $HADD -lt 30 ]
do
ping -c 2 -i 0.2 -W 3 ${NADD}${HADD} &> /dev/null
if [ $? -eq 0 ]
then
arp -n | grep ${NADD}${HADD} | awk '{print $1,$3}' >> $FILE
fi
let HADD++
done
chmod +x getarp.sh
./getarp.sh
cat /etc/ethers
(4) 检测一个主机是否开启匿名FTP服务
wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭
vim scanhost.sh
#!/bin/bash
TARGET=$(awk '{print $1}' /etc/ethers)
echo "以下主机已开放匿名FTP服务:"
for IP in $TARGET
do
wget ftp://$IP/ &> /dev/null
if [ $? -eq 0 ]
then
echo $IP
rm -rf index.html (删除测试产生的临时文件)
fi
done
chmod +x scanhost.sh
./scanhost.sh