语法错误:预期的整数表达式

时间:2014-03-13 14:06:26

标签: bash integer

我已经尝试过谷歌搜索,但我仍然无法找到解决方案

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行:[::预期的整数表达式 请帮忙

2 个答案:

答案 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"