Home » 2016 » May » 11 » An example to understand bash exit code $? in linux.

9:44 AM
An example to understand bash exit code $? in linux.

We very often use the inbuilt variable $? in linux to check the status of last command used.

To find if the last command is correctly executed, we fire echo $? always. If it return 0, the command is successfully completed else some error occured while executing the command.

See below example.

shankys:~> date
Wed May 11 06:50:07 CEST 2016

shankys:~> echo $?

shankys:~> date 9
date: invalid date `9'

shankys:~> echo $?
1                <--(some error occured in previous command i.e. date 9)


So the conclusion is $? retains the status code depending on the result of most recent command executed.

To make it more obvious, we take another example. What is the difference between below two statements:

if [ $? -eq 0 ] || [ $? -eq 127 ]; then echo 'something';


if [ $? -eq 0 -o $? -eq 127 ]; then echo 'something';

See the below example and try to understand.

shankys:~> datee
-bash: datee: command not found

shankys:~> echo $?

shankys:~> datee
-bash: datee: command not found

shankys:~> if [ $? -eq 0 ] || [ $? -eq 127 ];then echo 'something'; else echo 'elsething'; fi

shankys:~> datee
-bash: datee: command not found

shankys:~> if [ $? -eq 0 -o $? -eq 127 ]; then echo 'something'; else echo 'elsething'; fi

In normal scenarions, both if statements should yield same result not here. Why??

The reason is the first if statement has [ ] blocks and the left part of it alters the value of $? so the right part of it does not have the original value of $? which means the right part also does not have value as 127 causing print 'elsething'

The second if statement comapres $? with 0 or 127 simultaneously without changing the value of $?. So, it matches with the exit code 127 which is the exit code of 'datee' command.


Ideally in this scenario, we must use the second statement to get the correct result. Though in other cases both statements can be used giving same result.



Category: Open System-Linux | Views: 1173 | Added by: shanky | Tags: bash exit code, $?, last command check, exit code | Rating: 5.0/1

Related blogs

You may also like to see:

[2015-03-18][Open System-Linux]
What is runlevel in Linux?
[2014-12-22][Open System-Linux]
Key mapping inside VI editor
[2014-12-16][Open System-Linux]
CUT command in Linux : cut the file vertically
[2015-01-12][Open System-Linux]
W3M : A text based web browser and pager from Linux terminal
[2015-06-03][Open System-Linux]
STAT command : check file or filesystem statistics

Total comments: 0