私は、bashスクリプトがオプションとスイッチ(ロングオプションとショート-oフォームの両方)を処理できるように、getopt
(getops
ではなく)を使用しています。getopt無効なオプションを無効にする
無効なオプションをトラップして処理することができます。通常、ユーザーはcmd --help
を試してからスクリプトを終了する必要があります。 「: - 『X』に無効なオプションをgetoptは」ここ
シングは、無効なオプションは、それ自体のようなメッセージを出力しているgetoptは、によって捕捉されていますパラメータ:
set -- $(getopt -o $SHORT_OPTIONS -l $LONG_OPTIONS -- "[email protected]")
ここで、$ LONG_OPTIONSと$ SHORT_OPTIONSの両方は、カンマ区切りのオプションリストです。ここで
は、私はオプションを処理扱う方法は次のとおりです。
while [ $# -gt 0 ]
do
case "$1" in
-h|--help)
cat <<END_HELP_OUTPUT
Help
----
Usage: ./cmd.sh
END_HELP_OUTPUT
shift;
exit
;;
--opt1)
FLAG1=true
shift
;;
--opt2)
FLAG2=true
shift
;;
--)
shift
break
;;
*)
echo "Option $1 is not a valid option."
echo "Try './cmd.sh --help for more information."
shift
exit
;;
esac
done
getopt -q
は出力を抑制しますが、case
ステートメント内の私のトラップ方式は、まだ私が期待するものを行うことができません。代わりに、無効な引数にもかかわらず、プログラムはただ実行します。
*)に達しましたか? – jarno
@jarno 'case'文と' getopt'呼び出しの間に不一致があると、そこに捕捉されます。それは単に守備的なプログラミングです。 – l0b0