尝试在 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这样的内置 shell,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

相关内容