[问题] shell浮点数运算问题

楼主: zchien (小建)   2018-12-03 22:44:31
我用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 ] 他竟然显示不相等
请问这是什么原因,我可以怎么修正
作者: oldmon (我还能做什么?)   2018-12-03 23:31:00
查了一下 可以用bc或awk试试
作者: nastygirl (小洋葱)   2018-12-04 02:04:00
if [ $(bc <<< "$NTP <= 0.100001" ) -eq 1 ]
作者: da21510 (da21510)   2018-12-04 18:03:00
用bc
楼主: zchien (小建)   2018-12-05 23:20:00
$(bc <<< "$NTP <= 0.100001" ,请问bc<<<这是什么?
作者: cuello (cuello)   2018-12-06 16:00:00
expr 3.1415 \> 3.14159 >/dev/null && echo ">" || echo"<="
作者: goldie (阿良)   2018-12-06 17:35:00
bc 是指令,<<< 是 Bash 的 here string
作者: LinBuoRen (林博仁)   2018-12-06 19:41:00
Bash 使用手册明明就有说只支援整数运算

Links booklink

Contact Us: admin [ a t ] ucptt.com