本博客只是用作自己學習和記錄使用,
詳細教程,請去鏈接: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')}'