Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18690899
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

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

阅读(595) | 评论(0) | 转发(0) |
0

上一篇:避免使用粗糙的echo

下一篇:ANSI颜色序列

给主人留下些什么吧!~~