Home arrow BrainDump arrow Page 2 - Executing Commands with bash

4.2 Telling If a Command Succeeded or Not - BrainDump

This two-part article will explain how to launch programs in the bash shell, used with Linux and Unix operating systems. It is excerpted from chapter four of the bash Cookbook, Solutions and Examples for bash Users, written by Carl Albing, JP Vossen and Cameron Newham (O'Reilly, 2007; ISBN: 0596526784). Copyright © 2007 O'Reilly Media, Inc. All rights reserved. Used with permission from the publisher. Available from booksellers or direct from O'Reilly Media.

TABLE OF CONTENTS:
  1. Executing Commands with bash
  2. 4.2 Telling If a Command Succeeded or Not
  3. 4.3 Running Several Commands in Sequence
  4. 4.4 Running Several Commands All at Once
  5. 4.5 Deciding Whether a Command Succeeds
By: O'Reilly Media
Rating: starstarstarstarstar / 2
June 12, 2008

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

Problem

You need to know whether the command you ran succeeded.

Solution

The shell variable $? will be set with a non-zero value if the command fails—provided that the programmer who wrote that command or shell script followed the established convention:

  $ somecommand
  it works...
  $ echo $?
  0
  $ badcommand
  it fails...
  $ echo $?
  1
  $

Discussion

The exit status of a command is kept in the shell variable referenced with $?. Its value can range from 0 to 255. When you write a shell script, it’s a good idea to have your script exit with a non-zero value if you encounter an error condition. (Just keep it below 255, or the numbers will wrap around.) You return an exit status with the exitstatement (e.g.,exit 1orexit 0). But be aware that you only get one shot at reading the exit status:

  $ badcommand
  it fails...
  $ echo $?
  1
  $ echo $?
  0
  $

Why does the second time give us 0 as a result? Because the second time is reporting on the status of the immediately preceding echo command. The first time we typedecho $?it returned a1, which was the return value of badcommand. But the echo command itself succeeds, therefore the new, most-recent status is success (i.e., a0 value). So you only get one chance to check it. Therefore, many shell scripts will immediately assign the status to another shell variable, as in:

  $ badcommand
  it fails...
  $ STAT=$?
  $ echo $STAT
  1
  $ echo $STAT
  1
  $

We can keep the value around in the variable$STATand check its value later on.

Although we’re showing this in command-line examples, the real use of variables like$?comes in writing scripts. You can usually see if a command worked or not if you are watching it run on your screen. But in a script, the commands may be running unattended.

One of the great features of bash is that the scripting language is identical to commands as you type them at a prompt in a terminal window. This makes it much easier to check out syntax and logic as you write your scripts.

The exit status is more often used in scripts, and often inifstatements, to take different actions depending on the success or failure of a command. Here’s a simple example for now, but we will revisit this topic in future recipes:

  $ somecommand
  ...
  $ if (( $? )) ; then echo failed ; else echo OK; fi

See Also
  1. Recipe 4.5, "Deciding Whether a Command Succeeds"
  2. Recipe 4.8, "Displaying Error Messages When Failures Occur"



 
 
>>> More BrainDump Articles          >>> More By O'Reilly Media
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

BRAINDUMP ARTICLES

- Apple Founder Steve Jobs Dies
- Steve Jobs` Era at Apple Ends
- Google's Chrome Developer Tool Updated
- Google's Chrome 6 Browser Brings Speed to th...
- New Open Source Update Fedora 13 is Released...
- Install Linux with Knoppix
- iPad Developers Flock To SDK 3.2
- Managing a Linux Wireless Access Point
- Maintaining a Linux Wireless Access Point
- Securing a Linux Wireless Access Point
- Configuring a Linux Wireless Access Point
- Building a Linux Wireless Access Point
- Migrating Oracle to PostgreSQL with Enterpri...
- Demystifying SELinux on Kernel 2.6
- Yahoo and Microsoft Create Ad Partnership

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: