Cómo verificar el estado de salida usando una declaración 'if'
¿Cuál sería la mejor manera de verificar el estado de salida en una if
declaración para poder hacer eco de una salida específica?
Estoy pensando en que sea:
if [ $? -eq 1 ]
then
echo "blah blah blah"
fi
El problema que también tengo es que la exit
declaración está antes de la if
declaración simplemente porque tiene que tener ese código de salida. Además, sé que estoy haciendo algo mal ya que la salida obviamente cerraría el programa.
Cada comando que se ejecuta tiene un estado de salida.
Esa verificación analiza el estado de salida del comando que finalizó más recientemente antes de que se ejecutara esa línea.
Si desea que su secuencia de comandos salga cuando la prueba devuelva verdadero (el comando anterior falló), entonces coloque exit 1
(o lo que sea) dentro de ese if
bloque después del archivo echo
.
Dicho esto, si está ejecutando el comando y desea probar su resultado, utilizar lo siguiente suele ser más sencillo.
if some_command; then
echo command returned true
else
echo command returned some error
fi
O para darle la vuelta a eso, úsalo !
para la negación.
if ! some_command; then
echo command returned some error
else
echo command returned true
fi
Sin embargo, tenga en cuenta que a ninguno de ellos le importa cuál sea el código de error. Si sabe que solo le importa un código de error específico, debe verificarlo $?
manualmente.
Tenga en cuenta que los códigos de salida! = 0 se utilizan para informar errores. Entonces, es mejor hacer:
retVal=$?
if [ $retVal -ne 0 ]; then
echo "Error"
fi
exit $retVal
en lugar de
# will fail for error codes == 1
retVal=$?
if [ $retVal -eq 1 ]; then
echo "Error"
fi
exit $retVal
Una alternativa a una if
declaración explícita
Mínimamente:
test $? -eq 0 || echo "something bad happened"
Completo:
EXITCODE=$?
test $EXITCODE -eq 0 && echo "something good happened" || echo "something bad happened";
exit $EXITCODE
$?
es un parámetro como cualquier otro. Puede guardar su valor para utilizarlo antes de llamar finalmente a exit
.
exit_status=$?
if [ $exit_status -eq 1 ]; then
echo "blah blah blah"
fi
exit $exit_status