そこで、まずは練習として、前に書いたテンプレート(getoptを使う版)を拡張して、ロングオプションに対応してみました。
#!/bin/bash
#
# getopt-long-template.bash (use getopt utility)
#
export LANG=C
usage_exit() {
echo "Usage: getopt-long-template.bash [-a] [-d dir] [--extra] [--file f] item1 item2 ..." 1>&2
exit 1
}
#
# Options
#
echo "$@" ####DEBUG
GETOPT=`getopt -q -o ad:h -l extra,file: -- "$@"` ; [ $? != 0 ] && usage_exit
eval set -- "$GETOPT"
echo "$@" ####DEBUG
while true
do
case $1 in
-a) A_FLAG=yes ; shift
;;
-d) OUTDIR=$2 ; shift 2
;;
--extra) EXTRA_F=yes ; shift
;;
--file) OUTFILE=$2 ; shift 2
;;
-h) usage_exit
;;
--) shift ; break
;;
*) usage_exit
;;
esac
done
#
echo \$#=$# ####DEBUG
echo \$@="$@" ####DEBUG
echo A_FLAG=$A_FLAG ####DEBUG
echo OUTDIR=$OUTDIR ####DEBUG
echo EXTRA_F=$EXTRA_F ####DEBUG
echo OUTFILE=$OUTFILE ####DEBUG
実行結果は次のとおりです。--extra オプションと --file f オプションを解釈できるようになりました。
# ./getopt-long-template.bash item1 item2 -d dir --extra --file f item1 item2 -d dir --extra --file f -d dir --extra --file f -- item1 item2 $#=2 $@=item1 item2 A_FLAG= OUTDIR=dir EXTRA_F=yes OUTFILE=f
下記も参照ください。
オプション解析(getoptsとgetoptの使い分け)

0 件のコメント:
コメントを投稿