】コマンド——オプションを解析する本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルスクリプト内などでオプションを解析する「getopt」コマンドです。});この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルスクリプト内などでオプションを解析する「getopt」コマンドです。短いオプションを解析するスクリプト内でオプションを解析する引数付きの短いオプションを解析するシェルスクリプトで応用するgetoptコマンドとは?「getopt」は、シェルスクリプト内などでオプションを解析するコマンドです。自作のシェルスクリプトで「-a」のような「ハイフン+アルファベット1文字」のオプションを扱う際に便利です。ファイル名」のように引数を取るオプションも解析できます。似た名前で用途も同じ「getopts」コマンドとはどこが異なるのでしょうか(連載第378回)。getoptsコマンドはbashのビルトインコマンドです。getoptsコマンドでは、「--」から始まるロングオプションを解析できません。getoptコマンドは外部コマンド(/usr/bin/getopt)であり、ロングオプションの解析も可能です。18などに収録されているGNU版(util-linuxパッケージ収録、※1)の他に、macOSなどに収録されているBSD版が存在します。BSD版のgetoptは空白や特殊記号を含む引数をうまく扱えないという問題があるので注意してください(※2)。getoptコマンド以外の手段を検討した方がよいかもしれません。8版)のgetoptコマンドを使用しています。--verion」を実行する。BSD版のmanには、この問題の解決が難しいことを次のように記している。FreeBSD.」この他、オプションを解析する際には、引数を1つずらす「shift」コマンドを使うことも可能です。]は省略可能な引数を示しています。シェルによってエスケープの処理が異なるため、bash(デフォルト)以外のシェルスクリプトでgetoptコマンドを使用する場合に指定する。zshmodules参照)で長いオプションを解析可能。引数」で、引数の部分を解析した結果を表示します(画面1)。「-o」を使うと、引数の引用符を考慮します。abc」のようにします。画面1の最初のコマンドラインでは、短いオプションとして「-a」「-b」「-c」を使うように指定(abc)しています。s2"」を入力した場合、どのように解析するのかが分かります。出力にある「--」はオプションと引数の区切りを意味しています。s2"」と入力した場合でも、解析結果が多少異なっていることが分かります。これは「-o」を使ったことで、オプションの引数で使用している引用符を考慮するようになったためです。指定していないオプションを入力した場合、エラーメッセージを表示します(画面2)。ここで「-q」を指定すると、エラーメッセージを出力しません。指定していないオプションを入力したところ目次に戻るスクリプト内でオプションを解析するスクリプト内でgetoptコマンドを使用した場合、getoptコマンドの実行結果を変数に保存し、その変数を利用するという形になります。"$@"`」で、コマンドラインから受け取った内容を解析し、その結果を変数「OPTIONS」に保存しています。"$OPTIONS"」で、変数「OPTIONS」の内容、つまり解析結果をコマンドラインから受け取ったものとして、while文を実行しています。このようなwhile文の使い方については「シェルスクリプトに挑戦しよう(15)」の「引数を順番に処理する」を参照してください。shiftdoneスクリプト1(opt4.sh)opt4.shを実行した結果は画面3の通りです。無効なオプション」というメッセージを表示してしまいます。「$0」には実行時のコマンド名(ここではシェルスクリプト名)が入っています。$0`」のようにしますが、「``」の中で使用したいので、「$()」を使うとよいでしょう。具体的には次のように冒頭部分を修正します。実行すると先ほどのメッセージを改善できました(画面4)。ファイル名」のように、オプションに続いて引数を使いたい場合は、オプション文字列の該当する文字の後ろに「:」を付けます(画面5)。「:」を使うと引数に相当する文字列を必ず探し出して解析するため、意図とは異なった動作になる場合があります(画面6)。「引数があってもなくてもよい」としたい場合は長いオプションを使用するとよいでしょう(連載第380回)。s2"」を入力した場合にどのように解析するかを確認しています。2番目のコマンドラインも同様です。3番目のコマンドラインではわざと「-b」を指定していません。いずれも意図通りの結果となりました。オプションを引数だと解析してしまった画面6では意図とは異なった解析結果になりました。「-bc」を「-a」の引数と見なしています。これは引数付きと指定したオプション(-a)の次の文字列を、必ずオプションの引数として扱うためです。設定を有効にする必要があります。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。