シェルスクリプトで引数解析をするテンプレート

1 min read読了の目安(約700字

何を使うのか

getoptsとかありますが、ロングオプションが使えて高機能なgetoptを使います。
GNU版とBSD版で仕様に違いがあるらしいですが、GNU版に準拠します。

テンプレート

_usage() {
    echo "usage"
    echo "  -a | --arg <str>"
    echo "  -h | --help         Show this message and exit"
}

ARGUMENT="${@}"
option_short="a:dh"
option_long="arg:,debug,help"

OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- ${ARGUMENT})
[[ ${?} != 0 ]] && exit 1
unset option_short option_long
eval set -- "${OPT}"
while :; do
    case ${1} in
        -a | --arg)
	    arg="${2}"
	    shift 2
	    ;;
        -h | --help)
            _usage
            shift 1
	    exit 0
            ;;
        --)
            shift
            break
            ;;
        *)
	    echo "Unknows options ${1}" >&2
            exit 1
            ;;
    esac
done