getopts コマンド

目的

コマンド・ラインの引数を処理し、有効なオプションを検査します。

構文

getopts OptionString 名前 [ 引数 ...]

説明

getopts コマンドは、Korn/POSIX シェル組み込みコマンドの 1 つで、パラメーターのリストからオプションとオプション引数を検索します。 オプションは、+ (正符号) または - (負符号) で始まり、その後ろに 1 文字が続きます。 + または - で始まらないオプションは、OptionString を終了します。 getopts コマンドは、起動されるたびに、次のオプションの値を Name に設定し、処理対象の次の引数のインデックスをシェル変数 OPTIND に設定します。 シェルが呼び出されるたびに、 オPTIND は 1 に初期設定されます。 オプションが +で始まる場合、 名前の値の前に + が付加されます。

OptionString の文字の後ろに : (コロン) を付けると、そのオプションが引数を持つと想定されます。 オプションにオプション引数が必要な場合、getopts コマンドでは、オプション引数を変数 OPTARG に設定します。

OptionString に含まれていないオプション文字が見つかった場合、あるいは見つかったオプションに必要なオプション引数が存在しない場合には、次の処理が行われます。

  • OptionString: (コロン) で始まっていない場合、
    • 名前 は、 ? に設定されます。 (疑問符) 文字に設定されます。
    • _ 翻訳不要 _OPTARG. 設定解除されます。
    • 診断メッセージが標準エラーに書き込まれます。

この状態は、引数が起動側アプリケーションに提供されたという形で検出されたエラーと考えられますが、getopts コマンドの処理上のエラーではありません。上記に述べたように、診断メッセージが書き込まれますが、終了状況はゼロとなります。

  • OptionString: (コロン) で始まる場合、
    • 名前 は、 ? に設定されます。 (疑問符) 文字または必須オプションの欠落を表す : (コロン) 文字に設定されます。
    • _ 翻訳不要 _OPTARG は、見つかったオプション文字に設定されます。
    • 出力は標準エラーに書き込まれません。

以下のいずれかがオプションの終わりを識別します。特殊オプション - -, が、 -または +で始まらない引数を検出したか、エラーを検出した。

オプションの終了時には、次のことが行われます。

  • getopts コマンドは、ゼロより大きい戻り値で終了します。
  • _ 翻訳不要 _OPTARG は、最初の非オプション引数の索引に設定されます。ここで、最初の - - 引数は、それより前にオプション以外の引数がない場合はオプション引数と見なされ、オプション以外の引数がない場合は値 $# + 1 と見なされます。
  • 名前 は、 ? に設定されます。 (疑問符) 文字に設定されます。

パラメーター

項目 説明
OptionString getopts コマンドによって認識されるオプション文字の文字列を指定します。 文字の後ろにコロンが続く場合には、そのオプションが引数を持つと想定されます。引数は、オプションから離して指定しなければなりません。 オプションと引数は、ブランクで区切ります。 OptionString の先頭文字により、オプション文字が不明な場合、またはオプション引数が存在しない場合に、getopts コマンドによって行われる処理が決まります。

注: 疑問符とコロンの文字は、アプリケーションでオプションの文字として使用しないでください。 英数字以外のその他の文字を使用すると、結果は保証されていません。

Name getopts コマンドによって、見つけられたオプション文字に設定されます。
引数 ... ホワイト・スペースで区切られた 1 つ以上の文字列で、getopts コマンドによって、有効なオプションであるかどうかが検査されます。 Argument を省略すると、定位置パラメーターが使用されます。

注: 一般的に、Argumentgetopts コマンドの一部として指定することはありませんが、スクリプトのデバッグ時に役に立つ場合があります。

終了状況

このコマンドは、以下の終了値を戻します。

項目 説明
0 OptionString によって指定されたオプション、または指定されなかったオプションが検出されました。
>0 オプションの終了、あるいはエラーが発生しました。

  1. 以下の getopts コマンドは、以下を指定します。a,bおよびcは有効なオプションであり, そのオプションは,aおよびc引数があります:
    getopts a:bc: OPT
  2. 以下の getopts コマンドは、以下を指定します。a,bおよびc有効なオプションであることを示します。aおよびb引数を持ち、 getopts が以下の値を設定します。OPT? へ コマンド行で未定義のオプションが検出された場合:
    getopts :a:b:c OPT
  3. 以下のスクリプトは、引数を解析して表示します。
    aflag=
    bflag=
     
    while getopts ab: name
    do
                case $name in
                a)     aflag=1;;
                b)     bflag=1
                              bval="$OPTARG";;
                ?)     printf "Usage: %s: [-a] [-b value] args\n" $0
                              exit 2;;
               esac
    done
     
    if [ ! -z "$aflag" ]; then
               printf "Option -a specified\n"
    fi
     
    if [ ! -z "$bflag" ]; then
               printf 'Option -b "%s" specified\n' "$bval"
    fi
     
    shift $(($OPTIND -1))
    printf "Remaining arguments are: %s\n" "$*"