Mastering Bash Exit Codes – TecAdmin

Channel: Linux
Abstract: /bin/bash ls /nonexistent_directory && echo "Directory found" || echo "Directory not found"12#/bin/bashls /nonexistent_directory && echo "Directory fo

When working with Bash scripts, it’s essential to understand exit codes and how they can improve the way you handle errors and script success. Exit codes are integer values returned by a program or script to indicate the outcome of its execution. This article will provide a comprehensive guide on mastering Bash exit codes, covering their significance, common exit codes, and how to use them effectively in your scripts.

Table of Contents
  1. Understanding Exit Codes in Bash
  2. Common Bash Exit Codes and Their Meanings
  3. Utilizing Exit Codes to Control Script Flow
  4. Custom Exit Codes in Bash
  5. Advanced Error Handling Techniques
  6. Conclusion
1. Understanding Exit Codes in Bash

Exit codes, also known as return codes or exit statuses, are integer values (0-255) used by a program or script to indicate its success or failure. In Bash, a zero exit code represents success, while any non-zero value indicates an error. When a command finishes, it returns an exit code to the calling process, which you can use for further decision-making in your script.

To access the exit code of the last executed command, use the special variable ‘$?’:

#!/bin/bash ls /nonexistent_directory echo "Exit code: $?"1234#!/bin/bash ls /nonexistent_directoryecho "Exit code: $?"

Exit code: 2
2. Common Bash Exit Codes and Their Meanings

Here are some common exit codes you might encounter in Bash:

Bash Exit CodesMeanings0Success1General error or unspecified error2Misuse of shell builtins (e.g., missing keyword or command)126Command invoked cannot execute (e.g., permissions issue)127Command not found128Invalid exit code (exit codes must be between 0 and 255)128 + NFatal error signal N (e.g., 130 for SIGINT, 137 for SIGKILL)255Exit status out of range3. Utilizing Exit Codes to Control Script Flow

You can use exit codes in your Bash scripts to control the flow of execution based on the success or failure of previous commands. One simple way to do this is using ‘if’ statements:

#!/bin/bash ls /nonexistent_directory if [ $? -eq 0 ]; then echo "Directory found" else echo "Directory not found" fi12345678#!/bin/bashls /nonexistent_directory if [ $? -eq 0 ]; then  echo "Directory found"else  echo "Directory not found"fi

Another approach is to use ‘&&’ and ‘||’ operators to chain commands based on exit codes:

#!/bin/bash ls /nonexistent_directory && echo "Directory found" || echo "Directory not found"12#!/bin/bashls /nonexistent_directory && echo "Directory found" || echo "Directory not found"

4. Custom Exit Codes in Bash

You can define your own exit codes in your scripts using the ‘exit’ command:

#!/bin/bash if [ -f /path/to/somefile ]; then echo "File found" exit 0 else echo "File not found" exit 1 fi123456789#!/bin/bash if [ -f /path/to/somefile ]; then  echo "File found"  exit 0else  echo "File not found"  exit 1fi

5. Advanced Error Handling Techniques

To create more robust scripts, consider using the following error handling techniques:

  • ‘set -e’: Makes a script exit immediately if any command exits with a non-zero status.
  • ‘set -u‘: Exits the script if an uninitialized variable is used.
  • ‘trap’: Defines custom actions to take when specific signals are received, such as cleaning up temporary files or providing a custom error message.


#!/bin/bash set -eu trap 'echo "An error occurred. Exiting..."' ERR command_that_may_fail12345#!/bin/bashset -eutrap 'echo "An error occurred. Exiting..."' ERR command_that_may_fail


Mastering Bash exit codes is crucial for creating reliable and efficient scripts. By understanding the common exit codes and their meanings, you can effectively control the flow of your scripts and handle errors gracefully. Remember to leverage custom exit codes and advanced error handling techniques to make your scripts more robust and maintainable. With these skills in hand, you’re now better equipped to tackle complex scripting tasks and create scripts that can handle unexpected situations with ease. Happy scripting!

Ref From: tecadmin

Related articles