不足している演算子の問題

不足している演算子の問題

If条件でOR論理を実行しようとしています。

condition 1 => warning ="" and err_code !=1
OR
condition 2 => threshold =1 and threshold_load_ind=Y and err_code!=1

これはオペレータレベルで疑問を提起する。 ifコードから欠落している内容

if [  "$warn" != ""  &&  "$err_ind" != 1  ] || [  $thres_err_ind == 1   &&  $thres_load_ind == "Y"  &&  $err_ind != 1  ];then

860行のエラーコード

[860]: [: ']' missing
[860]: [: ']' missing

ベストアンサー1

[(面白い名前を持つ)一般的なコマンドです。いいえシェル構文の一部。混乱することは、構文要素のように見えるように]最後の引数として扱われることを期待しています。しかし、&&とは||シェル構文の一部であるため、コマンドを区別します。したがって、ifステートメントには、次のようにラベル付けされた5つのコマンドがあります。

if [ "$warn" != ""  && "$err_ind" != 1  ] ||
   1^^^^^^^^^^^^^^^    2^^^^^^^^^^^^^^^^^

   [ $thres_err_ind == 1 && $thres_load_ind == "Y" && $err_ind != 1 ];
   3^^^^^^^^^^^^^^^^^^^^    4^^^^^^^^^^^^^^^^^^^^^    5^^^^^^^^^^^^^^

最初のランタイムは、[空の文字列の内容を含む3つのパラメータを使用します。いいえ、だから命令が文句を言った。以下のコマンドは失敗のために実行されませんが、それ以降のコマンドは同様の理由で実行され、文句を言います。 (他の人が実行すると、変数がコマンドの場所にあるため、「コマンドが見つかりません」というエラーが発生する可能性があります。たとえば、含まれている場合、シェルはコマンドを実行しようとします。)$warn!=][&&||err_ind00

また、シェル&&||演算子には同じ優先順位なのでa && bb || c && d動作はと似ています( (a && bb) || c) && dが、おそらく望むものではないかもしれません。

]したがって、/の前にターミネータを追加し、コマンドを手動でグループ化する必要があります。&&||

if { [ ... ] && [ ... ]; } ||
   { [ ... ] && [ ... ] && [ ... ]; }; then ...

あるいは、最後の手間は必要ありませんが、;サブシェルを起動する括弧を使用すると、パフォーマンスが低下します。

if ( [ ... ] && [ ... ] ) ||
   ( [ ... ] && [ ... ] && [ ... ] ); then ...

[[または、(Bash / ksh / zshで)テストを有効にします。はいシェル構文はさまざまな規則で機能し、&&/をサポートします||

望むより:

おすすめ記事