web-dev-qa-db-ja.com

bashのエラーメッセージで終了します(1行)

エラーで終了することはできますか?without using ifステートメントを使用して?

[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"

もちろん、||の右側は機能しません。私が達成しようとしていることをよりよく理解するためです。

実際、メッセージを表示するためだけに、どのERRコードで終了するかは気にしません。

[〜#〜] edit [〜#〜]

これが機能することはわかっていますが、カスタムメッセージの後にnumeric arg requiredが表示されないようにするにはどうすればよいですか?

[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
42
branquito

exitは複数の引数を取りません。必要なメッセージを印刷するには、echoを使用して終了できます。

    [[ $TRESHOLD =~ ^[0-9]+$ ]] || \
     { echo "Threshold must be an integer value!"; exit $ERRCODE; }
52
P.P.

便宜上、関数を使用できます。

function error_exit {
    echo "$1" >&2   ## Send message to stderr. Exclude >&2 if you don't want it that way.
    exit "${2:-1}"  ## Return a code specified by $2 or 1 by default.
}

[[ $TRESHOLD =~ ^[0-9]+$ ]] || error_exit "Threshold must be an integer value!"
23
konsolebox

exitを直接使用することは、スクリプトが他の場所から供給される可能性があるため、注意が必要です。私は代わりにset -eでサブシェルを使用することを好みます(さらにエラーはcoutではなくcerrに入るべきです):

set -e
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
     (>&2 echo "Threshold must be an integer value!"; exit $ERRCODE)
2
noonex