Shell腳本【6】Shell數學計算(算術運算符、數學計算命令)

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章