shell浮點數運算問題 - Linux

Table of Contents


我用unix 系統
寫sh時,遇到了一個bug ,就是浮點數無法運算

我使用ntpdate去校正時間, 並且記錄校正了多少時間

例如:需要校正的時間是 0.000304 s

我寫

ntpdate -p 10.37.82.23 > time.txt
NTP= grep delay time.txt | awk ' ' {print $6}

# $NTP will show 類似 0.000304

if [ $NTP -le 0.100001 ];then
ntpdate -u 10.37.82.23
fi


# 如果NTP server 連線異常, $NTP will show 0.000000
if [ $NTP -eq 0.000000 ];then
echo "NTP server not connect"
fi


上面第一個if 會 不成立 , 可能類似浮點數運算, 他以為兩個都是0

第二個if 也會顯示錯誤, [0.000000 -eq 0.000000 ] 他竟然顯示不相等

請問這是什麼原因,我可以怎麼修正

--

All Comments

Hedwig avatarHedwig2018-12-05
查了一下 可以用bc或awk試試
Victoria avatarVictoria2018-12-09
if [ $(bc <<< "$NTP <= 0.100001" ) -eq 1 ]
Caroline avatarCaroline2018-12-11
用bc
Blanche avatarBlanche2018-12-14
$(bc <<< "$NTP <= 0.100001" ,請問bc<<<這是什麼?
William avatarWilliam2018-12-14
expr 3.1415 \> 3.14159 >/dev/null && echo ">" || echo
"<="
Daniel avatarDaniel2018-12-19
bc 是指令,<<< 是 Bash 的 here string
Mary avatarMary2018-12-19
Bash 使用手冊明明就有說只支援整數運算