Comparing numbers in Bash

advert2013 picture advert2013 · Sep 7, 2013 · Viewed 985.8k times · Source

I'm starting to learn about writing scripts for the bash terminal, but I can't work out how to get the comparisons to work properly. The script I'm using is:

echo "enter two numbers";
read a b;

echo "a=$a";
echo "b=$b";

if [ $a \> $b ];
then 
    echo "a is greater than b";
else
    echo "b is greater than a";
fi;

The problem is that it compares the number from the first digit on, i.e. 9 is bigger than 10, but 1 is greater than 09.

How can I convert the numbers into a type to do a true comparison?

Answer

jordanm picture jordanm · Sep 7, 2013

In bash, you should do your check in arithmetic context:

if (( a > b )); then
    ...
fi

For POSIX shells that don't support (()), you can use -lt and -gt.

if [ "$a" -gt "$b" ]; then
    ...
fi

You can get a full list of comparison operators with help test or man test.