Bash getoptsエラー処理

Bash getoptsエラー処理

Getoptsのプレイ中に発生したエラーです。以下は、スクリプトの実行時に3つのオプションを簡単に聞くために使用したコードの一部です。

while getopts "vcn" opt; do
  case $opt in
     v) echo "Print V" ;;
     c) echo "Print C" ;;
     n) echo "Print N" ;;
     *) echo "Invalid Option" && exit 1 ;;
  esac 
done

*)オプションを使用してエラーを処理しましたが、このスクリプトを実行すると次のエラーが発生する理由がわかりません。エラーハンドラは以下のように動作しますが、プログラムされていないエラーが発生します。

端末のエラーメッセージ

答え1

より参考書:

getoptsエラーは2つの方法で報告できます。最初の文字が次のような場合オプションの文字列コロンであり、自動エラー報告を使用します。通常の操作では、無効なオプションまたは欠落しているオプション引数が見つかると診断メッセージが表示されます。

無効なオプションが表示された場合は、getopts次のように入力してください。?名前静かでない場合は、エラーメッセージを印刷して設定をキャンセルしてくださいOPTARG自動の場合、getopts見つかったオプション文字はここに配置され、OPTARG診断メッセージは印刷されません。

あなたに関する限り、オプションの文字列はいvcngetoptsエラーメッセージは自動的に印刷されます。無効にするには代わりにを使用してくださいgetopts :vcn

またあなたの:

echo "Invalid Option" && exit 1

しなければならない:

echo>&2 "Invalid Option"; exit 1

それは:

  • エラーは標準出力ではなく標準エラー(ファイル記述子2)に移動する必要があります。
  • そして成功だけするのではなく、条件なしでやめなければならないecho

関連情報