blog

技術|Bashシェルスクリプトでコマンドラインオプションを解析する方法

シェルスクリプトにオプションを追加します。...

Oct 24, 2025 · 4 min. read
シェア

シェルスクリプトにオプションを追加します。

ターミナルコマンドには通常、ユーザーがコマンドの実行方法を変更できるオプションがあります。オプションはコマンドラインインターフェイスで規定されており、初期の UNIX アプリケーションによって確立された長年の慣習です。

Bashでのオプション解析

Bashでオプションを解析する方法は、シェルスクリプトに渡されたすべての引数をループして、それがオプションかどうかを判断し、次の引数に移るというものです。この処理をオプションがなくなるまで繰り返します。

  1. #!/bin/bash
  2. while [ True ]; do
  3. if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
  4.     ALPHA=1
  5.     shift 1
  6.     break
  7. echo $ALPHA

このコードでは、すべての引数を処理するまでループし続けるwhileループを作成しました。if文は、最初の位置で見つかった引数を--alphaまたは-aでマッチさせようとします。

shiftキーワードは、すべての引数を1ビットずつシフトさせ、2番目の引数を1番目の引数に移動させます。

スクリプトの最後には、$ALPHA 値がターミナルに出力されます。

このスクリプトをテストしてください。

  1. $ bash ./test.sh --alpha
  2. $ bash ./test.sh
  3. $ bash ./test.sh -a

ご覧の通り、オプションは正しく検出されています。

Bashでのパラメータ検出

しかし、上記のスクリプトにはもう一つ問題があります。

  1. $ bash ./test.sh --alpha foo

オプション名以外のパラメータを取得するには、残りのパラメータを Bash 配列 ダンプします。

  1. #!/bin/bash
  2. while [ True ]; do
  3. if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
  4.     ALPHA=1
  5.     shift 1
  6.     break
  7. echo $ALPHA
  8. ARG=( "${@}" )
  9. for i in ${ARG[@]}; do
  10.     echo $i

新しいバージョンのスクリプトをテストしてください:

  1. $ bash ./test.sh --alpha foo
  2. $ bash ./test.sh foo
  3. $ bash ./test.sh --alpha foo bar

を参照してください。

パラメータを渡す必要があるオプションは数多くあります。例えば、ユーザーが色やグラフィックスの解像度などのプロパティを設定できるようにしたり、アプリケーションにカスタムプロファイルを指定したりすることができます。

Bashでこれを行うには、ブールスイッチのようにshiftキーワードを使用することはできますが、引数を1つではなく2つシフトする必要があります。

  1. #!/bin/bash
  2. while [ True ]; do
  3. if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
  4.     ALPHA=1
  5.     shift 1
  6. elif [ "$1" = "--config" -o "$1" = "-c" ]; then
  7.     CONFIG=$2
  8.     shift 2
  9.     break
  10. echo $ALPHA
  11. echo $CONFIG
  12. ARG=( "${@}" )
  13. for i in ${ARG[@]}; do
  14.     echo $i

このコードでは、elif句を追加して、各パラメーターを-configと-cと比較しています。もし一致すれば、CONFIGという変数の値が次の引数の値に設定されます。すべての引数は、-configまたは-cをスキップするために1つ、その引数をスキップするために1つ、合計2ビットずつシフトされます。前のセクションと同様に、ループはマッチする引数がなくなるまで繰り返されます。

新しいバージョンのスクリプトのテストです:

  1. $ bash ./test.sh --config my.conf foo bar
  2. my.conf
  3. $ bash ./test.sh -a --config my.conf baz
  4. my.conf

Bashはオプションの解析を簡単にします。

Bashでオプションを解析する方法は他にもあります。case文やgetoptコマンドを代わりに使うこともできます。どの方法であれ、ユーザーにオプションを与えることはアプリケーションの重要な機能です。

Read next