getoptsコマンド
- オプションを解析する
- エラーメッセージを表示しない
- 引数付きのオプションを使用する
getoptsコマンド概要
「getopts」は、bashのシェルスクリプト内でオプションを解析する際に役立つコマンドです。自作のシェルスクリプトで「-a」のような「ハイフン+アルファベット1文字」のオプションを扱う際に便利です。「-f ファイル名」のように引数を取るオプションも解析できます。
例えばこういうのです
$ head -n10
文字列を渡すこともできます
$ grep -f wordlist.txt
ということで、自作のスクリプトでこういう事ができるわけです。
$ myScript.sh -n10 -f addressList.txt
- ヒント
- getoptsとよく似た名前で用途も同じ「getopt」コマンド(/usr/bin/getopt)があります。getoptコマンドはgetoptsとは異なり、「–」から始まるロングオプションも扱うことができます。
getoptsコマンドの書式
getopts オプション文字列 変数名
getoptsコマンドの主なオプション
getoptsにはオプションはありません。なお、オプション文字列の先頭に「:」記号を入れるかどうかによって、エラーメッセージ表示の有無を変更できます。
オプション | 意味 |
---|---|
: | エラーメッセージの表示の有無 |
- ヒント
- 一覧のオプションは一部です。 $ man getopts などで、getoptsの使い方を確認してください。
getoptsコマンド詳細説明
オプションを解析する
オプション「-a」「-b」「-c」を使用し、それぞれのオプションに応じてメッセージを表示します。
#!/bin/bash
while getopts abc OPT; do
case $OPT in
a) echo "[-a] が指定された";;
b) echo "[-b] が指定された";;
c) echo "[-c] が指定された";;
*) echo "該当なし OPT=$OPT ";;
esac
done
while getopts abc OPT; do
の abc は、オプションの種類が a,b,cの3種類あることを明示的に指定しています。
OPTは $OPT変数で、 a,b,cがそれぞれ順に代入されます。
$ bash getopts.sh -a
[-a] が指定された
$ bash getopts.sh -ab
[-a] が指定された
[-b] が指定された
$ bash getopts.sh -a -b
[-a] が指定された
[-b] が指定された
$ bash getopts.sh -abc -d
[-a] が指定された
[-b] が指定された
[-c] が指定された
$ bash getopts.sh -abc -d
[-a] が指定された
[-b] が指定された
[-c] が指定された
getopts.sh: 不正なオプションです -- d
該当なし OPT=?
以下のオプションは用意されていないことからエラー表示となります。
$ bash getopts.sh -abc -d
[-a] が指定された
[-b] が指定された
[-c] が指定された
getopts.sh: 不正なオプションです -- d
該当なし OPT=?
エラーメッセージを表示しない
getoptsに指定していないオプションを使用すると、画面1のように「不正なオプションです – d」、あるいは「illegal option – d」のようなメッセージを表示します。
このようなgetoptsのエラーメッセージを表示したくない場合は、「getopts :abc OPT」のように、オプション文字列の先頭に「:」記号を入れます。
#!/bin/bash
while getopts :abc OPT; do
case $OPT in
a) echo "[-a] が指定された";;
b) echo "[-b] が指定された";;
c) echo "[-c] が指定された";;
*) echo "該当なし OPT=$OPT ";;
esac
done
エラーが表示される getopts01.sh
$ bash getopts01.sh -abc -d
[-a] が指定された
[-b] が指定された
[-c] が指定された
getopts01: 不正なオプションです -- d
該当なし OPT=?
エラーが表示されない getopts02.sh
$ bash getopts02.sh -abc -d
[-a] が指定された
[-b] が指定された
[-c] が指定された
該当なし OPT=?
引数付きのオプションを使用する
「-f ファイル名」のように、引数を取るオプションを解析したい場合は、オプション文字の後に「:」記号を付けます。オプションの引数は、組み込み変数「OPTARG」で参照できます。
#!/bin/bash
while getopts :a:bc: OPT; do
case $OPT in
a) echo "[-a] が指定された(引数=$OPTARG)";;
b) echo "[-b] が指定された";;
c) echo "[-c] が指定された(引数=$OPTARG)";;
:) echo "$OPTARGに引数が指定されていません";;
?) echo "$OPTARGは定義されていません";;
esac
done
実行結果
$ bash getopts03.sh -a filename -b -c 100
[-a] が指定された 引数=filename
[-b] が指定された
[-c] が指定された 引数=100
$
解説
:a:bc: について
:a エラー表示をしないというオプションとなります。
a: -a が指定された場合は引数に数値または文字列を受け取ります。
c: -c が指定された場合は引数に数値または文字列を受け取ります。
- ヒント
- アホか。というくらいまぎらわしくてわかりにくい設計で笑えます。一体どこの誰がこんなわかりにくい仕様にしたのでしょう。
- ヒント
- とにかくシェルクスクリプトで起動パラメータを設定することができました。便利なツールをたくさん作ってください。では