Difference between revisions of "The exit status of a command"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
m (Reverted edits by 122.248.183.1 (talk) to last revision by Cfajohnson)
m (Text replacement - "<source lang="bash">" to "<syntaxhighlight lang="bash" >")
Line 11: Line 11:
 
* A non-zero (1-255 values) exit status means command was failure.
 
* A non-zero (1-255 values) exit status means command was failure.
 
* You can use special shell variable called ? to get the exit status of the previously executed command. To print ? variable use the [[echo command]]:
 
* You can use special shell variable called ? to get the exit status of the previously executed command. To print ? variable use the [[echo command]]:
<source lang="bash">echo $?
+
<syntaxhighlight lang="bash" >echo $?
 
date  # run date command
 
date  # run date command
 
echo $? # print exit status
 
echo $? # print exit status
Line 19: Line 19:
 
==How Do I See Exit Status Of The Command?==
 
==How Do I See Exit Status Of The Command?==
 
Type the following command:
 
Type the following command:
<source lang="bash">date</source>
+
<syntaxhighlight lang="bash" >date</source>
 
To view exist status of date command, enter:
 
To view exist status of date command, enter:
<source lang="bash">echo $?</source>
+
<syntaxhighlight lang="bash" >echo $?</source>
 
Sample Output:
 
Sample Output:
 
<pre>0</pre>
 
<pre>0</pre>
 
Try non-existence command  
 
Try non-existence command  
<source lang="bash">date1
+
<syntaxhighlight lang="bash" >date1
 
echo $?
 
echo $?
 
ls /eeteec
 
ls /eeteec
Line 34: Line 34:
 
===How Do I Store Exit Status Of The Command In a Shell Variable?===
 
===How Do I Store Exit Status Of The Command In a Shell Variable?===
 
Assign $? to a shell variable:
 
Assign $? to a shell variable:
<source lang="bash">ls -l /tmp
+
<syntaxhighlight lang="bash" >ls -l /tmp
 
status=$?
 
status=$?
 
echo "ls command exit stats - $status"</source>
 
echo "ls command exit stats - $status"</source>
 
====Exit Status Shell Script Example====
 
====Exit Status Shell Script Example====
 
A simple shell script to locate username (finduser.sh)
 
A simple shell script to locate username (finduser.sh)
<source lang="bash">#!/bin/bash
+
<syntaxhighlight lang="bash" >#!/bin/bash
 
# set var  
 
# set var  
 
PASSWD_FILE=/etc/passwd
 
PASSWD_FILE=/etc/passwd
Line 61: Line 61:
 
fi</source>
 
fi</source>
 
Save and close the file. Run it as follows:
 
Save and close the file. Run it as follows:
<source lang="bash">chmod +x finduser.sh
+
<syntaxhighlight lang="bash" >chmod +x finduser.sh
 
./finduser.sh</source>
 
./finduser.sh</source>
 
Sample Outputs:
 
Sample Outputs:
Line 68: Line 68:
 
</pre>
 
</pre>
 
Run it again:
 
Run it again:
<source lang="bash">chmod +x finduser.sh
+
<syntaxhighlight lang="bash" >chmod +x finduser.sh
 
./finduser.sh</source>
 
./finduser.sh</source>
 
Sample Outputs:
 
Sample Outputs:
Line 75: Line 75:
 
</pre>
 
</pre>
 
You can combine the grep and if command in a single statement as follows:
 
You can combine the grep and if command in a single statement as follows:
<source lang="bash">if grep "^$username:" /etc/passwd >/dev/null
+
<syntaxhighlight lang="bash" >if grep "^$username:" /etc/passwd >/dev/null
 
then
 
then
 
echo "User '$username' found in $PASSWD_FILE file."
 
echo "User '$username' found in $PASSWD_FILE file."

Revision as of 22:49, 29 March 2016

← Multilevel if-then-elseHomeConditional execution →

Each Linux command returns a status when it terminates normally or abnormally. You can use command exit status in the shell script to display an error message or take some sort of action. For example, if tar command is unsuccessful, it returns a code which tells the shell script to send an e-mail to sys admin.

Exit Status

  • Every Linux command executed by the shell script or user, has an exit status.
  • The exit status is an integer number.
  • The Linux man pages stats the exit statuses of each command.
  • 0 exit status means the command was successful without any errors.
  • A non-zero (1-255 values) exit status means command was failure.
  • You can use special shell variable called ? to get the exit status of the previously executed command. To print ? variable use the echo command:

<syntaxhighlight lang="bash" >echo $? date # run date command echo $? # print exit status foobar123 # not a valid command echo $? # print exit status</source>

How Do I See Exit Status Of The Command?

Type the following command: <syntaxhighlight lang="bash" >date</source> To view exist status of date command, enter: <syntaxhighlight lang="bash" >echo $?</source> Sample Output:

0

Try non-existence command <syntaxhighlight lang="bash" >date1 echo $? ls /eeteec echo $?</source> Sample Output:

2

According to ls man page - exit status is 0 if OK, 1 if minor problems, 2 if serious trouble.

How Do I Store Exit Status Of The Command In a Shell Variable?

Assign $? to a shell variable: <syntaxhighlight lang="bash" >ls -l /tmp status=$? echo "ls command exit stats - $status"</source>

Exit Status Shell Script Example

A simple shell script to locate username (finduser.sh) <syntaxhighlight lang="bash" >#!/bin/bash

  1. set var

PASSWD_FILE=/etc/passwd

  1. get user name

read -p "Enter a user name : " username

  1. try to locate username in in /etc/passwd

grep "^$username" $PASSWD_FILE > /dev/null

  1. store exit status of grep
  2. if found grep will return 0 exit stauts
  3. if not found, grep will return a nonzero exit stauts

status=$?

if test $status -eq 0 then echo "User '$username' found in $PASSWD_FILE file." else echo "User '$username' not found in $PASSWD_FILE file." fi</source> Save and close the file. Run it as follows: <syntaxhighlight lang="bash" >chmod +x finduser.sh ./finduser.sh</source> Sample Outputs:

Enter a user name : vivek
User 'vivek' found in /etc/passwd file.

Run it again: <syntaxhighlight lang="bash" >chmod +x finduser.sh ./finduser.sh</source> Sample Outputs:

Enter a user name : tommy
User 'tommy' not found in /etc/passwd file.

You can combine the grep and if command in a single statement as follows: <syntaxhighlight lang="bash" >if grep "^$username:" /etc/passwd >/dev/null then echo "User '$username' found in $PASSWD_FILE file." else echo "User '$username' not found in $PASSWD_FILE file." fi</source> Notice that standard output from grep command is ignored by sending it to /dev/null. ← Multilevel if-then-elseHomeConditional execution →