Friday, March 26, 2010

Bash Shell Exit Status Tutorial with Practical Examples


In our bash introduction article, we learned that a shell-script file contains list of commands to be executed by the shell interpreter. In this article let us review about shell commands and its internals.
A command is a sequence of words. The first word indicates the command to be executed and remaining words are passed as an arguments, where arguments could be the options or parameters to the command.

Some of the common Unix commands you execute at the command line are shell commands. For example, ls, lpr and grep command.
$ ls -alF

$ lpr filename

$ grep "string" filename

Shell Command Exit Status

The return value of a command is its exit status, or 128 + N if the command is terminated by signal N. Exit status is used to check the result (success/failure) of the execution of the command. If the exit status is zero, then the command is success. If the command is failed the exit status will be non-zero.
Exit ValueExit Status
0 (Zero)Success
Non-zeroFailure
2Incorrect usage
127Command Not found
126Not an executable

$? Shell Variable

The shell variable name $? is a special built-in variable which has the exit status of the last command executed.
  • After the shell function execution, $? returns the exit status of the last command executed in a function.
  • After the shell script execution, $? returns the exit status of the last command executed in the script.

Sample Shell Script that Explains Shell-Command Exit Status

The following exitstatus.sh shell-script shows examples of various shell-command exit status.
$ cat exitstatus.sh
#! /bin/bash

echo -e "Successful execution"
echo -e "====================="
echo "hello world"
# Exit status returns 0, because the above command is a success.
echo "Exit status" $? 

echo -e "Incorrect usage"
echo -e "====================="
ls --option
# Incorrect usage, so exit status will be 2.
echo "Exit status" $? 

echo -e "Command Not found"
echo -e "====================="
bashscript
# Exit status returns 127, because bashscript command not found
echo "Exit status" $? 

echo -e "Command is not an executable"
echo -e "============================="
ls -l execution.sh
./execution.sh
# Exit status returns 126, because its not an executable.
echo "Exit status" $?
Now, execute the above exitstatus.sh to see the various exit statues given by the sample shell script.
$ bash exitstatus.sh
Successful execution
=====================
hello world
Exit status 0
Incorrect usage
=====================
ls: unrecognized option `--option'
Try `ls --help' for more information.
Exit status 2
Command Not found
=====================
exitstaus.sh: line 15: bashscript: command not found
Exit status 127
Command is not an executable
=============================
-rw-r--r-- 1 root root 659 Mar  9 13:36 execution.sh
exitstatus.sh: line 21: ./execution.sh: Permission denied
Exit status 126
Note: Checking the return value of a function or a command is one of the main responsibility of a programmer. This should become your second nature while writing any code.

No comments:

Post a Comment