分类:
2008-03-21 16:53:49
在写脚本的过程中,最常用的一种运算写法是$(()), 它能帮我们完成各种不同形式的数学运算。这种写法对于一般大量的运算相当的好用,它也提供加減乘除及求余数的运算式,不过并不提供分数及小数的运算。举个例子来看可能会清楚一点:
echo $((1 / 2))
这个运算式的返回的值是0而不是0.5。
因
此当运算需要更精密时,你可能就必需依赖你的双手了。在命令模式下除了bc似乎沒有什么好的计算器了。Bc是一个鲜少人知的指令,这是一个准确度极高的计
算器,不过却缺少提示信息,且隐藏错误信息,试想如果你使用了这个计算,你应该要知道你在做什么才对。不过一切都还好,我们可以搞定一切。
脚本源代码
#!/bin/sh
# scriptbc - 将bc指令改良下.
if [ $1 = "-p" ] ; then
precision=$2
shift 2
else
precision=2 # 位数的预设值
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
exit 0
原理
这个脚本再次证明了的能力。这个"<<"标记允许你在脚本中引用一些输入资料的工具,在这个例子中允许我们把资
料传递给bc命令。这也是笔者首次告诉各位:如何在脚本中引用系统命令并加上参数,让它能够更富有弹性地运用。在这个脚本中,如果加上-p的参数,就可以
设定小数点后要显示几位数,如果沒有任何的设定,将授用系统的预设值,显示小数点后两位。
当我们使用bc时,长度与位数两者间的差別是必须立刻了
解的,长度指的是所有数字的数量,而位数指的是小数点后的数字数量。像10.25它的长度是4,而位数是2;
3.14159它的长度是6,位数是5。在bc中,并没有预设的长度,不过位数的预设值卻是0,且不能透过何的方式(像 $ ((
)))修改。不过,很幸运地,如果我们利用scale设定,我们可以看到许多隐藏的资源,如下所示:
$ bc
bc 1.05
Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=10
(2002-1962)*365
14600
14600/7
2085.7142857142
quit
这个脚本程序里具有命令列上执行bc的能力,而且不会显示版权信息,如果它显示出此信息,可能因为使用者不是在终端机的模式执行此脚本。
此程序可以直接设定位数的值,并将所有的运算丟给bc来处理,之后再利用quit的命令离开bc。
运行脚本
执行该脚本时,请务必给命令一个完整的数学运算式。
结果
$ scriptbc 14600/7
2085.71
$ scriptbc -p 10 14600/7
2085.7142857142