[20181229]bash shell的算術運算 .txt

lfree發表於2018-12-29

[20181229]bash shell的算術運算 .txt


--//bash shell的算術運算現在已經改進許多,自己許多操作不熟悉,程式設計還是按照老方法處理,自己做一些總結.


1.使用let內部命令:

$ a=12

$ let a=a+1

$ echo $a

13

$ let a=a\*3

$ echo $a

39


--//還可以執行如下:

$ let "a+=1"

$ echo $a

40


--//這樣的方式最大的缺點是不能有空格.


2.使用expr命令:

--//這樣的方式要使用分開:

$ a=12

$ expr $a \* 4

48


$ b=$(expr $a + 13 )

$ echo $b

25


3.比較新的方式使用如下:

$(( expression ))

$[ expression ]


--//使用$(( expression ))

$ echo $(( a+ b))

25

$ echo $(( a+ b ))

25

$ echo $((a+b))

25

$ echo $(($a+$b))

25


--//使用$[ expression ]

$ echo $[a+b]

25

$ echo $[$a+b]

25

$ echo $[$a+$b]

25

$ echo $[$a*$b]

156


--//這樣的方式比較靈活,裡面可以加或者不加$符號,混合使用也可以.

--//我個人覺得$[ expression ]更好一些.另外就是的方式在if語句裡面語法寫出如下:

if [[ string expression ]]

then

    command

fi


--//也可以使用如下語法:

if (( numeric expression ))

then

    command

fi


--//以前比較數字使用:

#-eq 等於

#-ne 不等於

#-gt 大於 

#-ge 大於等於

#-lt 小於 

#-le 小於等於 

--//感覺不直觀.每次我給查手冊.現在可以寫出如下:


$ cat a.sh

#!/bin/bash

a=100

if (( $a > 100 ))

then

    echo "a is equal to $a"

else

    echo "a is not equal"

fi


$ . a.sh

a is not equal


4.在複雜的運算建議使用外部命令bc.


5.還有一些進位制轉換,bash並不是很靈活,僅僅支援其它型別轉換為十進位制模式.而且首先必須宣告變數為整形.


--//2進位制

$ declare -i a

$ a=2#1001

$ echo $a

9


--//8進位制

$ a=8#17

$ echo $a

15

$ a=8#19

-bash: 8#19: value too great for base (error token is "8#19")


--//16進位制

$ a=16#FF

$ echo $a

255


$ a=16#f0

$ echo $a

240


--//10進位制轉換16進位制.

$ b=$(printf "%x" 240)

$ echo $b

f0


--//8進位制轉換10進位制.

$ b=$(printf "%d" 017)

$ echo $b

15


--//16進位制轉換10進位制.

 b=$(printf "%d" 0xf0)

$ echo $b

240


--//其它10轉8,10轉2視乎無法使用printf.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2286893/,如需轉載,請註明出處,否則將追究法律責任。

相關文章