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

관련 정보