Bash scripting is a powerful tool for automating tasks on Linux systems. However, unlike high-level programming languages, Bash doesn’t have built-in try-catch blocks for error handling. Instead, you must implement different strategies to detect and manage errors during script execution. In this article, we will explore five methods for handling errors in Bash scripts, ranging from beginner-friendly to more advanced approaches.
In this tutorial you will learn:
- Basic error handling with exit status
- Using traps for error detection
- Redirecting errors to a log file
- Advanced error handling with custom functions
- Integrating conditional error checks with subshells

Category | Requirements, Conventions or Software Version Used |
---|---|
System | Linux-based operating system |
Software | Bash shell version 4.x or higher |
Other | Basic knowledge of Bash scripting |
Conventions | # – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo command$ – requires given linux commands to be executed as a regular non-privileged user |
Bash Error Handling Techniques
In Bash, error handling can be done in various ways, even though the language doesn’t provide a direct try-catch block like in languages such as Python or JavaScript. Below, we explore five methods, each with increasing complexity, to catch and handle errors in a Bash script.
- Basic Error Checking with Exit Status: The simplest way to handle errors in Bash is by checking the exit status of a command. In Bash, every command returns an exit code upon completion. An exit code of 0 indicates success, while any non-zero exit code indicates failure.
#!/bin/bash mkdir /root/test_dir if [ $? -ne 0 ]; then echo "Error: Failed to create directory." exit 1 fi echo "Directory created successfully."
In this method, we run a command and immediately check the exit status using the
$?
variable. If the status is non-zero, we print an error message and exit the script. - Using ‘set -e’ to Exit on Error: You can use the
set -e
command to instruct the script to exit immediately if any command returns a non-zero status. This is useful for scripts where you want to ensure any failure halts execution.#!/bin/bash set -e mkdir /root/test_dir echo "Directory created successfully."
By using
set -e
, the script automatically exits if the directory creation fails, saving you from manually checking the exit status after every command. - Error Handling with Traps: Bash provides the
trap
command to catch signals and errors. You can define a trap to execute specific commands when an error occurs.#!/bin/bash trap 'echo "An error occurred. Exiting..."; exit 1;' ERR mkdir /root/test_dir echo "Directory created successfully."
Here, the
trap
command captures any errors (signaled by theERR
keyword) and runs the specified error handling code.Error Handling with Traps - Redirecting Errors to a Log File: Instead of displaying errors on the console, you can redirect them to a log file for better debugging.
#!/bin/bash exec 2>error_log.txt mkdir /root/test_dir if [ $? -ne 0 ]; then echo "Error: Failed to create directory." exit 1 fi echo "Directory created successfully."
In this method, the
exec 2>error_log.txt
line redirects standard error (file descriptor 2) to a log file, allowing you to review error details later. - Custom Error Handling Function: For more advanced error handling, you can create a custom function to handle different types of errors, adding flexibility to your scripts.
#!/bin/bash handle_error() { echo "Error on line $1" exit 1 } trap 'handle_error $LINENO' ERR mkdir /root/test_dir echo "Directory created successfully."
In this method, the
handle_error
function is triggered whenever an error occurs, providing the exact line number where the failure happened, helping you to debug more effectively.Custom Error Handling Function
Conclusion
Bash scripting may not have native try-catch functionality, but with various techniques such as exit status checks, trap
commands, and custom error-handling functions, you can manage errors effectively. Whether you’re a beginner or an experienced user, these methods will help you improve the reliability of your Bash scripts.