Skip to main content
In this article, we explore the concept of exit codes in shell scripts and how they indicate whether a command executed successfully or encountered an error on Linux systems. When you run a command, it either executes successfully or fails. For instance, listing the contents of the current directory with the command below executes successfully and returns an exit status of zero:
Conversely, if you run a command that does not exist, an error is displayed and a non-zero exit code is returned:
When a command runs successfully, it returns an exit status of 0; when it fails, it returns a non-zero value. These exit codes are not shown in the command output but are stored in the built-in variable ”$?”. To view the exit code immediately after executing a command, use:
It is considered best practice to use exit codes in your scripts to communicate the overall status to the caller or user.
Consider a scenario where you are launching a rocket mission. For a successful launch, the script should return an exit status of 0, and for any failure, it should explicitly return a non-zero value (commonly 1). Below is a sample script that starts a rocket launch mission. In this naive version, even if the launch fails, the script returns an exit code of 0 because it only prints a failure message without setting a non-zero index:
If you run the script, the output might be:
However, checking the exit code reveals that it remains 0:
To address this issue, update the script so that it returns a non-zero exit code (typically 1) when the launch fails. Here is the improved version of the script:
Now, if the rocket launch fails, the script will correctly exit with a status code of 1. This can be verified as follows:
Always ensure that your scripts return an appropriate exit code. Explicitly returning a non-zero code for failure conditions facilitates better integration with other systems and scripts.

Watch Video

Practice Lab