getopts的简单应用:
脚本:
#!/bin/bash
while getopts ":a:b:c" SWITCH;do
case $SWITCH in
a) echo "choose -a"
echo $OPTARG
;;
b) echo "choose -b"
echo $OPTARG
;;
c) echo "choose -c"
;;
\?) echo "unknown option"
;;
esac
done
测试结果:
“:a:b:c”a前边加“:” 表示忽略选项产生的错误输出。a后面的“:”表示可以在选项-a 后面加上参数。OPTARG用来储存参数的值。
shift的使用方法:shift命令是用来“截去(lops off)”;来自列表的位置参数,由左开始。一旦执行shift,$1的初始值会永远消失,取而代之的是$2的旧值。$2的值变成$3的旧值,
以此类推。$#值则会逐次减1。shift也可使用一个可选的参数,也就是要位移的参数的计数。
——(《shell脚本编程指南》130页)
举例:#/bin/bash
echo $1
shift
echo $1
下面,利用getopts命令和shift命令来构建一个简单的脚本,脚本的作用是通过调用此脚本使我们在写一个新的脚本时自动生成脚本的头部,包括作者,时间,版本,注释信息等等。
示例:
#!/bin/bash
while getopts ":a:d:" SWITCH;do
case $SWITCH in
a) AUTHOR=$OPTARG
;;
d) DESC=$OPTARG
;;
\?) echo "sorry,unknown option!"
echo "Usage:$0 -a author -d description filename"
exit 1
;;
esac
done
shift $[$OPTIND-1]
if ! grep "#!/bin/bash" $1 &>/dev/ull; then
cat>>$1<<EOF
#!/bin/bash
#date & time:`date +"%F %T"`
#Author:"${AUTHOR:=lily}" 如果不指明作者,默认是lily
#Description:$DESC
#Version:1.0
EOF
fi
vim +7 $1
wait
chmod u+x $1
新建一个脚本试试:./newscript.sh -a lucy -d "this is a test" d.sh
测试结果: