linux-shell編程2:算數運算

算數運算

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