在Bash脚本中如何进行除法运算而不使用bc?

3

我有一个bash脚本,需要计算百分比。例如,我有两个数字(假设是11和531),理想情况下应该计算11/531*100≈2。

我不需要小数值,事实上我想截断并向下舍入到最近的整数。似乎要进行浮点数运算,我需要调用bc或其他工具--是否有另一种方法来完成我想要的目标?

我并不反对bc,但当我在我的脚本中使用它,并将脚本配置为nagios插件时,出于某种未知原因,nagios似乎拒绝继续执行。这非常奇怪和烦人,在深入研究之前,我想知道是否可以避免在这种情况下完全使用bc。


2
你可以使用awk,例如:awk 'BEGIN {printf "%.2f\n", 2/3}' - fedorqui
let result=11*100/531 - Cyrus
@Cyrus,现在不再需要使用let了 - 虽然(( result = 11*100/531 ))是bash的扩展,但result=$(( 11*100/531 ))符合POSIX sh标准。 - Charles Duffy
感谢这些提示。想知道如果11和531实际上是Bash脚本变量的话,我会做些什么不同? - jkj2000
2个回答

7

使用bash的数学内置函数。它只打印整数/整数。因此,如果您想要丢弃/截断小数位,请使用以下内容:

echo $(((11*100)/531)) # prints 2

3
没问题。关键是要进行乘法运算。否则,如果先进行除法运算就会得到零,然后再乘以100仍然是零。 - glenn jackman

3

试试 Awk - 以获得浮点数

例如:

NUM=44; awk -v NUM=$NUM 'BEGIN { print  ((NUM - 20) / 45) }'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接