Shell數學計算(算術運算,數學計算命令
算術運算符
介紹一下常見的 Shell 算術運算符
算術運算符 | 含義 |
---|---|
+、- | 加法(或正號)、減法(或負號) |
*、/、% | 乘法、除法、取餘(取模) |
** | 冪運算 |
++、– | 自增和自減,可以放在變量的前面也可以放在變量的後面 |
<、<=、>、>= | 比較符號(小於、小於等於、大於、大於等於) |
==、!=、= | 比較符號(相等、不相等;對於字符串,= 也可以表示相當於) |
<<、>> | 向左移位、向右移位 |
=、+=、-=、*=、/=、%= | 賦值運算符,例如 a+=1 相當於 a=a+1,a-=1 相當於 a=a-1 |
值得注意的是Shell 和其它編程語言不同,Shell 不能直接進行算數運算,必須使用數學計算命令
[root@system ~]# echo 2+8
2+8
從上面可以看出,Shell 不會直接進行算術運算,而是把+兩邊的數據(數值或者變量)當做字符串,把+當做字符串連接符,最終的結果是把兩個字符串拼接在一起形成一個新的字符串。
這是因爲,在 Bash Shell 中,如果不特別指明,每一個變量的值都是字符串,無論你給變量賦值時有沒有使用引號,值都會以字符串的形式存儲。
數學計算命令
要想讓數學計算發揮作用,必須使用數學計算命令
運算命令 | 含義 |
---|---|
(( )) | 用於整數運算,效率很高,推薦使用。 |
let | 用於整數運算,和 (()) 類似。 |
$[] | 用於整數運算,不如 (()) 靈活。 |
expr | 可用於整數運算,也可以處理字符串。比較麻煩,需要注意各種細節,不推薦使用。 |
bc | Linux下的一個計算器程序,可以處理整數和小數。Shell 本身只支持整數運算,想計算小數就得使用 bc 這個外部的計算器。 |
declare -i | 將變量定義爲整數,然後再進行數學運算時就不會被當做字符串了。功能有限,僅支持最基本的數學運算(加減乘除和取餘),不支持邏輯運算、自增自減等,所以在實際開發中很少使用。 |
(()) 可以用於整數計算,bc 可以小數計,比較常用。
Shell (( )) 的用法
雙小括號 (( )) 是 Bash Shell 中專門用來進行整數運算的命令,它的效率很高,寫法靈活,是企業運維中常用的運算命令。
語法格式爲:
((表達式))
注意:在 (( )) 中使用變量無需加上$前綴,(( )) 會自動解析變量名
(())用法 | 說明 |
---|---|
((表達式)) | 這種寫法可以在計算完成後給變量賦值 |
a=$((表達式)) | 可以在 (( )) 前面加上$符號獲取 (( )) 命令的執行結果 |
echo $((表達式)) | 需要立即輸出表達式的運算結果時,可以在 (( )) 前面加$符號。 |
((表達式, 表達式)) | 對多個表達式同時進行計算 |
示例:
1、綜合算術運算
[root@system1 ~]# a=$((1+2**3-4%3))
[root@system1 ~]# echo $a
8
2、邏輯運算
[root@system1 ~]# echo $((3<8))
1
[root@system1 ~]# echo $((3<2))
0
3、自增運算
[root@system1 ~]# a=1
[root@system1 ~]# echo $((a++))
1 #++在a的後面,那麼在輸出整個表達式時,會先輸出a的值,再自增
[root@system1 ~]# echo $a
2 #再次輸出,a爲2
[root@system1 ~]# echo $((++a))
3 #++在a的前面,輸出整個表達式時,先進行自增運算輸出
[root@system1 ~]# echo $a
3
4、同時對多個表達式進行計算
[root@system1 ~]# ((x=1+1,y=2+2))
[root@system1 ~]# echo $x,$y
2,4
bc 命令
bc 命令是任意精度計算器語言,通常在linux下當計算器用。
它類似基本的計算器, 使用這個計算器可以做基本的數學運算。
bc命令格式
bc(選項)(參數)
選項值
-i:強制進入交互式模式;
-l:定義使用的標準數學庫
; -w:對POSIX bc的擴展給出警告信息;
-q:不打印正常的GNU bc環境信息;
-v:顯示指令版本信息;
-h:顯示指令的幫助信息。
參數
文件:指定包含計算任務的文件。
示例:
[root@system1 ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
3*3
9
quit
[root@system1 ~]#
也可用管道符,將運算表達式交給bc計算
[root@system1 ~]# echo 1+1 | bc
2
scale=2 設小數位,2 代表保留兩位:
[root@system1 ~]# echo 'scale=2;(1.242-1.1134)/1' |bc
.12
計算平方和平方根
[root@system1 ~]# echo "2^3" | bc
8
[root@system1 ~]# echo "sqrt(100)" | bc
10