标签:shift case
有时候一个长的if语句会让一个程序变得非常难读,有了case后,可以使case语句变得更加简洁
case语法格式如下:
case expression in pattern1) suite1 ;; pattern2) suite2 ;; ... patternn) suiten ;; *) other_suite ;; esac
case中各pattern可以使用模式:
a|b: a或者b
*:匹配任意长度的任意字符;
?:匹配任意单个字符;
[-]:范围匹配
使用示例:
写一个脚本,接受如此格式
script.sh {start|stop|restart|status}
1、如是start,那么创建/var/lock/subsys/script.sh,显示启动成功;
2、如果参数是stop,则删除/var/lock/subsys/script.sh,显示停止成功
3、如果restart,则删除,再创建,显示成功;
4、如果status, 如果文件存在,则显示running,否则,显示stopped
#!/bin/bash
script=$0
lockfile=/var/lock/subsys/script.sh
[ $# -lt 1 ] && echo "usage: $script {start|stop|restart|staus}" && exit 6
case $1 in
start)
touch $lockfile
echo "$script service start"
;;
stop)
rm -f $lockfile
echo "$script service stop"
;;
restart)
rm -f $lockfile
touch $lockfile
echo "$scrtip service restart"
;;
status)
if [ -f $lockfile ];then
echo "$script service is running"
else
echo "$script service is stop"
fi
;;
*)
echo "usage: $script {start|stop|restart|staus}"
;;
esac写一个简单脚本
1、提示用户输入一个任意字符;
2、能判断此字符是数字、字母或特殊字符;
#!/bin/bash # while true;do read -p "enter a char: " char [[ "$char" == "quit" ]] && exit 8 case $char in [1-9]) echo "$char is digit" ;; [a-z]) echo "$char is letter" ;; *) echo "special" esac done
写一个脚本,能对/etc/目录进行打包备份,备份位置为/backup/etc-日期.后缀
1、显示如下菜单给用户:
xz) xz compress
gzip) gzip compress
bip2) bzip2 compress
2、根据用户指定的压缩工具使用tar打包压缩;
3、默认为xz;输入错误则需要用户重新输入;
#!/bin/bash
#
dir="/etc/*"
bak="/backup/etc-"
[ -d backup ] || mkdir /backup
cat << EOF
xz) xz compress
gzip) gzip compress
bzip2) bzip2 compress
EOF
while true;do
read -p "please enter a tool: " tools
tools=${tools:-xz}
case $tools in
xz)
backuptools=J
end=xz
break
;;
gzip)
backuptools=z
end=gz
break
;;
bzip2)
backuptools=j
end=bz2
break
;;
*)
echo "wrong option,please enter again"
esac
done
tar -c${backuptools}f ${bak}`date +%F-%T`.$end $dir写一个脚本,完成如下功能
说明:此脚本能够为指定网卡创建别名,指定地址;使用格式:mkethalias.sh -v|--verbose -i|--interface ethX
1|-i选项用于指定网卡;
2、如果网卡存在:在命令行,请用户指定一个别名;
3、让用户指定IP和掩码;
4、用户可以同时使用-v或--verbose选项:如果使用了,则在配置完成后,显示配置结果;否则,则不予显示;
#!/bin/bash
#
debug=0
[ $# -lt 1 ] && echo "usage: $0 {-v|--verbose -i|--interface ethX}"
while [ $# -ge 1 ];do
case $1 in
-v|--verbose)
debug=1
shift 1 ;;
-i|--interface)
interface=$2
shift 2 ;;
*)
echo "usage: $0 {-v|--verbose -i|--interface ethX}"
shift $*
;;
esac
done
#echo "$interface $debug"
if ! ip link show $interface &> /dev/null;then
echo "networkcard no such"
exit 6
fi
read -p "please enter network_alias: " network_alias
read -p "please enter IPaddr: " IPaddr
read -p "please enter netmask: " netmask
ip addr add dev $interface ${IPaddr}/${netmask} label $network_alias
[ "$debug" -eq 1 ] && ip addr show $interface || echo "setup successfuly"本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1754613
标签:shift case
原文地址:http://zkxfoo.blog.51cto.com/1605971/1754613