shell編寫時對浮點的處理

2021-09-24 14:52:08 字數 2059 閱讀 3307

bash中的變數沒有資料型別的定義,所以在處理字串和數值時會帶來麻煩。

例如:使用-eq比較數值,=比較字串等;

常用的let、expr僅支援整數運算,不支援浮點數計算。要實現浮點數計算,可以使用bc或awk。

shell bc支援浮點數,是乙個用於數**算的高階工具。5

3.5*2.3    回車

8.0ctrl+d 退出

當然bc還支援很多運算子,比如/ * - +。還支援變數,條件比較操作符,邏輯操作符,判斷語句和迴圈語句

a=1

while(a++<100)

sum+=a

sum5049

1.設定小數精度,使用引數scale。

[root@localhost ]# echo "scale=5;3/21" | bc

.14285

[root@localhost ]# echo "scale=2;3/21" | bc

.14

2.進製轉換,使用引數obase,ibase(表示輸出,輸入採用什麼進製)

[root@localhost ]# william=100;echo "obase=2;$william" | bc

1100100

[root@localhost ]# william=100;echo "obase=10;ibase=2;$william" | bc

4[root@localhost ]# william=100;echo "obase=10;ibase=5;$william" | bc

25

3.計算平方和平方根

[root@localhost ]# echo "sqrt(100)" | bc

10[root@localhost ]# echo "10^10" | bc

10000000000

4.浮點數比較

ver1="1.01"

ver2="1.02"

if [ `echo "$==$"|bc` -eq 1 ] ; then

echo -e "v1 == v2\n"

fiecho "$ver1 > $ver2"|bc

0

更好的方法,是借助awk強大的函式功能

1、計算浮點數

n=`awk -v x=2.53 -v y=3.64 'begin '`

echo $n

0.70

或n=`awk 'begin '`

echo $n

0.70

或echo '2.53 3.64'|awk ''

0.70

2、比較浮點數

echo 123.45 123.44 | awk ' else }'

123.450000 greater then 123.440000

或ver2="1.02"

ver1="1.01"

echo $ $ |awk 'else }'

if [ `echo $ $ |awk 'else }'` -eq 1 ] ; then

echo -e "v1 == v2 a\n"

fi

還可以用支援浮點預算的語言,如perl或python等,放在bash指令碼中執行:

perl -e 'if ($ar**[0]>$ar**[1]) else ' 123.45 123.44

123.450000 greater then 123.440000

在此感謝原創提供的文獻

編寫SHELL時需要注意空格

以下這是一段簡單的linux shell 功能是用於查詢當前目錄及其所有目錄中,哪些檔案中包括了 html 這四個字元,並將該檔名給列印出來,咋一看這段 應該是沒有問題的,但是實際上卻存在著兩個問題,先看下面的 吧 1 第乙個問題是賦值語句不能夠在變更與值之間有空格,如上面的這一句 wordnum ...

編寫shell指令碼的方式來處理nginx

使用原始碼包安裝的nginx沒辦法使用 service nginx start 或 etc init.d nginx start 進行操作和控制,所以寫了以下的服務控制指令碼。可以使用的選項有 start 啟動 stop 停止 reload 過載 restart 重啟 status 狀態 test ...

編寫Shell指令碼列印輸出變數 及編寫時注意事項

shell指令碼語言是一種非類解釋型語言,弱語言型別 linux支援的所有shell中,都可以通過賦值符號為變數賦值 shell指令碼變數可以分為兩類,區域性變數和環境變數 區域性變數是在自己編寫的shell指令碼內部使用,環境變數可以在系統上面,在bash系統之上使用 其他的程序或者程式都可以呼叫...