[問題] shell浮點數運算問題

看板Linux作者 (小建)時間5年前 (2018/12/03 22:44), 編輯推噓3(413)
留言8則, 7人參與, 5年前最新討論串1/3 (看更多)
我用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 ] 他竟然顯示不相等 請問這是什麼原因,我可以怎麼修正 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.139.44 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1543848273.A.5C4.html

12/03 23:31, 5年前 , 1F
查了一下 可以用bc或awk試試
12/03 23:31, 1F

12/04 02:04, 5年前 , 2F
if [ $(bc <<< "$NTP <= 0.100001" ) -eq 1 ]
12/04 02:04, 2F

12/04 18:03, 5年前 , 3F
用bc
12/04 18:03, 3F

12/05 23:20, 5年前 , 4F
$(bc <<< "$NTP <= 0.100001" ,請問bc<<<這是什麼?
12/05 23:20, 4F

12/06 16:00, 5年前 , 5F
expr 3.1415 \> 3.14159 >/dev/null && echo ">" || echo
12/06 16:00, 5F

12/06 16:00, 5年前 , 6F
"<="
12/06 16:00, 6F

12/06 17:35, 5年前 , 7F
bc 是指令,<<< 是 Bash 的 here string
12/06 17:35, 7F

12/06 19:41, 5年前 , 8F
Bash 使用手冊明明就有說只支援整數運算
12/06 19:41, 8F
文章代碼(AID): #1S1K5HN4 (Linux)
文章代碼(AID): #1S1K5HN4 (Linux)