shell脚本算术运算
答
如果您使用ksh,您是否尝试阅读“man ksh”?例如,“man bash”具有足够的关于用bash进行运算的信息。
命令typeset -i可用于指定变量必须被视为整数,例如typeset -i MYVAR指定变量MYVAR是整数而不是字符串。继排版指令,尝试分配非整数值变量将失败:
$ typeset -i MYVAR
$ MYVAR=56
$ echo $MYVAR
56
$ MYVAR=fred
ksh: fred: bad number
$
开展对变量或shell脚本中的算术运算,使用let命令。让我们将它的参数评估为简单的算术表达式。例如:
$ let ans=$MYVAR+45
echo $ans
101
$
以上也可写为表达式如下:
$ echo $(($MYVAR+45))
101
$
任何内$((和))包围由Korn外壳解释为一个算术表达式
答
现代外壳(在我看来POSIX兼容=现代)支持算术运算: + -/*在带符号的长整数变量+/- 2147483647上。
使用awk来实现双精度,15个siginificant数字它也有sqrt。
使用bc -l可获得最多20位有效数字的扩展精度。
壳的语法(zed_0xff)你已经看到:
a=$((13 * 2))
a=$(($2/2))
b=$(($a - 1))
a=(($a + $b))
awk进行双精度 - 浮点 - 算术运算本身。 它也有开方,COS,罪恶....看到:
http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html
BC有一些定义的功能和扩展presision它们可与-l选项:
BC -l
例如:
echo 'sqrt(.977)' | bc -l
答
精度和外壳的范围内建$((<expr>))
取决于平台。在32位平台上,它仅限于32位整数(与expr
不同,它似乎支持更大的整数,看起来与平台无关)。
(N.B - 当心,虽然^
在大多数炮弹的有效运营,这并不意味着“给力”,而是XOR)
而且 - 一些炮弹在这方面更加积极。例如,Zsh允许浮点运算,如$((10/3.0))
我想“使用'bc'而不是*相当*你正在寻找的答案... – 2010-06-10 05:23:47
@ignacio ...你能否愿意一个如何使用bc的例子? – Vijay 2010-06-10 05:25:39
'PI = $(echo“4 * a(1)”| bc -l)' – 2010-06-10 13:57:19