Introduction – Each Linux or Unix shell command returns a status when it terminates normally or abnormally. For example, if backup.sh script is unsuccessful, and it returns a code which tells the shell script to send an e-mail to sysadmin.
|Requirements||Bash on Linux, macOS or Unix-like OS|
|Est. reading time||2 minutes|
What is an exit code in bash shell?
Every Linux or Unix command executed by the shell script or user has an exit status. Exit status is an integer number. 0 exit status means the command was successful without any errors. A non-zero (1-255 values) exit status means command was a failure.
How to find out the exit code of a command
You need to use a particular shell variable called $? to get the exit status of the previously executed command. To print $? variable use the echo command or printf command:
printf '%d\n' $?
Bash get exit code of command – How to use exit codes in shell scripts
So how do you store exit status of the command in a shell variable? Simply assign $? to a shell variable. The syntax is:
command status=$? ## run date command ## cmd="date" $cmd ## get status ## status=$? ## take some decision ## [ $status -eq 0 ] && echo "$cmd command was successful" || echo "$cmd failed"
How do I set an exit code for my own shell scripts?
The exit command cause normal shell script termination. It exits the shell with a status of N. The syntax is:
exit N exit 1 exit 999
#!/bin/bash /path/to/some/command [ $? -eq 0 ] || exit 1
A sample shell script to get the exit code of a command
#!/bin/bash # # Sample shell script to demo exit code usage # # set -e ## find ip in the file ## grep -q 192.168.2.254 /etc/resolv.conf ## Did we found IP address? Use exit status of the grep command ## if [ $? -eq 0 ] then echo "Success: I found IP address in file." exit 0 else echo "Failure: I did not found IP address in file. Script failed" >&2 exit 1 fi
Recommend exit code for your shell scripts
|1||Catchall for general errors|
|2||Misuse of shell builtins (according to Bash documentation)|
|126||Command invoked cannot execute|
|127||Command not found|
|128||Invalid argument to exit command|
|128+n||Fatal error signal “n”|
|130||Bash script terminated by Control-C|
|255*||Exit status out of range|
How to deal with the exit codes of all piped commands
See “Bash Find out the exit codes of all piped commands” for more info.
This page showed how to use exit codes on Linux or Unix based system and how to get the exit status/code of command. For more info see:
- The exit status of a command
- Bourne Shell Exit Status Examples
- GNU/bash man page online here and here.
🐧 1 comment so far... add one ↓
|Category||List of Unix and Linux commands|
|Disk space analyzers||ncdu • pydf|
|Firewall||Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04|
|Network Utilities||NetHogs • dig • host • ip • nmap|
|OpenVPN||CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04|
|Package Manager||apk • apt|
|Processes Management||bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time|
|Searching||grep • whereis • which|
|User Information||groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w|
|WireGuard VPN||Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04|