=0 명령을 찾을 수 없습니다.

=0 명령을 찾을 수 없습니다.
grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else    
     exit
fi

오류는 다음과 같습니다

/home/erawson/bin/try1: line 10: =: command not found

답변1

if 문을 로 변경합니다 if [ $CHK -eq 0 ]; then. 대괄호 사이에 공백이 있는지 확인하세요.

변수 CHK도 이와 같이 할당되어야 합니다 CHK=$(echo $?).

스크립트의 모양은 다음과 같습니다.

#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt    
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
        echo "failed"
else
    exit
fi

답변2

이미 지적했듯이 몇 가지 구문 오류가 있습니다. 당신은 또한 결함이 있는 논리를 사용하고 있는 것 같습니다. 종료 상태는 0명령이 실패했음을 의미하는 것이 아니라 성공했음을 의미합니다. 원하는 것이 failed파일을 인쇄하는 것이라면그렇지 않다쿼리 문자열과 일치하면 필요한 것은 다음과 같습니다.

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"

failed파일을 인쇄하고 싶다면성냥문자열은 다음을 사용하십시오.

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"

종료 상태를 저장할 필요가 없으며 if/else 검사도 필요하지 않습니다.

답변3

내가 이해하는 바와 같이, 귀하의 요구 사항은 "::=BEGIN" 문자열을 잡아서 출력을 얻는 경우 "실패"를 에코하고 싶은 것입니다. 맞나요?? 그리고 왜 ";"를 사용했는지 잘 모르겠습니다. if...다시 "then"을 사용했습니다.

다음을 시도해 볼 수 있습니다


if [ -n `grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib` ]
then
        echo "failed"
else
        exit
fi

도움이 되었기를 바랍니다!! (내 가정에 따르면)

답변4

추가 괄호 쌍이 필요합니다.

grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
    echo "failed"
else
    exit
fi
  • 올바른 산술 연산자 구문은 다음과 같습니다.((

  • 또한 종료 코드만 사용하는 것이므로 $?다른 변수에 저장할 필요 없이 바로 사용할 수 있습니다.

이는 다음과 같이 더욱 단순화될 수 있습니다.

if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
    echo "failed"
else
    exit
fi

관련 정보