How to check the exit status using an if statement

deadcell4 picture deadcell4 · Oct 31, 2014 · Viewed 390.1k times · Source

I was wondering what would be the best way to check the exit status in an if statement in order to echo a specific output.

I'm thinking of it being

if [ $? -eq 1 ]
then
   echo "blah blah blah"
fi

The issue I am also having is that the exit statement is before the if statement simply because it has to have that exit code. Also, I know I'm doing something wrong since the exit would obviously exit the program.

Answer

Etan Reisner picture Etan Reisner · Oct 31, 2014

Every command that runs has an exit status.

That check is looking at the exit status of the command that finished most recently before that line runs.

If you want your script to exit when that test returns true (the previous command failed) then you put exit 1 (or whatever) inside that if block after the echo.

That being said if you are running the command and wanting to test its output using the following is often more straight-forward.

if some_command; then
    echo command returned true
else
    echo command returned some error
fi

Or to turn that around use ! for negation

if ! some_command; then
    echo command returned some error
else
    echo command returned true
fi

Note though that neither of those cares what the error code is. If you know you only care about a specific error code then you need to check $? manually.