Shell數學運算
數學計算
shell運算符
算術運算符 | 說明/含義 |
---|---|
+、- | 加法(或正号)、減法(或負号) |
*、/、% | 乘法、除法、取餘(取模) |
** | 幂運算 |
++、– | 自增和自減,可以放在變量的前面也可以放在變量的後面 |
!、&&、|| | 邏輯非(取反)、邏輯與(and)、邏輯或(or) |
<、<=、>、>= | 比較符号(小于、小于等于、大于、大于等于) |
==、!=、= | 比較符号(相等、不相等;對于字元串,= 也可以表示相當于) |
<<、>> | 向左移位、向右移位 |
~、|、 &、^ | 按位取反、按位或、按位與、按位異或 |
=、+=、-=、*=、/=、%= | 指派運算符,例如 a+=1 相當于 a=a+1,a-=1 相當于 a=a-1 |
Shell 和其它程式設計語言不同,Shell 不能直接進行算數運算,必須使用數學計算指令
數學計算指令
運算操作符/運算指令 | 說明 |
---|---|
(( )) | 用于整數運算,效率很高,推薦使用。 |
let | 用于整數運算,和 (()) 類似。 |
$[] | 用于整數運算,不如 (()) 靈活。 |
expr | 可用于整數運算,也可以處理字元串。比較麻煩,需要注意各種細節,不推薦使用。 |
bc | Linux下的一個電腦程式,可以處理整數和小數。 Shell 本身隻支援整數運算,想計算小數就得使用 bc 這個外部的電腦。 |
declare -i | 将變量定義為整數,然後再進行數學運算時就不會被當做字元串了。 僅支援最基本的數學運算(加減乘除和取餘),不支援邏輯運算、自增自減等 |
(()) 對整數進行數學運算
雙小括号(())是shell中專門處理整數運算的指令。效率很高,寫法靈活。
可以使用
$
擷取 (( )) 指令的結果,這和使用
$
獲得變量值是類似的
示例
#!/bin/bash
a=60
b=12
c=4
#複制給變量輸出
echo $((a-b))
d=$((b*c))
echo $d
#直接解析成變量輸出
echo $((a/b))
#綜合運算
((a=a+12,b=b*2))
echo $a
echo $b
#邏輯運算
echo $((a/3 == b))
#表達式結果輸出 将傳回第二個表達式的值
echo $((a+b, a-b))
傳回結果
48
48
5
72
24
1
48
bc 小型電腦
scale 小數保留位數,預設保留0位
ibase,obase 用于進制轉換,ibase是輸入的進制,obase是輸出的進制,預設是十進制;
互動模式
參數 | 作用 |
---|---|
-i | 強制進入互動式模式 |
-l | 定義使用的标準數學庫 |
-w | 對POSIX bc的擴充給出警告資訊 |
-q | 不列印正常的GNU bc環境資訊 |
-v | 顯示指令版本資訊 |
-h | 顯示指令的幫助資訊 |
輸入quit指令可以退出bc電腦
scale=2;1.1*1.5
1.65
ibase=10;obase=2;4*6
11000
obase=10;10^2
100
obase=10;sqrt(100)
10.00
quit
非互動模式
注意:ibase需要先寫,obase後寫,不然obase會成為預設的10
#!/bin/bash
a=1.1
b=1.5
#小數點位數為2
echo "scale=2;$a*$b"|bc
#輸入為十進制,輸出為二進制
echo "ibase=10;obase=2;4*6"|bc
#計算平方和平方根
echo "10^2"|bc
echo "sqrt(100)"|bc
傳回結果
1.65
11000
11110
100
10