bashでの簡易な引数処理
よく出てくるのでメモ。
$#
実行時に指定された引数の数を取得する。
引数・オプションの有無を判別できます。
# nargs.sh if [ $# -ne 0 ]; then echo "$# options" else echo "no option" fi # $ ./nargs.sh 0 1 2 # 3 options # $ ./nargs.sh # no option
shift [N]
引数をN個左シフトする(省略時N=1)。
先頭の引数は$1
に格納される。
$#
、shift
、while
やfor
ループを組み合わせて、引数を先頭から順番に処理することができます。
# shiftarg.sh while [ $# -ne 0 ]; do echo -n $1 shift done # $ ./shiftarg.sh 0 1 2 # 0 # 1 # 2
case
との組み合わせ
上記引数の順序処理とcase
による条件分岐を組み合わせれば、引数・オプションの簡易な解析が可能です。
# parse.sh while [ $# -ne 0 ]; do case $1 in -o|--longo) shift # オプションつき引数:シフトして次の引数を処理する echo "option with argument: "$1 ;; -[Yy]) echo $1" option" ;; *) # 引数:上記オプションにマッチしない echo "argument: "$1 ;; esac shift done # $ ./parse.sh 0 -o 1 --longo 2 -y -Y # argument: 0 # option with argument: 1 # option with argument: 2 # -y option # -Y option
エラーや例外の処理までは対処しない方針で、あしからず。