ifステートメントでgrep -v -qを試みると、Bashスクリプトエラーが発生しました。

ifステートメントでgrep -v -qを試みると、Bashスクリプトエラーが発生しました。

読み取った行にその行の記号が含まれていない*ときに操作を実行するスクリプトを作成しようとしています。

私は成功せずに次のことを試しました。

  1. if [ grep -v -q '*' ]これにより、あまりにも多くのパラメータエラーが発生します。

  2. if [ "$(grep -v -q '*')" -eq '0' ];これにより、単項演算子の推定エラーが発生します。

私は何が間違っていましたか?

ベストアンサー1

[ifステートメントは終了状態を生成するすべてを許可するため、orなどのシェル組み込みtestまたはgrepその両方を使用できます。

if [ "$(grep -c '*' file)" = 0 ]
then
  echo 'star symbol not found'
fi

しかし、実際には以下を行う必要はありません。

if ! grep -q '*' file
then
  echo 'star symbol not found'
fi

または:

while read x
do
  if ! grep -q '*' <<eof
$x
eof
  then
    printf '%s does not contain star symbol\n' "$x"
  fi  
done < file

または:

awk '!/\*/ {print $0, "does not contain star symbol"}' file

おすすめ記事