そこで、まずは練習として、前に書いたテンプレート(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 件のコメント:
コメントを投稿