在bash脚本里面作浮点数比较
冷胜魁(Seaquester)
lengshengkui@gmail.com
2008-9-16
bash本身并不支持浮点数,它将浮点数当成一个字符串来处理。由于某种原因,需要在脚本里面比较两个浮点数,遇到了一些麻烦:
- #!/bin/sh
- a=14.23
- b=9.12
- if [[ $a < $b ]] ; then
- echo "a < b"
- else
- echo "a > b"
- fi
上面的脚本正常情况下应该显示 a>b,但是实际上却显示a<b!因为,bash实际进行的是字符串的比较。
浮点数的比较(运算)应该使用 bc 才可以得到正确的结果,如下:
- #!/bin/sh
- a=14.23
- b=9.12
- c=$(echo "$a>$b"|bc) #当 a>b时,c=1
- if [[ $c -eq 0 ]] ; then
- echo "a < b"
- else
- echo "a > b"
- fi
bc的用法很多,详细的说明参考man bc。