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

测试结果:

clip_p_w_picpath002

“: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

clip_p_w_picpath004

下面,利用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

测试结果:

clip_p_w_picpath006