![在 Bash 中除法不起作用](https://linux22.com/image/732467/%E5%9C%A8%20Bash%20%E4%B8%AD%E9%99%A4%E6%B3%95%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我想计算文件中的一些信息,但除法不起作用。如果我将 改为/
或+
,-
这个计算就可以正确进行。有什么想法吗?
#!/bin/sh
FILE=/tmp/stats
for EMPTY in $(cat $FILE |sed '1!d'); do (echo "Empty Servers $EMPTY | Empty-Servers=$EMPTY;"); done
for SERVERS in $(cat $FILE |sed '2!d'); do (echo "Total Servers $SERVERS | Total=$SERVERS;"); done
PERCENT=$(((EMPTY / SERVERS)*100))
echo $PERCENT
答案1
除法确实有效,只是 shell 只处理整数。
我认为您要么想要调用类似的东西bc
,然后您可以按照自己喜欢的方式进行数学运算,要么适应处理整数的含义。
您可以采取以下做法的示例:更改表达式,先乘以EMPTY
,100
然后除以SERVERS
。即$(((EMPTY * 100) / SERVERS))
。
(当然,这可能不如您所希望的那样精确,但它并不总是产生 0 结果。)
答案2
根据这个关联,你也需要一个$
before (EMPTY / SERVERS)
。因此你的脚本应该如下所示:
#!/bin/sh
FILE=/tmp/stats
for EMPTY in $(cat $FILE |sed '1!d'); do (echo "Empty Servers $EMPTY | Empty-Servers=$EMPTY;"); done
for SERVERS in $(cat $FILE |sed '2!d'); do (echo "Total Servers $SERVERS | Total=$SERVERS;"); done
PERCENT=$(($((EMPTY / SERVERS))*100))
echo $PERCENT
根据这个关联,shell 解析仅对整数除法有用,所以最好使用bc
。
答案3
BC 的做法是:
for PERCENT in $(echo "scale=3; ($EMPTY/$SERVERS)*100" | bc); do (echo "Percent Empty=$PERCENT;;");done