8.1 运算符

赋值运算符

变量赋值,初始化或改变一个变量的值。

=

等号=赋值运算符,既可用于算术赋值,也可用于字符串赋值。

var=27
category=minerals  # "="左右不允许有空格

caution 注意,不要混淆=赋值运算符与=测试操作符

#   =   作为测试操作符

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。

/=

除等 (除以一个数)

%=

余等 (取余赋值)

小结

算术运算符常用于exprlet表达式中。

样例 8-2. 使用算术运算符

在早期的Bash版本中,整型变量是带符号的长整型数(32-bit),取值范围从 -2147483648 到 2147483647。如果算术操作超出了整数的取值范围,结果会不准确。

Bash版本 >= 2.05b, Bash支持了64-bit整型数。

caution 注意,Bash并不支持浮点运算,Bash会将带小数点的数看做字符串。

如果你想在脚本中使用浮点数运算,借助bc或外部数学函数库吧。

位运算

位运算很少出现在shell脚本中,在bash中加入位运算的初衷似乎是为了操控和检测来自portssockets的数据。位运算在编译型语言中能发挥更大的作用,比如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)

note &&也可以被用在list结构中连接命令。

||

或(OR)

小结

样例 8-3. 在条件测试中使用 && 和 ||

&&||运算符也可以用在算术运算中。

其他运算符

,

逗号运算符 逗号运算符用于连接两个或多个算术操作,所有的操作会被依次求值(可能会有副作用)。

逗号运算符常被用在for循环中。参看案例 11-13。

  1. 副作用,顾名思义,就是预料之外的结果。

最后更新于

这有帮助吗?