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.
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.
$? 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.
Now, execute the above exitstatus.sh to see the various exit statues given by the sample shell script.
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.
If you enjoyed this article, you might also like..
- 50 Linux Sysadmin Tutorials
- 50 Most Frequently Used Linux Commands (With Examples)
- Top 25 Best Linux Performance Monitoring and Debugging Tools
- Mommy, I found it! – 15 Practical Linux Find Command Examples
- Linux 101 Hacks 2nd Edition eBook
I will like to add 3 points.
1) You need to type $? immediately after running the command.
2) Do not forget that you can save the exit code to a variable like myvar=$? and
3) It shows the exit code of the last command in case of broken pipes. For e.g.
some_command | ls
The exit code of the above command is 0 and not 127 as in case of some_command ls
Try this :
$echo Exit status $?
Exit status 130
carlos April 29, 2010, 9:24 am
Your comment including exit status sounds like a bug in shell (they exist, sure!!).
Maybe when you use $aaa like a command (I presume $aaa is null), the exit status was 2. And when you print $0, the mere act of doing so makes $0=$0 + 128 . I guess??
Even when I did not documented, I have found some curiosities like this one. With a little of effort you can get results, maybe doing the same task with other instructions, maybe taking the error and making a variable take the value of the error,