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 $?
0

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';

and

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 $?
127

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

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

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

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

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: 1420 | Added by: shanky | Tags: bash exit code, $?, last command check, exit code | Rating: 5.0/1

Related blogs


You may also like to see:


[2014-03-13][Open System-Linux]
crontab: A command in linux to automatically start/repeat a process at certian time and interval
[2014-10-17][Open System-Linux]
SETFACL command in Linux to set file access control list
[2014-10-25][Open System-Linux]
XMLWF command in Linux to check/validate/parse an XML file
[2016-05-11][Open System-Linux]
An example to understand bash exit code $? in linux.
[2017-08-13][Open System-Linux]
Perl trick to remove Ctrl - M charater from a file

Total comments: 0
ComForm">
avatar