grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else
exit
fi
error es:
/home/erawson/bin/try1: line 10: =: command not found
Respuesta1
cambie la declaración if a if [ $CHK -eq 0 ]; then
. Observe los espacios entre llaves cuadradas.
La variable CHK también debe asignarse así CHK=$(echo $?)
.
Aquí está el script como debería verse:
#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
echo "failed"
else
exit
fi
Respuesta2
Tiene algunos errores de sintaxis, como ya se ha señalado. También pareces estar usando una lógica defectuosa. Un estado de salida 0
significa que el comando se realizó correctamente, no que falló. Si lo que quieres es imprimir failed
tu archivonocoincide con la cadena de consulta, todo lo que necesita es:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"
Si desea imprimir failed
el archivopartidosla cadena, usa esto:
grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"
No es necesario guardar el estado de salida ni realizar una verificación if/else.
Respuesta3
Según tengo entendido, su requisito es que, si obtiene un resultado para la cadena grepping "::=BEGIN", desea repetir "fallido"... ¿verdad? Y no estoy seguro de por qué has usado ";" después si...nuevamente usado "entonces"
puedes probar lo siguiente
if [ -n `grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib` ]
then
echo "failed"
else
exit
fi
¡¡Espero que esto ayude!! (según mis suposiciones)
Respuesta4
Sólo necesitas un par de paréntesis extra:
grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
echo "failed"
else
exit
fi
La sintaxis correcta del operador aritmético es
((
Además, como solo estás usando el código de salida
$?
, no es necesario guardarlo en otra variable, puedes usarlo directamente.
Esto se puede simplificar aún más como:
if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
echo "failed"
else
exit
fi