算术运算符

算术运算符包括

+  -  *  /  %  ++  --

算术运算符是用于数值类型的计算,在shell中,算术运算符只能用于整数类型的计算,不能用于符点数类型的计算。

bash内置算术运算符语法

bash内置了以上所有的算术运算符,其中++ --为后置自增和后置自减。

内置运算符的语法格式为

$((a+b))
$((a++))

注意,如下的脚本文件在第3行$((a++))是会报错的,

#!/bin/bash
a=1
$((a++))
echo $a

执行结果如下:

./a.sh: line 3: 1: command not found
2

这是因为$((a++))的效果是先返回1,再将a自增1,返回的1会被当成是一条命令,所以报1: command not found,这和在shell提示符下执行 $(echo hello)是一样的道理,会报hello: command not found所以我们要注意,一行代码,它是执行一条命令,还是我们要拿到这条命令的输出

不过,虽然会报错,但a的确已经自增了。看下面的代码及输出

#!/bin/bash
a=1
echo $((a++))
echo $a

输出:

1
2
  • 示例

#!/bin/bash
a=1
b=2
echo $((a+b))                # 3
echo $((a-b))                # -1
echo $((a\*b))                # Error,去掉转义字符也出错
echo $((a/b))                # 0
echo $((a%b))                # 1
echo $((a++))                # 1
echo $a                    # 2
echo $((b--))                # 2
echo $b                    # 1

expr工具

我们还可以利用其他的命令进行算术运算,常用的命令有 exprawk。这里,我们详细地介绍一下expr,expr命令的用法可以执行expr --help查看。

expr命令中的算术运算符也只能处理整数类型的运算,支持的算术运算符有(++--运算符在expr --help命令中未找到)

+  -  *  /  %

下面给出expr工具的用法示例(& | 另行查看使用方法),注意:运算符的左右一定要有一个空格

#!/bin/bash
a=1
b=2
echo $(expr $a + $b)                # 3
echo $(expr $a - $b)                # -1
echo $(expr $a \* $b)                # 2    必须加上转义字符斜杠
echo $(expr $a / $b)                # 0
echo $(expr $a % $b)                # 1

let工具

  • 示例

#!/bin/bash
a=1
b=2
let "sum=a+b"
let "difference=a-b"
let "production=a*b"    # * 号无需转义
let "quotient=a/b"
let "remainder=a%b"
let "increment=a++"
let "decrement=b--"
echo $sum                # 3
echo $difference        # -1
echo $production        # 2
echo $quotient            # 0
echo $remainder        # 1
echo $increment        # 1
echo $decrement        # 2
echo $a                # 2
echo $b                # 1

编程指引

在算术运算中,尽量采用expr工具与变量赋值的方式对变量进行操作,如

#!/bin/bash
a=1
b=2
a=$(expr $a + 1)        # 变量自增
sum=$(expr $a + $b)    # 求和并赋给新的变量

参考:

[1] https://bash.cyberciti.biz/guide/Perform_arithmetic_operations

Last updated

Was this helpful?