2014-03-13 52 views
1

我試過谷歌搜索了很多,我仍然沒有能夠找到解決方案語法錯誤:整數表達式預期

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行:::整數表達式預期 請幫助

+1

'$ okvalue'有什麼值?在我看來,它不是一個整數。 – fedorqui

+1

添加到shell腳本'set -xv'的頂部。這將打開調試,並將幫助您查看「if」語句中的值。我懷疑'$ size'不是你認爲的那樣。 –

回答

3

有沒有必要使用expr算術,除非你使用的是古老的外殼:

okvalue=$(($tomatch/100 * $treshold)) 

這將避免您的實際問題需要逃脫*,以及避免產生外部程序的需要。

同樣,你可以增加tomatch

: $((tomatch += $size)) 

(或者乾脆(($tomatch += $size))使用bash運算指令)。

0

你需要躲避*okvalue的作業是:

okvalue=`expr "$tomatch"/100 \* "$treshold"` 

你可以或者評估使用表達

okvalue=$(echo "$tomatch/100 * $treshold" | bc) 

如果你正在使用bash,你可以改爲做:

okvalue=$(bc <<<"$tomatch/100 * $treshold") 

甚至只是:

okvalue=$((tomatch/100 * treshold)) 

你不需要(())$作爲解釋here

爲了完整起見,我會LSO提let,這也是在上面的鏈接中提到:

let okvalue="tomatch/100 * treshold"