The test and [ (square bracket) commands ( Section 35.26) can compare two numbers. But it's an error if one of the numbers you test is stored in a shell variable that's empty or doesn't exist. For example, an empty num variable here will give you a Syntax error:
if [ "$num" -gt 0 ] then ...
To stop syntax errors, add a leading zero, like this:
if [ "0$num" -gt 0 ] then ...
In that case, if $num is empty, the test will compare 0 to 0. If $num is 1, the test will be true (because 01 is greater than 0) -- and so on, just as it should be.
The zero trick doesn't work with negative numbers, though, so if you expect ever to need to deal with negative numbers, you may want to look into other methods of checking to see if a variable has a value, such as this method from the bash shell, which displays an error if the variable is null or unset, or the following method, which assigns a default value:
#!/bin/sh ... # check $num first, fail with error tmp=${num:?"num not set"} # use a default default=0 if [ ${num:-default} -gt 0 ] then ...
--JP and SJC
Copyright © 2003 O'Reilly & Associates. All rights reserved.