Bash でのコマンドライン引数の解析
Fumbani Banda
2023年1月30日
このチュートリアルでは、フラグ、ループ構造、およびシフト演算子を使用して、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