Bash shell使用let、(( ))[]执行基本的算术操作。工具exprbc可以用来执行高级操作。

实战演练

可以像为变量分配字符串值那样为其分配数值。这些值会被相应的操作符视为数字。

  1. #!/bin/bash
  2. no1=4;
  3. no2=5;

let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要再添加$,例如:

  1. [root@dev workspace]# no1=4;
  2. [root@dev workspace]# no2=5;
  3. [root@dev workspace]# let result=no1+no2
  4. [root@dev workspace]# echo $result
  5. 9
  6. [root@dev workspace]#

let命令的其他用法如下:

自加操作

  1. let no1++

自减操作

  1. let no1--

简写形式

  1. let no+=6
  2. let no-=6

它们分别等同于let no=no+6let no=no-6

其他方法

操作符[]的使用方法和let命令一样:

  1. [root@dev workspace]# no1=4;
  2. [root@dev workspace]# no2=5;
  3. [root@dev workspace]# result=$[ no1 + no2 ]
  4. [root@dev workspace]# echo $result
  5. 9
  6. [root@dev workspace]#

[]中也可以使用$前缀,例如:

  1. result=$[ $no1 + 5 ]
  1. [root@dev workspace]# no1=4;
  2. [root@dev workspace]# no2=5;
  3. [root@dev workspace]# result=$[ $no1 + 5 ]
  4. [root@dev workspace]# echo $result
  5. 9
  6. [root@dev workspace]#

也可以使用操作符(())。出现在(())中的变量名之前需要加上$

  1. result=$(( no1 + 50 ))
  1. [root@dev workspace]# no1=4;
  2. [root@dev workspace]# no2=5;
  3. [root@dev workspace]# result=$(( no1 + 50 ))
  4. [root@dev workspace]# echo $result
  5. 54
  6. [root@dev workspace]#

expr 同样可以用于基本算术操作:

  1. result=`expr 3 + 4`
  1. [root@dev workspace]# result=`expr 3 + 4`
  2. [root@dev workspace]# echo $result
  3. 7
  4. [root@dev workspace]#
  1. result=$(expr $no1 + 5)
  1. [root@dev workspace]# no1=4;
  2. [root@dev workspace]# result=$(expr $no1 + 5)
  3. [root@dev workspace]# echo $result
  4. 9
  5. [root@dev workspace]#

注意

以上这些方法不支持浮点数,只能用于整数运算。

bc 是一个用于数学运算的高级实用工具

这个精密的计算器包含了大量的选项。我们可以借助它执行浮点数运算并使用一些高级函数:

  1. [root@dev workspace]# yum install -y bc
  2. echo "4 * 0.56" | bc
  3. 2.24
  4. no=54;
  5. result=`echo "$no * 1.5" | bc`
  6. echo $result
  7. 81.0

bc可以接受操作控制前缀。这些前缀之间使用分号分隔。

  • 设定小数精度。在下面的例子中,参数scale=2将小数位个数设置为2。因此,bc将会输出包含两个小数位的数值:

    1. echo "scale=2;22/7" | bc
    2. 3.14
  • 进制转换。bc可以将一种进制系统转换为另一种。来看看下面的代码是如何在十进制与二进制之间相互转换的:

    1. #!/bin/bash
    2. # 用途:数字转换
    3. no=100
    4. echo "obase=2;$no" | bc
    5. 1100100
    6. no=1100100
    7. echo "obase=10;ibase=2;$no" | bc
    8. 100
  • 计算平方以及平方根。

    1. echo "sqrt(100)" | bc #Square root
    2. echo "10^10" | bc #Square