-- bashスクリプトその4 --
シェルスクリプトの引数を可変個数で処理するためには$*ですべての引数を受取り、for 文で1つ1つの引数を処理していきます。
では具体例を見てみましょう。
#!/bin/bash
opmode=0
arga=""
argb=""
for i in $*
do
if [ $opmode == 0 ]
then
case $i in
-a) opmode=1;;
-b) opmode=2;;
esac
elif [ $opmode -gt 0 ]
then
case $opmode in
1) opmode=0; arga=$i; echo "-a arg=$i";;
2) opmode=0; argb=$i; echo "-b arg=$i";;
esac
fi
done
上記の例は、オプション-aで指定される引数と-bで指定される引数を取得する処理です。
opmodeは指定されたオプションを記憶して続く引数を取得するために使用します。arga,argbはそれぞれ-a、-bで指定された引数の内容を保持する変数です。
for文は変数iにin以降で指定されたスペース区切りのワードを1つづつ研り出し、do ~ doneの間に書かれた文で処理します。
if 文でopmodeを判定してオプションが指定された状態か否かを判定しオプションが指定されている(opmodeが0より大きい場合)その値により-aか-bかをcase文で判定しています。
opmodeが0の場合、case文で-aまたは-bが指定された場合、opmodeに値をセットします。もしも-a、-b以外のを処理する場合場 ~) を追加して処理する文字列を追加します。