8.1 运算符
赋值运算符
变量赋值,初始化或改变一个变量的值。
=
等号=赋值运算符,既可用于算术赋值,也可用于字符串赋值。
var=27
category=minerals # "="左右不允许有空格
注意,不要混淆
=赋值运算符与=测试操作符。
# = 作为测试操作符
if [ "$string1" = "$string2" ]
then
command
fi
# [ "X$string1" = "X$string2" ] 这样写是安全的,
# 这样写可以避免任意一个变量为空时的报错。
# (变量前加的"X"字符规避了变量为空的情况)算术运算符
+
加
-
减
*
乘
/
除
**
幂运算
%
取余(返回整数除法的余数)
5/3=1,余2 取余运算符经常被用于生成一定范围内的数( 案例9-11, 案例9-15),以及格式化程序输出(案例 27-16,案例 A-6)。 取余运算符还可以用来产生素数(案例A-15),取余的出现大大扩展了整数的算术运算。
样例 8-1. 最大公约数
+=
加等 (加上一个数) let "var += 5" 的结果是var变量的值增加了5。
-=
减等 (减去一个数)
*=
乘等 (乘以一个数) let "var *= 4" 的结果是var变量的值乘了4。
/=
除等 (除以一个数)
%=
余等 (取余赋值)
小结
算术运算符常用于expr或let表达式中。
样例 8-2. 使用算术运算符
在早期的Bash版本中,整型变量是带符号的长整型数(32-bit),取值范围从 -2147483648 到 2147483647。如果算术操作超出了整数的取值范围,结果会不准确。
Bash版本 >= 2.05b, Bash支持了64-bit整型数。
注意,Bash并不支持浮点运算,Bash会将带小数点的数看做字符串。
如果你想在脚本中使用浮点数运算,借助bc或外部数学函数库吧。
位运算
位运算很少出现在shell脚本中,在bash中加入位运算的初衷似乎是为了操控和检测来自ports或sockets的数据。位运算在编译型语言中能发挥更大的作用,比如C/C++,位运算提供了直接访问系统硬件的能力。然而,聪明的vladz在他的base64.sh(案例 A-54)脚本中也用到了位运算。 下面介绍位运算符。
<<
左移运算符(左移1位相当于乘2)
<<=
左移赋值
let "var <<= 2" 的结果是var变量的值向左移了2位(乘以4)
>>
右移运算符(右移1位相当于除2)
>>=
右移赋值
&
按位与(AND)
&=
按位与等(AND-equal)
|
按位或(OR)
|=
按位或等(OR-equal)
~
按位取反
^
按位异或(XOR)
^=
按位异或等(XOR-equal)
逻辑(布尔)运算符
!
非(NOT)
&&
与(AND)
&&也可以被用在
list结构中连接命令。
||
或(OR)
小结
样例 8-3. 在条件测试中使用 && 和 ||
&&和||运算符也可以用在算术运算中。
其他运算符
,
逗号运算符 逗号运算符用于连接两个或多个算术操作,所有的操作会被依次求值(可能会有副作用)。
逗号运算符常被用在for循环中。参看案例 11-13。
副作用,顾名思义,就是预料之外的结果。
最后更新于
这有帮助吗?
