How to compare two floating-point values in shell script

Reem picture Reem · May 5, 2010 · Viewed 12.4k times · Source

I had to do a division in shell script and the best way was:

result1=`echo "scale=3; ($var1 / $total) * 100"| bc -l`
result2=`echo "scale=3; ($var2 / $total) * 100"| bc -l`

but I want to compare the values of $result1 and $result2

Using if test $result1 -lt $result2 or if [ $result1 -gt $result2 ] didn't work :(

Any idea how to do that?

Answer

Norman Ramsey picture Norman Ramsey · May 5, 2010

You can compare floating-point numbers using expr(1):

: nr@yorkie 3724 ; expr 3.1 '<' 3.3
1
: nr@yorkie 3725 ; expr 3.1 '<' 3.09
0

You can also have bc do the comparisons as well as the calculations:

if [ "$(echo $result1 '<' $result2 | bc -l)" -eq 1 ];then ... fi

Finally, ksh93 can do arithmetic evaluation $(($result1 < $result2)) with floating-point numbers, although bash cannot.