算數運算
在Bash中可以使用let,(()),$(())或者$[]進行基本的整數運算,還可以使用bc進行高級運算,包括小數運算,還可以使用expr命令進行整數運算,還能判斷參數是否爲整數
注意:let和(())幾乎完全等價,除了做數學運算,還支持數據表達式判斷,例如數值a是否等於3
let a==3或((a==3)),但一般不用,我們用test命令來做,test '$a' -eq 3
num=10
let num=num+10 #等價於 let num+=10
let num=num-10 #等價於 let num-=10
echo $num
let可以使用(())進行替換,如果最後一個算數表達式的結果爲0,則返回狀態碼1,否則返回0
$(())或者$[]
num=10
echo $((num+=6))
echo $[num-=16]
此操作也可以爲變量賦值
num=$((num-=10));echo $num
num=$[num-=6];echo $num
在算數計算過程中,等號右邊的變量可以帶着$符號,但等號左邊的變量不允許帶$符號
let num=#num-1 == let num=num-1
num=$(($num-1)) == num=$((num-1))
$((num=$num-1)) == $((num=num-1)) != $(($num=num-1))
#
$((x+y)) 加法運算 echo $((1+2))
$((x-y)) 減法運算 echo $((1-2))
$((x*y)) 乘法運算 echo $((1*2))
$((x/y)) 觸發運算(取商) echo $((8/6))
$((x%y)) 取餘運算 echo $((5%3))
$((x++)) 自加運算 echo $((9++))
$((x--)) 自減運算 echo $((9--))
$((x**y)) 冪運算 echo $((3**3))
運算:
1++ --1
shell變量可以自增自減,‘++’,‘--’變量自動加一或者減一,
位置不同,導致最終的結果不同
x++ 先返回結果,在加1
++x 先執行加1,在返回結果
x-- 先返回結果,在減一
--x 先減一,在返回結果
x=10;echo $((x++));echo $x
10
11
x=10;echo $((++x));echo $x
11
11
在使用自增自減變量賦值時,需注意賦值是否立即生效
x=10;y=$((x++));echo $y;echo $y
10
10
因爲y=$((x++))賦值給y是加一之前的值,雖然賦值結束,$((x++))變爲11,但此值和y無關
x=10;y=$((++x));echo $y;echo $y
#常用的運算方法:
let i=i-1
let i=$i-1
let i-=1
i=$((i-1))
i=$(($i-1))
i=$[i-1]
i=$[$i-1]
數組也可以進行數學運算
數組實質是變量,可以支持自增自減操作
變量內存空間是隨機的,而數組內存空間是順序的
arr_text[0]=10
let arr_text[0]=${arr_text[0]}-1;echo ${arr_text[0]}
let arr_text[0]-=1
[root@localhost ~]# echo $((arr_text[0]++))
8
[root@localhost ~]# echo $((++arr_text[0]))
10
[root@localhost ~]# echo $((arr_text[0]++));echo ${arr_text[0]}
10
11
[root@localhost ~]# echo $((++arr_text[0]))
12
[root@localhost ~]#
expr(簡述加減運算)
#注意:運算符與數值之間有空格隔開
expr arg1 + arg2 加法
expr arg1 - arg2 減法
expr arg1 \* arg2 乘法
expr arg1 / arg2 除法
expr arg1 % arg2 取餘
bc命令高級算數運算
bc可用於浮點數的計算,bc爲linux中的計算器,功能豐富,“強大的讓人吐血”
支持自定義變量,支持自定義函數,支持邏輯運算,支持科學計算
bc
[root@localhost ~]# bc -q
pie=3.1415926
r=3
pie*r*r #乘法
28.2743334
pie*r^2 #代表冪次方
28.2743334
pie*r^3
84.8230002
quit #退出
#bc支持自增自減運算
root@localhost ~]# bc -q
r=3
r++
3
++r
5
--r
4
r++
4
#人性化操作(批處理)
var=`echo "option1;option2;…………;expression"|bc`
options:一般設置精度(scale),變量賦值 #只對除法,取餘,冪運算有效
expression:計算表達式
#計算圓的面積
area=`echo "scale=2;r=3;3.14*r*r"|bc`
echo $area
#bc接受使用here string和here document接受參數,最常用放置在腳本中;
[root@localhost ~]# cat yuan.sh
#!/bin/bash
#bc for here string
#計算圓的面積
var1=haha
var2=hahaha
area=`bc<<EOF
scale=2
r=3
3.1415*r*r
EOF`
echo $area
[root@localhost ~]# bash yuan.sh
# 補0操作
例如 0.1+0.1=0.2 不會顯示0.2,只是顯示.2
echo 0`echo "0.1+0.1"|bc`
printf "%.2f\n" `echo "0.1+0.1"|bc`