grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else
exit
fi
erro é:
/home/erawson/bin/try1: line 10: =: command not found
Responder1
mude a instrução if para if [ $CHK -eq 0 ]; then
. Observe os espaços entre colchetes.
A variável CHK também deve ser atribuída assim CHK=$(echo $?)
.
Aqui está o script como deve ser:
#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
echo "failed"
else
exit
fi
Responder2
Você tem alguns erros de sintaxe, como já foi apontado. Você também parece estar usando uma lógica falha. Um status de saída 0
significa que o comando foi bem-sucedido, e não que falhou. Se o que você quer é imprimir failed
seu arquivonãocorresponda à string de consulta, tudo que você precisa é:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"
Se você quiser imprimir failed
se o arquivopartidasa string, use isto:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"
Não há necessidade de salvar o status de saída e nem de verificar if/else.
Responder3
Pelo que entendi, seu requisito é: se você obtiver a saída para a string grepping "::=BEGIN", deseja ecoar "failed"..right?? E não sei por que você usou ";" depois de if...novamente usado "então"
você pode tentar o seguinte
if [ -n `grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib` ]
then
echo "failed"
else
exit
fi
Espero que isto ajude!! (de acordo com minhas suposições)
Responder4
Você só precisa de um par extra de parênteses:
grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
echo "failed"
else
exit
fi
A sintaxe correta do operador aritmético é
((
Além disso, como você está apenas usando o código de saída
$?
, não há necessidade de salvá-lo em outra variável, você pode usá-lo diretamente.
Isso pode ser ainda mais simplificado como:
if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
echo "failed"
else
exit
fi