PROGRAM SHELL

初心者のためのbash超入門【第18回 コマンドラインオプション】

 

 

はてな

コマンドラインオプションとは何でしょうか?

もっと詳しく

コマンドラインオプションとは、実行コマンドで良く使われる「ls -l」の-lように-(ハイフン)にオプション文字をつけたものです。
bashでは組み込みコマンドのgetoptsを使うと、楽にコマンドラインオプションが扱えます。

 

シェルスクリプトでコマンドラインオプションを使おう

 

getoptsの基本的な使い方

getoptsの基本的な使い方は、以下のようになります。
オプション文字は、-(ハイフン)のあとにつける文字を定義します。
変数名で定義した変数には、コマンドラインオプションで渡されたオプション文字が入ります。

getopts オプション文字 変数名

注意ポイント

オプション文字は、:(コロン)と?(クエスチョンマーク)は使えません。

getoptsを使ったもっとも簡単なシェルスクリプトは、以下のようになります。

-aをつけて実行すると「OK」が表示され、-a以外をつけて実行するとエラーメッセージと「NG」が表示されます。

 実行例
$ ./getopts1.sh -a
OK
 
$ ./getopts1.sh -b
./getopts1.sh: illegal option -- b
NG

 

エラーメッセージを表示しない

上記の例では、オプション文字にa以外を使うと、エラーメッセージが表示されます。
エラーメッセージを表示したくない場合は、オプション文字の先頭に:(コロン)をつけます。

getopts :オプション文字 変数名

エラーメッセージを表示させないシェルスクリプトは、以下のようになります。

-a以外をつけて実行しても、エラーメッセージは表示されません。

 実行例
$ ./getopts2.sh -b
NG

 

コマンドラインオプションに引数を渡す

コマンドラインオプションに引数を渡す場合は、オプション文字の後ろに:(コロン)をつけます。
渡された引数は、組み込み変数OPTARGに入ります。

getopts オプション文字: 変数名

コマンドラインオプションに引数を渡したシェルスクリプトは、以下のようになります。

組み込み変数OPTARGに、-aの引数が入っています。

 実行例
$ ./getopts3.sh -a AAA
OK
AAA

 

オプション文字を複数使う

オプション文字は、複数定義することができます。
区切り文字や空白などは入れず、オプション文字を連続して記述します。

getopts オプション文字1オプション文字2... 変数名

複数のオプション文字を定義した場合は、while文を使って渡されたオプション文字を順番に参照します。
定義されたオプション文字以外が渡された場合は、変数optに?(クエスチョンマーク)が入ります。
?は特殊文字(1文字のワイルドカード)なので、?の前に\(バックスラッシュ)を入れてエスケープします。
こうすることで、case文は「?」という通常の文字として認識するようになります。

オプション文字が複数ある場合は、-abcのようにまとめてオプション文字を書くことができます。

 実行例
$ ./getopts4.sh -b
オプションはbです
 
$ ./getopts4.sh -abc
オプションはaです
オプションはbです
オプションはcです
 
$ ./getopts4.sh -d
./getopts4.sh: illegal option -- d
オプションが違います

 

getoptsの一般的な使い方

最後に、実際に良く使われるgetoptsの使い方です。処理の条件は以下の通りです。

処理条件

  • オプション文字の先頭に:(コロン)をつけて、エラーメッセージを表示させない
  • オプション文字として、a、b、cを使う
  • コマンドラインオプションのaとbは引数を使う

上記の条件にしたがったシェルスクリプトは、以下のようになります。

オプション文字にdは定義されていないので、?(クエスチョンマーク)の条件に入ります。

 実行例
$ ./getopts5.sh -a AAA -b BBB -cd
オプションはaです
AAA
オプションはbです
BBB
オプションはcです
オプションが違います

 

 

-PROGRAM, SHELL