必須オプションあり、ファイルか標準入力を入力とする形のコマンドを自作する際のテンプレ。
#!/bin/bash
# ヘルプ出力関数
usage(){
cat << _EOS_
Usage:
$(basename $0) [-f] <-d data> file
$(basename $0) <-h|--help>
_EOS_
}
# オプション解析で使う変数の初期化
FLAG=0
DATA=""
# オプション解析
OPTS=$(getopt -o "fd:h" -l "help" -- "$@")
[ $? -ne 0 ] && usage >&2 && exit 1
eval set -- "$OPTS"
while :; do
case "$1" in
'-f') FLAG=1; shift;;
'-d') DATA=$2; shift 2;;
'--') shift; break;;
'-h'|'--help')usage; exit 0;;
*) echo "[error] illegal option" >&2; usage >&2; exit 1;;
esac
done
# 必須オプションの確認
[ -z "$DATA" ] && echo "[error] missing option '-d'" >&2 && usage >&2 && exit 1
# 入力を変数に受ける
if [ $# -eq 0 ] && [ ! -t 0 ]; then
INPUT=$(cat -)
elif [ $# -eq 1 ]; then
INPUT=$(cat $1)
else
echo "[error] missing input" >&2
usage >&2
exit 1
fi
# Main
# 以下、メインの処理
更新履歴
- 2015/07/04
getoptのエラー拾うのを忘れてました。
getopt結果を一旦変数に入れるようにして、
[ $? -ne 0 ] && usage >&2 && exit 1
を追加。