Bash でのコマンドライン引数の解析

Fumbani Banda 2023年1月30日
  1. Bash での位置パラメータの解析
  2. Bash のフラグを使用した引数の解析
  3. Bash のループ構造を使用した引数の解析
  4. Bash で shift を使用して引数を解析する
Bash でのコマンドライン引数の解析

このチュートリアルでは、フラグ、ループ構造、およびシフト演算子を使用して、bash スクリプトへのコマンドライン引数を位置パラメーターとして解析する方法を示します。

Bash での位置パラメータの解析

位置パラメータは、bash スクリプトに渡される順序でアクセスされます。最初のパラメータは $1 によってアクセスされ、2 番目のパラメータは $2 によってアクセスされます。

echo "I am $1";
echo  "And I live in $2";

2つの位置引数を使用してスクリプトを実行します。

bash positional_args.sh John USA

出力:

I am John
And I live in USA

Bash のフラグを使用した引数の解析

フラグは、各引数の前にハイフン - で始まります。フラグを使用する場合、引数の順序は重要ではありません。

以下のスクリプトでは、getopts が入力からフラグを読み取り、OPTARG がそれを対応する値と照合します。

while getopts n:c: flag

do
    case "${flag}" in
          n) name=${OPTARG};;
          c) country=${OPTARG}
     esac
done
echo "I am $name";
echo  "And I live in $country";

実行:

bash flags.sh -n fumbani  -c Malawi

出力:

I am fumbani
And I live in Malawi

Bash のループ構造を使用した引数の解析

ループ構造は、引数のサイズが事前にわからない場合に役立ちます。$@は、すべての入力パラメーターを含む変数です。for ループはすべての引数を繰り返し処理し、渡された各引数を処理します。

i=1
for arg in "$@"
do
    printf "argument $i: $arg\n"
    i=$((i + 1 ))
done

実行:

bash arguments_loop.sh USA Europe Africa Asia

出力:

argument 1: USA
argument 2: Europe
argument 3: Africa
argument 4: Asia

Bash で shift を使用して引数を解析する

shift 演算子は、シフトされた位置から開始するように引数のインデックスを作成します。この例では、最後に到達するまで引数を 1 だけシフトしています。$# は入力サイズを示し、1 は毎回次の引数を示します。

i=1
max=$#
while (( $i <= $max ))
do
    printf "Argument $i: $1\n"
    i=$((i + 1 ))
    shift 1
done

実行:

bash shift.sh one two three

出力:

Argument 1: one
Argument 2: two
Argument 3: three
著者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub