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

作者: zchien (小建)   2018-12-07 00:05:03
※ 引述《zchien (小建)》之銘言:
: 我用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 ] 他竟然顯示不相等
: 請問這是什麼原因,我可以怎麼修正
我找到bc的用法了,但是會有問題
http://0rz.tw/FlVdf
ntpdate -q 10.37.82.23 > time.txt
# $NTP will show 類似 0.000304
NTP=$(grep delay time.txt | awk '{print $6}')
if [ `echo "$NTP"|bc` -ge `echo 0.100001 |bc` ] ; then
echo "NTP > 0.100001"
if
我使用sh -vx script 去看它顯示狀態
這會顯示
+[ 0.000304 -ge 0.100001 ]
+echo NTP > 0.100001
echo NTP > 0.100001
而且-ge 不論改成 -eq , -le 都是一樣的結果
請問這是什麼原因
用awk 也不行
作者: kdjf (我抓得到什麼呢?)   2018-12-07 00:16:00
你參考的文有給BC指令阿,但是你的script不知道在幹嘛上一篇有強者把可以動的程式給你了,先研究一下吧
作者: zchien (小建)   2018-12-07 00:38:00
強者的可用,很感謝,。我只是好奇,shell要如何用小數點以下的數值,做運算,有人說bc可用,但我好像遇到系統bug不論怎麼計算,都 比不出大小
作者: OSDBNetwork (路人甲)   2018-12-07 06:35:00
作者: HamalAri (哈馬‧阿里)   2018-12-07 09:06:00
前面不是也有人推文告訴你 bash 只支援整數嗎?
作者: da21510 (da21510)   2018-12-07 14:45:00
應該是你用錯之前還用bc寫演算法作業完全沒問題= =
作者: kdjf (我抓得到什麼呢?)   2018-12-07 22:02:00
所以你沒讀懂人家script在幹嘛阿.. shell只能用整數,就用bc把小數點移走
作者: zchien (小建)   2018-12-10 22:06:00
我用Solaris 10系統會有錯誤,它認不得 | bc的寫法
作者: kdjf (我抓得到什麼呢?)   2018-12-12 10:24:00
等等,你知道|是pipeline了嗎?
作者: zchien (小建)   2018-12-14 23:11:00
K大,我知道pipeline
作者: superpandal   2018-12-15 18:11:00
XD
作者: LinBuoRen (林博仁)   2018-12-18 18:43:00
你知道不同的 shell 有不同的腳本語言嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com