¿Hay alguna manera de comprobar si hay un error en la ejecución de un comando?
Ejemplo :
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Ya he intentado hacer eso pero parece que no funciona. No sé cómo hacerlo.
El valor de retorno se almacena en $?
. 0 indica éxito, otros indica error.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Como cualquier otro valor textual, se puede almacenar en una variable para su futura comparación:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Para conocer los posibles operadores de comparación, véase man test
.
Si sólo necesita saber si el comando tuvo éxito o falló, no se moleste en probar $?
, sólo pruebe el comando directamente. Por ejemplo
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
Y asignar la salida a una variable no cambia el valor de retorno (bueno, a menos que se comporte de manera diferente cuando stdout no es un terminal, por supuesto).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals explica if
con más detalle.
$? debe contener el estado de salida del comando anterior, que debe ser cero para que no haya errores.
Entonces, algo como;
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
para la mayoría de los casos, es más fácil usar la construcción && para encadenar comandos que necesitan depender unos de otros. Así que cd /nonexistant && echo success!
no haría eco de éxito porque el comando se rompe antes de &&. El corolario de esto es ||, donde cd /nonexistant || echo fail
sería* echo fail porque cd falló. (esto se vuelve útil si usas algo como ||exit, que terminará el script si el comando anterior falló).