茶の間で読めるITチップス

情報セキュリティ、ITの便利用途など直ぐに役立つ知見を発信してきます!

getoptsでハマったこと

オプション解析getoptsではまったこと

1,オプションの引数が受け取れない・$OPTARGに値が入らない

while getopts a:b:c OPT
do
    case $OPT in
        "a" ) echo "$OPTARG"
;; "b" ) echo "$OPTARG"
;;
"c" ) echo "$OPTARG"
;;
esac done
上記の場合、a,bには$OPTARGの値が入るがcには入らない。
× while getopts a:b:c OPT → ○ while getopts a:b:c: OPT
:コロンを横に付けることによって引数が必須になるっぽい。

2,getoptsを二回使う時

while getopts a:b: OPT
do
    case $OPT in
        "a" ) continue;;
        "b" ) echo "$OPTARG";;
    esac
done
while getopts a:b: OPT
do
    case $OPT in
        "a" ) echo "$OPTARG";;
        "b" ) echo "$OPTARG";;
    esac
done
上記のように二回使うとgetoptsが実行されない。
while getopts a:b: OPT
do
    case $OPT in
        "a" ) continue;;
        "b" ) echo "$OPTARG";;
    esac
done
OPTIND=1
while
getopts a:b: OPT do case $OPT in "a" ) echo "$OPTARG";; "b" ) echo "$OPTARG";; esac done
間にOPTIND=1をつけて、ループを戻す必要がある。
OPTINDはループ開始位置を指定できる。

同じことで二回ハマったからメモった^^;