[20181229]bash shell的算术运算 .txt

[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.


请使用浏览器的分享功能分享到微信等