高级Bash编程指南__第二部分__基本__8.0 操作符与相关主题

8.0 操作符与相关主题
8.1 操作符
赋值
变量赋值

注意:
不要混淆"=" 赋值操作符与=测试操作符
if [ "x$string1" = "x$string2" ] 
#这样做是一种更安全的做法,可以防止两个变量中的一个为空所产生的错误(字符"x"作为前缀在等式两边是可以相互抵消的)
then
command
fi

算术操作符:
+ - * / %  **(幂运算)
+=  -=  *=  /=  %=

#幂运算
[root@cy-cloud02 exercise]# let "z=5**3"
[root@cy-cloud02 exercise]# echo $z
125

#取模运算
[root@cy-cloud02 exercise]# expr 5 % 3
2
[root@cy-cloud02 exercise]#

[root@cy-cloud02 exercise]# : $((n = $n +1 ))    #":"必须要加,否则Bash会将"$((n = $n +1 ))"解释为一个命令
[root@cy-cloud02 exercise]# echo $n
1
[root@cy-cloud02 exercise]#

[root@cy-cloud02 exercise]# : $[ m++ ]   #这种写法也可以
[root@cy-cloud02 exercise]# echo $m
1

算数操作符经常会出现在expr或let表达式中

注意:
在Bash中整形变量事实上是一个有符号的long(32bit)整形值,所表示的范围是-2147483648到2147483647,超过这个范围,将会产生溢出。



位移操作符:

<<  : 左移一位(每次左移都相当于乘以2)
<<= :   左移赋值  let "var <<= 2" (变量var左移2位,即乘以4)
>> : 右移
>>= :   右移赋值
& :  按位与
&= :
| :按位或
|= :
~ :按位反
! :按位非
^ : 按位异或
^= :

[root@cy-cloud02 exercise]# let "b= 2+2"
[root@cy-cloud02 exercise]# echo $b
4
[root@cy-cloud02 exercise]# let "c= $b<<2"
[root@cy-cloud02 exercise]# echo $c
16
[root


数字常量:
SHELL脚本默认情况下都是把数字作为10进制来处理的,除非这个数字采用了特殊的标记或前缀,如果数字以0开头的话那么就是8进制数,如果是以0x开头的话那么就是16进制,如果中间嵌入了#的话,那么就被认为是BASE#NUMBER的标记法(有范围和符号限制)

10进制:
[root@cy-cloud02 exercise]# let "dec = 32"
[root@cy-cloud02 exercise]# echo $dec
32


8进制:
[root@cy-cloud02 exercise]# let "oct = 032"
[root@cy-cloud02 exercise]# echo $oct
26

2进制:
[root@cy-cloud02 exercise]# let "bin = 2#0101010101010"
[root@cy-cloud02 exercise]# echo $bin
2730

32进制:
[root@cy-cloud02 exercise]# let "b32 = 32#77"
[root@cy-cloud02 exercise]# echo $b32
231

64进制:
[root@cy-cloud02 exercise]# let "b64 = 64#@_"
[root@cy-cloud02 exercise]# echo $b64
4031


BASE的范围在2到64之间;










@dianxinguangchang.43F.zhongshanerlu.yuexiuqu.guangzhoushi.guangdongsheng

2016-10-19 10:51

猜你喜欢

转载自listen-raining.iteye.com/blog/2331534