8.0 操作符与相关主题
8.1 操作符
赋值
变量赋值
注意:
不要混淆"=" 赋值操作符与=测试操作符
if [ "x$string1" = "x$string2" ]
#这样做是一种更安全的做法,可以防止两个变量中的一个为空所产生的错误(字符"x"作为前缀在等式两边是可以相互抵消的)
then
command
fi
算术操作符:
+ - * / % **(幂运算)
+= -= *= /= %=
#幂运算
# let "z=5**3"
# echo $z
125
#取模运算
# expr 5 % 3
2
#
# : $((n = $n +1 )) #":"必须要加,否则Bash会将"$((n = $n +1 ))"解释为一个命令
# echo $n
1
#
# : $[ m++ ] #这种写法也可以
# echo $m
1
算数操作符经常会出现在expr或let表达式中
注意:
在Bash中整形变量事实上是一个有符号的long(32bit)整形值,所表示的范围是-2147483648到2147483647,超过这个范围,将会产生溢出。
位移操作符:
<< : 左移一位(每次左移都相当于乘以2)
<<= : 左移赋值 let "var <<= 2" (变量var左移2位,即乘以4)
>> : 右移
>>= : 右移赋值
& : 按位与
&= :
| :按位或
|= :
~ :按位反
! :按位非
^ : 按位异或
^= :
# let "b= 2+2"
# echo $b
4
# let "c= $b<<2"
# echo $c
16
[root
数字常量:
SHELL脚本默认情况下都是把数字作为10进制来处理的,除非这个数字采用了特殊的标记或前缀,如果数字以0开头的话那么就是8进制数,如果是以0x开头的话那么就是16进制,如果中间嵌入了#的话,那么就被认为是BASE#NUMBER的标记法(有范围和符号限制)
10进制:
# let "dec = 32"
# echo $dec
32
8进制:
# let "oct = 032"
# echo $oct
26
2进制:
# let "bin = 2#0101010101010"
# echo $bin
2730
32进制:
# let "b32 = 32#77"
# echo $b32
231
64进制:
# let "b64 = 64#@_"
# echo $b64
4031
BASE的范围在2到64之间;
@dianxinguangchang.43F.zhongshanerlu.yuexiuqu.guangzhoushi.guangdongsheng
2016-10-19 10:51
8.1 操作符
赋值
变量赋值
注意:
不要混淆"=" 赋值操作符与=测试操作符
if [ "x$string1" = "x$string2" ]
#这样做是一种更安全的做法,可以防止两个变量中的一个为空所产生的错误(字符"x"作为前缀在等式两边是可以相互抵消的)
then
command
fi
算术操作符:
+ - * / % **(幂运算)
+= -= *= /= %=
#幂运算
# let "z=5**3"
# echo $z
125
#取模运算
# expr 5 % 3
2
#
# : $((n = $n +1 )) #":"必须要加,否则Bash会将"$((n = $n +1 ))"解释为一个命令
# echo $n
1
#
# : $[ m++ ] #这种写法也可以
# echo $m
1
算数操作符经常会出现在expr或let表达式中
注意:
在Bash中整形变量事实上是一个有符号的long(32bit)整形值,所表示的范围是-2147483648到2147483647,超过这个范围,将会产生溢出。
位移操作符:
<< : 左移一位(每次左移都相当于乘以2)
<<= : 左移赋值 let "var <<= 2" (变量var左移2位,即乘以4)
>> : 右移
>>= : 右移赋值
& : 按位与
&= :
| :按位或
|= :
~ :按位反
! :按位非
^ : 按位异或
^= :
# let "b= 2+2"
# echo $b
4
# let "c= $b<<2"
# echo $c
16
[root
数字常量:
SHELL脚本默认情况下都是把数字作为10进制来处理的,除非这个数字采用了特殊的标记或前缀,如果数字以0开头的话那么就是8进制数,如果是以0x开头的话那么就是16进制,如果中间嵌入了#的话,那么就被认为是BASE#NUMBER的标记法(有范围和符号限制)
10进制:
# let "dec = 32"
# echo $dec
32
8进制:
# let "oct = 032"
# echo $oct
26
2进制:
# let "bin = 2#0101010101010"
# echo $bin
2730
32进制:
# let "b32 = 32#77"
# echo $b32
231
64进制:
# let "b64 = 64#@_"
# echo $b64
4031
BASE的范围在2到64之间;
@dianxinguangchang.43F.zhongshanerlu.yuexiuqu.guangzhoushi.guangdongsheng
2016-10-19 10:51