getopts用例

getopts用例

Content #

aflag=
bflag=
while getopts 'ab:' OPTION
do
    case $OPTION in
        a)
            aflag=1
            ;;
        b)
            bflag=1
            bval="$OPTARG"
            ;;
        ?)
        printf "Usage: %s: [-a] [-b value] args\n" $(basename $0) >&2
        exit 2
        ;;
    esac
done
shift $(($OPTIND – 1))
if [ "$aflag" ]
then
    printf "Option -a specified\n"
fi
if [ "$bflag" ]
then
    printf 'Option -b "%s" specified\n' "$bval"
fi
printf "Remaining arguments are: %s\n" "$*"

‘ab:‘的含义 #

a为开关选项。b后有’:’,表示带参数的选项,比如 -u username。

getopts与while结合 #

getopts 'ab:' OPTION

getopts在解析参数列表($1, $2, …)时,如果找到了带减号("-")的参数,就把减号后的字母放入变量$OPTION,并返回true。把getopts放到while循环中,就可以不断读取参数,直至结束。两个减号("–")会结束option的解析。

OPTIND #

shift $(($OPTIND - 1))

$OPTIND记录了getopts正在使用的参数列表的下标。

myscript -a -b alt plow harvest reap

对于上面的命令,getopts执行结束后,$OPTIND的值为4,调用shift之后,$*的内容会是:

plow harvest reap

printf中就可以直接使用。

From #