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
診断メッセージは印刷されません。
あなたに関する限り、オプションの文字列はいvcn
、getopts
エラーメッセージは自動的に印刷されます。無効にするには代わりにを使用してくださいgetopts :vcn
。
またあなたの:
echo "Invalid Option" && exit 1
しなければならない:
echo>&2 "Invalid Option"; exit 1
それは:
- エラーは標準出力ではなく標準エラー(ファイル記述子2)に移動する必要があります。
- そして成功だけするのではなく、条件なしでやめなければならない
echo
。