Error handling in Bash can be managed using exit statuses and traps.
- Every commands in Bash returns an exit status (0 for success, non-zero for failure).
- You can use
$?
variable to get the exist status of the last executed command.
Exit Statuses
#!/bin/zsh
ls /nonexistent_directory
if [ $? -ne 0 ]; then
echo "Command failed."
fi
Traps
The trap command allows you to catch signals and errors to clean up before the script exits.
trap 'commands' signal
#!/bin/zsh
trap 'echo "Caught SIGINT signal. Exiting..."; exit 1' SIGINT
while true; do
echo "Press Ctrl+C to exit..."
sleep 1
done
Explanation:
- trap 'commands' signal: Defines a trap for a specific signal.
- SIGINT: The interrupt signal (typically sent by pressing Ctrl+C).
Practice
#!/bin/zsh
check_file() {
if [ -f "$1" ]; then
echo "File $1 exists."
else
echo "File $1 does not exist."
return 1
fi
}
check_file "myfile.txt"
if [ $? -ne 0 ]; then
echo "Error: File not found."
fi