Can you please suggest to me the syntax for doing floating point comparison in a Bash script? I would ideally like to use it as part of an if statement. Here is
another simple clear way with bc is this:
if ((`bc <<< "10.21>12.22"`)); then echo "true"; else echo "false"; fi
I was using bc until now, I found in some distros there was not bc installed, and I did not want to go through sudo apt install bc but python was there. Using python:
if python -c "import sys; sys.exit(0 if float($float_1) > float($float_2) else 1)";
then
echo "true"
else
echo "false"
fi
### The funny thing about bash is this:
> AA=10.3
> BB=10.4
### It needs `$` for compare
> [[ $AA > $BB ]] && echo Hello
> [[ $AA < $BB ]] && echo Hello
Hello
Yeah, I know it's cheating but it works. And scientific notation does not work here.
Using the exit() function of awk makes it almost readable.
key1=12.3
result=12.5
# the ! awk is because the logic in boolean tests
# is the opposite of the one in shell exit code tests
if ! awk "{ exit ($result <= $key1) }" < /dev/null
then
# some code here
fi
Note that there is not need to reuse the [ operator as if already uses the exit value.
bc is your friend:
key1="12.3"
result="12.2"
if [ $(bc <<< "$result <= $key1") -eq 1 ]
then
# some code here
fi
Note the somewhat obscure here string (<<<) notation, as a nice alternative to echo "$result <= $key1" | bc.
Also, the un-bash-like bc prints 1 for true and 0 for false.
yu can use this awk comparison inside a if clause, it will print 1 (true) if the condition is true else 0 (false), and those values will be interpreted as boolean vals by the if
if (( $(awk 'BEGIN {print ("'$result'" <= "'$key1'")}') )); then
echo "true"
else
echo "false"
fi