A command finishes and the shell reports an exit status of 0. What does that mean, and which parameter reports it?

LPIC-1 Exam 102-500, objective 105. Shells and shell scripting easy

Draft — not checked yet. This question was written from the published exam objectives and cites the clause it comes from, but nobody has yet read it against that clause and signed for it.

It is kept out of search results and out of mock exams until they have. Read the source below before you take the answer as settled.

The options

Correct The command succeeded; the status is available in $?

Correct. On Unix, exit status 0 means success and any non-zero value means failure, which is the opposite of the truthiness convention in most programming languages. $? expands to the status of the last completed foreground command.

Not correct The command failed; the status is available in $?

Wrong about the meaning. The parameter is right, but 0 is success. Non-zero values carry the failure reason, for example 127 for command-not-found and 126 for found-but-not-executable.

Not correct The command succeeded; the status is available in $!

Wrong parameter. $! expands to the process ID of the most recently started background job, which is what you would pass to `wait` or `kill`.

Not correct The command succeeded; the status is available in $0

Wrong parameter. $0 expands to the name the shell or script was invoked as, which scripts commonly use in usage messages.

Why

Zero is success because there is only one way to succeed and many ways to fail, so the non-zero space encodes the reason. `if`, `while`, `&&` and `||` all branch on this status, so `if grep -q root /etc/passwd` is true precisely when grep exits 0. Read $? immediately, since the next command overwrites it.

Where this comes from

Cited
LPI exam objective 105.2
What it says
Use the exit status of a command in a script.

Practise this

Reading one question is not practice. The trainer will draw a set from objective 105 and space the ones you get wrong.

Practise LPIC-1 Exam 102-500