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 Value||Exit Status|
|127||Command Not found|
|126||Not 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.