getopts コマンド

目的

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

構文

getopts OptionString Name [ Argument ...]

説明

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

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

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

  • OptionString が、 : (コロン) で始まらない場合
    • Name が不明のオプションを表す ? (疑問符) 文字に設定されます。
    • OPTARG が設定解除されます。
    • 診断メッセージが標準エラーに書き出されます。

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

  • OptionString が、: (コロン) で始まる場合
    • Name が不明のオプションを表す ? (疑問符) 文字または必須オプションの欠落を表す : (コロン) 文字に設定されます。
    • OPTARG は、見つかったオプションに設定されます。
    • 標準エラーには何も出力されません。

オプションが終了するのは、特殊なオプション -- が指定されたとき、- または + で始まらない引数が検出されたとき、エラーが見つかったときのいずれかです。

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

  • getopts コマンドは、ゼロより大きい戻り値を伴って終了します。
  • OPTARG は、 最初のオプション引数以外のインデックスに設定されます。 この場合の最初の -- 引数は、 その前に非オプション引数が他にない場合は、オプション引数と見なされ、 非オプション引数がまったくない場合は値 $#+1 と見なされます。
  • Name が不明のオプションを表す ? (疑問符) 文字に設定されます。

パラメーター

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

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

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

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

終了状況

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

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

  1. 次の getopts コマンドは、 ab、 および c が有効なオプションであり、 オプション ac に、 引数があることを示します。
    
    getopts a:bc: OPT
  2. 次の getopts コマンドでは、 abc が有効なオプションであること、 オプション ab が引数を持つこと、 コマンド・ラインに未定義のオプションが存在するときには、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" "$*"