Su comando,
check=grep -ci 'text' file.sh
será interpretado por el shell como "ejecutar el comando -cicon los argumentos texty file.sh, y establecer la variable checkal valor grepen su entorno".
El shell almacena el valor de salida del comando ejecutado más recientemente en la variable ?. Puede asignar su valor a una de sus propias variables como esta:
grep -i 'PATTERN' file
check=$?
Si desea actuar sobre este valor, puede usar su checkvariable:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
o puede omitir el uso de una variable separada y tener que inspeccionar $?todos juntos:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(tenga en cuenta -qque indica grepque no envíe nada y que salga tan pronto como algo coincida; no estamos realmente interesados en qué coincide aquí)
O, si solo quiere "hacer cosas" cuando no se encuentra el patrón :
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Guardar $?en otra variable solo es necesario si necesita usarlo más tarde, cuando el valor en $?se ha sobrescrito, como en
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
En el fragmento de código anterior, $?se sobrescribirá el resultado de la [ "$err" -ne 0 ] && [ ! -d "$dir" ]prueba. Guardarlo aquí solo es realmente necesario si necesitamos mostrarlo y usarlo con exit.
$?justo después de que finalice el comando.