いつも作るシェルスクリプトをテンプレート化してみた(オプション、引数チェック)
bashでシェルスクリプトを書くと、オプションや引数チェックのロジックはいつもお決まりになるので、今回テンプレート化してみた。オプションと引数を解析して変数に格納、もし想定外のパラメータが入力された場合は使い方を標準エラー出力し、異常終了(exit 1)する、というもの。
作ったテンプレートはこちら。
template.sh
#!/bin/bash
# usage
cmdname=`basename $0`
function usage()
{
echo "Usage: ${cmdname} [-t] [-f file] arg1 arg2" 1>&2
}
# check options
topt=FALSE
while getopts tf: option
do
case ${option} in
t)
topt=TRUE
;;
f)
file=${OPTARG}
;;
*)
usage
exit 1
;;
esac
done
shift $((OPTIND - 1))
# check arguments
if [ $# -ne 2 ]; then
usage
exit 1
fi
arg1="$1"
arg2="$2"
# main
echo "arg1=[${arg1}], arg2=[${arg2}], topt=[${topt}], file=[${file}]"
exit 0これを叩いてみるとこんなかんじ。
引数のみ
$ ./template.sh aaa bbb arg1=[aaa], arg2=[bbb], topt=[FALSE], file=[]
パラメータ付き
$ ./template.sh -t -f file aaa bbb arg1=[aaa], arg2=[bbb], topt=[TRUE], file=[file]
不正な入力の場合
$ ./template.sh Usage: template.sh [-t] [-f file] arg1 arg2 $ ./template.sh aaa bbb ccc Usage: template.sh [-t] [-f file] arg1 arg2 $ ./template.sh -f aaa bbb Usage: template.sh [-t] [-f file] arg1 arg2
以上