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_ind
0
0
また、シェル&&
と||
演算子には同じ優先順位なのでa && bb || c && d
動作はと似ています( (a && bb) || c) && d
が、おそらく望むものではないかもしれません。
]
したがって、/の前にターミネータを追加し、コマンドを手動でグループ化する必要があります。&&
||
if { [ ... ] && [ ... ]; } ||
{ [ ... ] && [ ... ] && [ ... ]; }; then ...
あるいは、最後の手間は必要ありませんが、;
サブシェルを起動する括弧を使用すると、パフォーマンスが低下します。
if ( [ ... ] && [ ... ] ) ||
( [ ... ] && [ ... ] && [ ... ] ); then ...
[[
または、(Bash / ksh / zshで)テストを有効にします。はいシェル構文はさまざまな規則で機能し、&&
/をサポートします||
。
望むより: