我已经尝试过谷歌搜索,但我仍然无法找到解决方案
rm -y zoznam
tomatch=1000000000
treshold=10
okvalue=`expr "$tomatch" / 100 * "$treshold"`
while read hostname sum size znak
do
while [ "$tomatch" -gt "$okvalue" ]
do
if [ "$tomatch" -gt "$size" ]
then
echo $hostname >> zoznam
tomatch=`expr "$tomatch" - "$size"`
fi
done
done < weeklysize
我得到第8行:[::预期的整数表达式 请帮忙
答案 0 :(得分:2)
除非您使用的是古老的shell,否则无需使用expr
进行算术运算:
okvalue=$(( $tomatch / 100 * $treshold ))
这将避免您实际需要转义*
的问题,并避免产生外部程序。
同样,您可以使用
增加tomatch
: $(( tomatch += $size ))
(或简单地(( $tomatch += $size ))
使用bash
算术命令。)
答案 1 :(得分:0)
您需要转发*
作业中的okvalue
:
okvalue=`expr "$tomatch" / 100 \* "$treshold"`
您也可以使用bc
okvalue=$(echo "$tomatch / 100 * $treshold" | bc)
如果您使用bash,则可以改为:
okvalue=$(bc <<<"$tomatch / 100 * $treshold")
甚至只是:
okvalue=$((tomatch / 100 * treshold))
根据here所解释,您不需要$
内的(( ))
为了完整起见,我还要提到let
,这也在上面的链接中提到:
let okvalue="tomatch / 100 * treshold"