Skip to content

Latest commit

 

History

History
110 lines (85 loc) · 2.77 KB

Arithmetic.md

File metadata and controls

110 lines (85 loc) · 2.77 KB

算术运算

1. 算术表达式

((...)) 语法可以进行整数的算术运算。

注意

  • 只要算术结果不是 0 ,命令就算执行成功
  • bash 只能计算整型
  • 运算的类型结果是向下取整的整型

支持算术运算符

  • +
  • -
  • *
  • /
  • %
  • ** 指数
  • ++ 自增(前缀或后缀)
  • -- 自减(前缀或后缀)
((foo=1+2))
# 运算中计算变量
((foo++))
((foo=foo+3))

2. 数值的进制

Bash 默认是十进制,但是算术表达式中,可以用其他进制,格式如下:

  • number 没有任何特殊表示法的数字是十进制
  • 0number 八进制
  • 0xnumber 十六进制
  • base#number base进制的数

3. 位运算

  • << 位左移
  • >> 位右移
  • & 按位“与” 解释:3&10 只要对应的两个二进位都为 1 时,结果位就为 1,可写算式如下: 00000011&00001010 00000010 十进制 2
  • | 按位“或” 解释:只要对应的二个二进位有一个为 1 时,结果位就为1。参与运算的两个数均以补码出现。 9|5可写算式如下: 00001001|00000101 00001101 十进制为 13
  • ~ 对一个数字按位取反 解释:https://segmentfault.com/q/1010000005697515
  • ! 逻辑“否”
  • ^ 按位异或 解释:参与运算的两个值,如果两个相应位相同,则结果为 0。例如:10100001^00010001=10110000

4. 逻辑运算

Bash 支持以下逻辑运算符

  • < 小于
  • > 大于
  • <= 小于或等于
  • >= 大于或等于
  • == 相等
  • != 不相等
  • && 逻辑与
  • || 逻辑或
  • expr?expr2:expr3 三元运算符,expr1 计算结果为非零,则执行表达式 expr2,否则执行表达式 expr3

如果逻辑表达式为真,返回1,否则返回0

echo $((3>2))
# 输出 1

5. 赋值运算

算术表达式中,可以执行赋值运算。

foo=5
echo $((foo*=2))
# 输出 10

# 配合三元运算符,赋值变量 a
echo $(( a<1 ? (a+=1) : (a-=1) ))

6. 求值运算

逗号, 在算术表达式 $((...)) 内部是求值运算符,执行前后两个表达式,并返回后一个表达式的值。

echo $$(foo=1+2,3*4)
# 输出 12
echo $foo
# 输出 3

7. expr 命令

expr 命令支持算术运算,可以不用((...))语法。

注意空格

expr 3 + 2

foo=3
expr $foo + 2