getopts可以规定这个程序启动时接收的参数
举些例子:
./test.sh
./test.sh
while getopts ab: opt #这里定义了这个程序可以接收abc三种参数,其中a必须要用值,他都都不含值
do
case $opt in
a)
echo "a=$OPTIND" #通过OPTIND取出这个参数的序号。
;;
b)
echo "b=$OPTIND"
echo "${OPTARG}" #通过OPTARG取出这个参数的值
;;
\?) #\? 代表所有在上面没有定义的参数
echo "there is somthing unknow"
exit 0
;;
esac
done
执行这段脚本
./test.sh -ab 12
运行的结果是
a=1
b=3
12
如果只这样执行
./test.sh -a -b 12 -a
a=2
b=4
12
a=5
OPTIND展开:
OPTIND存储的是下一个要处理的参数的序号
OPTIND存储的是下一个要处理的参数的序号
从第一个来看
程序处理到a,下一个要处理的是b,但是他们都在第一个参数里,所以OPTIND=1
程序处理到b,本来下一个要处理的12,但是12不是参数就跳过,下一个要处理的是null。所以OPTIND=3
看第二个
程序处理到a,下一个要处理的是b,所以OPTIND=2
程序处理到b,下一个要处理的是12,但是12不是参数就条古,下一个要出里的是a,所以OPTIND=4
程序处理到第二个a,下一个要处理的是null,所以OPTIND=5