Doctor Bob
Linux Topic Search
TOURBUS
HOME PAGE
SAVVY
CONSUMER
FREE TECH
SUPPORT

LINUX PROGRAMMING

Can I Debug a Shell Script?

Debugging Shell Scripts

Sometimes shell scripts just don't work the way you think they should, or you get strange error messages when running your script. Just remember: The computer is always right. It's easy to omit a significant blank, quotation mark, or bracket, or to mistakenly use a single quotation mark when you should have used double quotation marks or a backtick.
When you get unexpected behavior from a shell script and you're thinking "I just know this is coded right . . . the computer is wrong!"--remember: The computer is always right. But fortunately, there is help. By prefixing your shell invocation with bash -x, you can turn on tracing to see what's really happening. Let's say we have the following listarg script:

count=1
until [ "$*" = "" ]
do
echo "Arg $count : $1 "
shift
count=$count+1
done

At first glance, it looks golden, but for some reason the counter is not incrementing properly. Try running it with the command

% bash -x listarg abc def

and look at the trace output as the shell executes. The lines prefixed with a plus sign show the progress of the running script, and the lines without the plus sign are the script's normal output.

+ count=1
+ [ abc def = ]
+ echo Arg 1 : abc
Arg 1 : abc
+ shift
+ count=1+1
Hmmm . . .
+ [ def = ]
+ echo Arg 1+1 : def
Arg 1+1 : def
Not Good!
+ shift
+ count=1+1+1
+ [ = ]

Instead of printing Arg 2 : def, we got Arg 1+1 : def. But the trace output line reading count=1+1 nails the problem. You forgot to use the expr command, so the shell is treating this as a string concatenate instead of a mathematical calculation.

Note: You can always press Ctrl-C to stop a running shell script. This is handy if you accidentally create a script with an infinite loop (one that will never end by itself).

Previous Lesson: Shell Script Looping
Next Lesson: Perl Basics

[ RETURN TO INDEX ]

Comments

No comments yet

*Name:
Email:
Notify me about new comments on this page
Hide my email
*Text:
 

Ask Bob Rankin - Free Tech Support
<Send This Link to a Friend>         <Bookmark This Page>


Copyright © by Bob Rankin
All rights reserved - Redistribution is allowed only with permission.