Skip to main content
How to check Exit status of Linux Commands

How to check Exit status of Linux Commands

In this post, I will explain about the various Exit status and How to check Exit status of Linux Commands. This post will be helpful for those who are trying to write scripts and dealing with conditional statements.

Exit Status?

On Linux systems, programs can pass a value to their parent process while terminating. This value is referred to as an exit code or exit status. So, any script or command executed will have an exit code. The exit status value varies from 0 to 255. Some of the commonly used exit status are as below.

Exit Status

0Successful execution of command
1command fails because of an error during expansion or redirection, the exit status is greater than zero.
2Incorrect command usage
126Command found but not executable
127command not found

When is it useful?

It is very useful while dealing with scripts. So, you can use command exit status in the shell script to display an error message or take some sort of action based on the exit code.

How to check Exit status of Linux Commands?

Exit codes in command line

You can use $? to find out the exit status of a Linux command. Execute echo $? command to check the status of executed command as shown below.

 [email protected]:~$ ls
 Desktop Documents Downloads examples.desktop Music Pictures Public sample.txt share Templates Videos
 [email protected]:~$ echo $?
 0

Here we get exit status as zero which means the “ls” command executed successfully.

Exit codes in scripts

Sample Script 1:

#!/bin/bash
which vim
check_vim=$?
if [ $check_vim -eq 0 ]; then echo -e "Package already installed"
else
sudo apt-get install vim
fi

In  the above example, the conditional if statement is checking the exit status of the command “which vim” before trying to install “vim” on your system.

I will explain the use of manually specifying exit codes in scripts with another example.

Sample Script 2:

#!/bin/bash
touch /root/test.txt 
if [ $? -eq 0 ]
then
 echo "Successfully created file"
else
 echo "Could not create file" 
fi

Let’s execute this script. See the details below.

[email protected]:~$ sh test_exit.sh 
touch: cannot touch '/root/test.txt': Permission denied
Could not create file
[email protected]:~$ echo $?
0

Here, the script didn’t really create the file “test.txt“. However, you can see that the exit status is “0“. This is because of the execution of the “echo” statement. So, it would not be a good idea to pass a successful exit code to any other program executing this script.

How can we avoid this?

In such cases, we can add our own exit code to this script using exit command. See the detailed script below.

Sample Script 3:

#!/bin/bash
touch /root/test.txt 
if [ $? -eq 0 ]
then
 echo "Successfully created file"
 exit 0
else
 echo "Could not create file" 
 exit 1
fi

Here, with the exit command, the script will exit with a successful message and 0 exit code if the touch command is successful. However, If the touch command fails, we will print a failure message and exit with a 1 value which indicates failure.

Execution:

[email protected]:~$ sh test_exit.sh 
touch: cannot touch '/root/test.txt': Permission denied
Could not create file
[email protected]:~$ echo $?
1

That’s it!!!

Hope you have a better idea about the exit codes and how to use it in scripts now. If you have any queries, please leave a comment below.

How to check Exit status of Linux Commands
4.5 (90%) 2 votes

GeeksAlive

TheGeeksAlive is all about Linux, Server Administration, Web Hosting and other Open Source Technologies.