1. ホーム
  2. shell

[解決済み】シェルスクリプトで期待される条件付き二項演算子

2022-02-23 19:48:04

質問

ログファイルに保存されている文字列の値を比較する簡単なプログラムを試していたのですが、以下のようなエラーが発生しました。

#!/bin/bash

check_val1="successful"
check_val2="completed"
log="/compile.log"

if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]];
then
        echo "No Error"
else
        echo "Error"
fi


Error:

./simple.sh: line 7: conditional binary operator expected
./simple.sh: line 7: syntax error near `$check_val1'
./simple.sh: line 7: `if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]];'

解決方法は?

問題はあなたの if [[...]] 式で、2つの grep コマンドを使用し、コマンド置換を使用しない場合、すなわち $(grep 'pattern' file) .

しかし、その代わりに

if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]]; then

を使用することができます。 grep -q :

if grep -q -e "$check_val1" -e "$check_val2" "$log"; then

のとおりです。 man grep :

-q, --quiet, --silent
         Quiet mode: suppress normal output.  grep will only search a file until a match 
         has been found, making searches potentially less expensive.