Bash shell使用let、 (( ))和[]执行基本的算术操作。工具expr和bc可以用来执行高级操作。
-
可以为变量分配数值,这些值会被相应的操作符视为数字。
-
let
命令可以直接执行基本的算术操作。当使用let
时,变量名之前不需要再添加$
。ming@ming-Aspire-E5-572G:~$ num1=4;num2=5 ming@ming-Aspire-E5-572G:~$ let result=num1+num2 ming@ming-Aspire-E5-572G:~$ echo $result 9
-
let
命令的其他用法如下- 自增:
let num++
、let ++num
- 自减:
let num--
、let --num
- 简写形式:
let num+=6
…
- 自增:
-
操作符
[]
的使用方法和let命令一样,只是需要在方括号前面加上$
符号。ming@ming-Aspire-E5-572G:~$ result=$[num1+num2] ming@ming-Aspire-E5-572G:~$ echo $result 11
它也支持自增、自减等操作。
-
也可以使用操作符
(())
,和[]
类似。ming@ming-Aspire-E5-572G:~$ result=$((num1+100)) ming@ming-Aspire-E5-572G:~$ echo $result 106
-
expr
同样可以用于基本算术操作。此时,引用变量时需要加上$
符号。ming@ming-Aspire-E5-572G:~$ result=`expr 3 + 4` ming@ming-Aspire-E5-572G:~$ echo $result 7 ming@ming-Aspire-E5-572G:~$ result=$(expr $num1 + 5) ming@ming-Aspire-E5-572G:~$ echo $result 11
以上这些方法不支持浮点数,只能用于整数运算。
bc
是一个用于数学运算的高级实用工具,这个精密的计算器包含了大量的选项。我们可以借助它执行浮点数运算并使用一些高级函数。
ming@ming-Aspire-E5-572G:~$ echo "4 * 0.56" | bc
2.24
ming@ming-Aspire-E5-572G:~$ no=54
ming@ming-Aspire-E5-572G:~$ result=`echo "$no * 1.5" | bc`
ming@ming-Aspire-E5-572G:~$ echo $result
81.0
bc可以接受操作控制前缀。这些前缀之间使用分号分隔。
-
设定小数精度
在下面的例子中,参数scale=2
将小数位个数设置为2。因此, bc将会输出包含两个小数位的数值:ming@ming-Aspire-E5-572G:~$ echo "scale=2;22/7" | bc 3.14
-
进制转换
用bc可以将一种进制系统转换为另一种。来看看下面的代码是如何在十进制与二进制之间相互转换的:ming@ming-Aspire-E5-572G:~$ no=100 ming@ming-Aspire-E5-572G:~$ echo "obase=2;$no" | bc 1100100 ming@ming-Aspire-E5-572G:~$ no=1100100 ming@ming-Aspire-E5-572G:~$ echo "obase=10;ibase=2;$no" | bc 100
ibase
表示 input base,即输入数字的基数;
obase
表示 output base,即输出数字的基数。 -
计算幂以及平方根
ming@ming-Aspire-E5-572G:~$ echo "sqrt(100)" | bc 10 ming@ming-Aspire-E5-572G:~$ echo "10^10" | bc 10000000000