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
Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.
Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.
How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.
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 short set from objective 105 and space the ones you get wrong.
More questions on this objective
- A user logs in at a text console, and bash starts as an interactive login shell. Which file in that user's home directory is read by bash itself as part of login startup? machine-checked
- You are already logged in to a graphical desktop and open a new terminal window, so bash starts as an interactive shell that is not a login shell. Which per-user file does bash read in that case? machine-checked
- An executable script contains only the line `export EDITOR=vim`. After running it as `./setenv.sh`, `echo $EDITOR` in the calling shell prints nothing. What explains this? machine-checked
- In bash, what is the effect of `export MYVAR`? machine-checked
- At a bash prompt you run `alias ll='ls -l'` and it works for the rest of that session, but a terminal window opened afterwards does not recognise `ll`. Which statement explains this and gives the standard remedy? machine-checked
- Which statement correctly distinguishes bash's `[[ ... ]]` from `[ ... ]`? machine-checked