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