case语句语法结构:
case支持glob风格的通配符:
* : 任意长度的任意字符;
? : 任意单个字符;
[] : 范围内的任意单个字符;
a|b : a或b;
case $VARAIBLE in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) 分支n ;; esac
脚本示例1:
显示一个菜单给用户;
cpu) displsy cpu information;
mem) displsy memory information;
disk) displsy disks information;
quit) quit;
要求,提示用户给出自己的选择;正确的选择则给出相应的信息,否则提示重新选择正确的选项;
#!/bin/bash # cat << EOF cpu)displsy cpu information; mem)displsy memory information; disk)displsy disks information; quit)quit; ------------------------------ EOF read -p "choses you option:" option while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ]; do echo cat << EOF cpu)displsy cpu information; mem)displsy memory information; disk)displsy disks information; quit)quit; -------------------------------- EOF echo echo "just one of the four arg." read -p "choses you option:" option done if [ "$option" == "cpu" ]; then lscpu elif [ "$option" == "mem" ]; then free -m elif [ "$option" == "disk" ]; then fdisk -l /dev/sd[a-z] else echo "quit" exit 0 fi
#!/bin/bash # cat << EOF cpu)displsy cpu information; mem)displsy memory information; disk)displsy disks information; quit)quit; ------------------------------ EOF read -p "choses you option:" option while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ]; do echo cat << EOF cpu)displsy cpu information; mem)displsy memory information; disk)displsy disks information; quit)quit; -------------------------------- EOF echo echo "just one of the four arg." read -p "choses you option:" option done case $option in cpu) lscpu ;; mem) free -m ;; disk) fdisk -l /dev/[hs]d[a-z] ;; *) echo "quit." exit 0 esac
示例2:
写一个服务框架脚本;其中有个文件,$lockfile,其值为’/var/lock/subsys/SCRIPT_NAME’;
此脚本可接受start,stop,restart,status四个参数之一;
如果参数非此四个,则提示使用帮助后退出;
start状态时,创建lockfile,并显示启动;
stop状态时,删除lockfile,并显示停止;
restart状态时,先删除此文件,然后再创建,并提示重启完成;
status状态时,如果文件存在,则显示running,如果不存在,则显示为stopped;
#!/bin/bash
#
lockfile=/var/lock/subsys/$0
if [ $# -lt 1 -o $# -gt 1 ]; then
echo "$0 's arg : {start|stop|restart|status}."
exit 22
fi
b_name=$(basename $0)
blockfile=/var/lock/subsys/$b_name
case $1 in
start)
if [ -f $lockfile ]; then
echo "file is already exitses. it is started."
else
touch $lockfile
[ $? -eq 0 ] && echo "start:file is created."
fi
;;
stop)
if [ -f $lockfile ]; then
rm -rf $lockfile
[ $? -eq 0 ] && echo "stop:file is delete."
else
echo "it is already stop."
fi
;;
restart)
if [ -f $lockfile ]; then
rm -rf $lockfile
touch $lockfile
[ $? -eq 0 ] && echo "restart:file is already exitses.restart now."
else
touch $lockfile
[ $? -eq 0 ] && echo "restart 2 : file is no exitses.create now..."
echo "file create finished."
fi
;;
status)
if [ -f $lockfile ]; then
echo "running : start status."
else
echo "stopped : stop status."
fi
;;
*)
echo "$0 's arg : {start|stop|status|restart}"
echo "quit"
exit 11
;;
esac