在shell中具有最基本的数学计算能力,如可以使用expr 、let 。但这些都只能处理整形数据。为了要计算小数,就需要通过bc命令扩展。下面演示了一个例子,判断输出的参数类型,然后计算出它的平方.
- #!/bin/sh
- #filename: testbc
- var=$1
- dd=$(echo $var|bc 2>/dev/null )
- if [ "$var" != "$dd" ] || [ "$var" == "" ]; then
- echo "$var isn't number!"
- elif echo $var | grep "/." > /dev/null 2>
- then
- #square=$(echo " $var * $var "|bc)
- square=$(echo " $var * $var "|bc -l)
- echo "$var is a float number,square is:$square"
- else
- square=$(echo "$var * $var" | bc)
- echo "$var is a int number,square is:$square"
- fi
执行脚本的结果如下:
$ testbc aaa
aaa isn't number!
$testbc 2
2 is a int number,square is:4
$testbc 1.5
1.5 is a float number,square is:2.25
如果要处理计算结果的精度,可以使用scale定义精度。可以这样处理:
$ echo "scale=3; 1.55 * 1.55 " | bc -l
2.402
如果不定义精度,那么1.55*1.55的值为:2.4025,因为我们定义了精度为3,所以就显示了小数点后3位.
$ echo "1.55 * 1.55" | bc -l
2.4025