在bash中,除法不工作

分享于 

2分钟阅读

互联网

  繁體 雙語

问题:

我想从一个文件计算一些信息但除法不工作。 如果将 / 更改为 + 或者 -,则该计算将正确进行。 有什么想法吗?


#!/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。 IE $(((EMPTY * 100)/SERVERS))
( 当然,这可以能不像你想要的那样精确,但是它不会随着时间的推移而产生 0 )。


回答 2:

根据这个链接,在 (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





BASH  div  Division  
相关文章