shell中進行算術運算的各種方法


本博客只是用作自己學習和記錄使用,

詳細教程,請去鏈接:http://www.zsythink.net/archives/1145

 

shell中,無法直接進行算術運算,如果直接進行算術運算會出現如下情況。

shell中進行算術運算的各種方法

從上圖可以看出,默認情況下,shell不會直接進行算術運算,而是把"算術符號"當做"字符串"與兩個變量的值連接在了一起,形成了一個新的字符串,那么,在bash中,應該怎樣進行算術運算呢?細分之下,常用方法有6種,如下。

 

此處先對各種方法進行概述,后續會針對每種方法給出示例。

(1) 使用let命令進行算術運算,只支持整數運算。

(2) 使用expr命令進行算術運算,只支持整數運算。

(3) 使用運算語法:$[算術表達式]只支持整數運算。

(4) 使用運算語法:$((算術表達式))只支持整數運算。

(5) 在初始化變量時,將變量定義為"整數"類型,則可直接進行整數運算。

(6) 使用bc命令進行算術運算,支持整數和小數運算。

(7) 使用awk命令進行算數運算,支持整數和小數運算。

 

上述各種方法的示例如下

方法一:借助let命令進行整數運算

let命令是shell的內建命令,我們可以借助let命令進行整數運算,這種方法只支持整數運算,不支持包含小數的運算,示例如下。

 

 

 

從上圖中可以看到,當借助let命令進行算術運算時,"運算過程"與"運算結果"中都不會包含小數,而且這種方法需要借助一個變量,將計算后的值賦值給這個變量后進行輸出,但是let命令是shell內建命令,這是它的優勢,只要當前服務器上存在shell,即可使用它進行整數運算。

 

方法二:借助expr命令進行算術運算

expr命令也支持算術運算功能,雖然它的功能不止於此,但是此處我們只使用它進行算術運算,expr命令與let命令相似,也只能進行整數運算,而且,使用expr命令進行算術運算時,需要注意以下兩點

1、數值與運算符號之間需要用空格隔開,否則無法進行算術運算。

2、使用expr命令進行乘法運算時,需要將"乘號"轉義,否則會報錯。

示例如下,下圖中的紅線標注的部分體現了上述兩點注意點。

 

 

當然,如果我們想要使用經過計算過的值,可以使用'命令引用'。

 

 

方法三:借助bc命令進行算術運算

bc命令大家可能已經很熟悉了,它是linux下最常用的"計算器",我們可以借助bc命令進行算術運算,使用這種方法的優勢就是支持小數運算。

注意:在使用"除法"時,需要指定小數點精度,否則運算結果中不會包含小數,使用scale指定小數點精度。

示例如下:

 

 

上圖中,如果使用bc命令進行除法運算,同時希望計算結果按照指定的精度顯示,需要使用scale指定小數點精度,上圖中scale=3表示顯示小數點后面的三位精度。

但是需要注意,當使用bc命令時,如果運算結果為不到1的小數,則不會顯示小數點前面的"零",示例如下。

 

 

除了使用管道,將echo輸出的內容重定向到bc,還可以使用如下方法利用bc,它們是等效的

 

 

方法四:使用運算語法 $[算術表達式]

這種方法使用比較方便,示例如下。

 

 

方法五:使用運算語法 $((算術表達式))

這種方法與方法四類似,示例如下。

 

 

方法六:將變量聲明為整形

這種方法也比較簡單,可以直接將變量聲明為"整數",然后即可直接進行整數運算,示例如下

 

方法七:使用awk命令

情況具體示例

加減乘除

[root@cnblogs ~]#  t1=1
[root@cnblogs ~]# t2=3
[root@cnblogs ~]# awk 'BEGIN{print '$t1'+'$t2'}'
4
[root@cnblogs ~]# awk 'BEGIN{print '$t1'-'$t2'}'
-2
[root@cnblogs ~]# awk 'BEGIN{print '$t1'*'$t2'}'
3

 

[root@cnblogs ~]# t1=1
[root@cnblogs ~]# t2=3
[root@cnblogs ~]# awk 'BEGIN{print ('$t1'/'$t2')}'
0.333333
#因為沒有限制小數點位數
#下面是控制位數的,使用printf
awk 'BEGIN{printf "%.1f\n",('$t1'/'$t2')}'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM