コマンドライン引数を解析するループがあります。 -dまたは-b引数にパラメータが指定されていれば、すべてうまく動作します。しかし、パラメータなしで-dまたは-bを渡すと、スクリプトは無限ループに入ります。Bash引数の解析ロジックが無限ループに入ります
# Parse command line input
while [ "$#" -gt 0 ]; do
case "$1" in
-d) DOMAIN="$2"; shift 2;;
-b) BITS="$2"; shift 2;;
*) die "unrecognized argument: $1"
esac
done
空のパラメータでエラーをスローするにはどうすればよいですか?
引数が単一文字の場合は、独自のものを使う代わりに['getopts'](https://www.gnu.org/software/bash/manual/bashref.html#index-getopts)を使うことができます。 –
いくつかのフラグオプション(引数をとらない)があった場合には、 'case'の中に' shift 2'ではなく 'shift'と' esac'の後に '完了しました。フラグオプションはシフトを一切必要としません。一度に1つの引数をシフトするので、引数なしの '-b'を取り除くので、ループは終了します。つまり、getoptsの答えはより良い長期的な選択です。アドホックなソリューションは、アドホックなバグを取得します - あなたの無限ループ問題を目撃してください。 –