Cómo verificar el estado de salida usando una declaración 'if'

Resuelto deadcell4 asked hace 10 años • 0 respuestas

¿Cuál sería la mejor manera de verificar el estado de salida en una ifdeclaració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 exitdeclaración está antes de la ifdeclaració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.

deadcell4 avatar Oct 31 '14 20:10 deadcell4
Aceptado

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 ifbloque 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.

Etan Reisner avatar Oct 31 '2014 13:10 Etan Reisner

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
Oo.oO avatar Aug 22 '2017 12:08 Oo.oO

Una alternativa a una ifdeclaració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
Catskul avatar May 01 '2019 18:05 Catskul

$?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
chepner avatar Oct 31 '2014 13:10 chepner