if条件でエラーメッセージを/ dev / nullにリダイレクトする[閉じる]

if条件でエラーメッセージを/ dev / nullにリダイレクトする[閉じる]

私は次のif文を持っています:

if [ "$sourcelast" = "$maxhostlast" ] || [ "$sourcelast" = "$minhostlast" ] || [ "$sourcelast" < "$maxhostlast" ] || [ "$sourcelast" > "$minhostlast" ] ;then ... fi

/dev/null今、エラーが発生するたびにエラーメッセージを送信したいと思います。

どうすればいいですか?

答え1

続行する前に構文を変更する必要があります。以前のテストの比較演算子ではなく><シェルリダイレクト演算子です[...]\<一部のシェルではこれをエスケープして\>文字列比較を保持できます。、または新しいテストを使用してください[[...]]

この場合、数値比較をしたいように聞こえるので、標準演算子、、、、-lt-le使用-gtする必要があります-ge

if [ "$sourcelast" = "$maxhostlast" ]   ||
   [ "$sourcelast" = "$minhostlast" ]   ||
   [ "$sourcelast" -lt "$maxhostlast" ] ||
   [ "$sourcelast" -gt "$minhostlast" ]
then
  : "Do something"
fi

すべての条件ですべてのエラーメッセージをリダイレクトするには、そのメッセージをサブシェルにラップします。

if (
     [ "$sourcelast" = "$maxhostlast" ]   ||
     [ "$sourcelast" = "$minhostlast" ]   ||
     [ "$sourcelast" -lt "$maxhostlast" ] ||
     [ "$sourcelast" -gt "$minhostlast" ]
   ) 2>/dev/null
then
  : "Do something"
fi

関連情報