/# cat test
#!/bin/sh
#set -x
while getopts ":a:b:c" opt;do
case $opt in
a)
echo "a option $OPTARG"
;;
b)
echo "b option $OPTARG"
;;
c)
echo "c option $OPTARG"
;;
esac
done
以上为使用的示例.
使用方式:getopts options var
影藏传递参数方式:
OPTARG保存选项的参数
OPTIND存储的是下一个参数的index
规则:
1. 脚本内options中的a/b 后面都带有“:”,那么表示这些选项后面必须带参数, c后面不带“:”,说明它没有参数,所以解析“-c”时,不会有OPTARG值
2. 脚本内options中的a前还带有一个“:”, 表示如果遇到需要带参数的,但是没带的,忽略错误。如果没有这个“:”,则会报错。
示例1 正确输出结果:
/# ./test -a aaa -b ccc -c
a option aaa
b option ccc
c option
示例2 需要带参数,但是不带
# ./test -a -b bbbb -c
a option -b
/#
示例3 把a前面的“:”挪掉
cat test
#!/bin/sh
#set -x
while getopts "a:b:c" opt;do
case $opt in
a)
echo "a option $OPTARG"
;;
b)
echo "b option $OPTARG"
;;
c)
echo "c option $OPTARG"
;;
esac
done
/# ./test -a
No arg for -a option
OPTIND 示例:
/# cat test
#!/bin/sh
#set -x
while getopts "a:b:c" opt;do
case $opt in
a)
echo "a option $OPTARG next index:$OPTIND"
;;
b)
echo "b option $OPTARG, next index:$OPTIND"
;;
c)
echo "c option $OPTARG, next index:$OPTIND"
;;
esac
done
输出:
/# ./test -a aaa -b bbb -c
a option aaa next index:3
b option bbb, next index:5
c option , next index:6