在bash shell中可以利用let、(())和[]执行基本呢的算数运算。而在进行高级操作时,可以利用expr和bc两个工具进行计算。
1、let命令可以直接执行基本的算数计算。当使用let时,变量名之前不许要再添加$。
注意:let效率比(( ))低
let result=num1+num2
- <span style="font-family:Microsoft YaHei;font-size:16px;">#!/bin/bash
- a=5
- b=6
- let result=a*b
- echo $result
- let result*=result #注意此行,变量与符号之间不能有空格
- echo "the result is $result"</span>
30
the result is 900
2、操作符[]的使用方法和let命令相似。
result=$[num1+num2 ]注意等号两边不能有空格
在[]中也可以用$前缀。
- <span style="font-family:Microsoft YaHei;font-size:16px;">#!/bin/bash
- a=5
- b=6
- result=$[a+b ]
- echo "The result is $result"
- result=$[$a+$a ]
- echo "the result is $result"</span>
The result is 11
the result is 10
3、使用(())也可以进行计算,但在使用(())时,变量名前需要加上$.(常用,且效率高)
result=$((num1 +num2 ))
- <span style="font-family:Microsoft YaHei;font-size:16px;">#!/bin/sh
- num1=5
- num2=6
- result=$((num1+num2))
- echo "the result is $result"
- </span>
the result is 11
4、expr同样可以用于基本的数据操作
result=`expr4+5`
result=$(expr$num1+2)
实例:
- <span style="font-family:Microsoft YaHei;font-size:16px;">#!/bin/sh
- num1=5
- num2=6
- result=$(expr$num1 + $num2) #注意$num1和$num2与+之间一定要有空格
- echo "the result is $result"</span>
the result is 11
expr 2 + 2 结果为:4
expr 2+2结果为:2+2,所以数字之间要有空格
expr 2 \* 2结果为:4,乘号要进行转义
expr用法:参见ssh-copy-id(which ssh-copy-id)
less /usr/bin/ssh-copy-id
root@storm2 .ssh]# expr "zookeeper.out" : ".*\.pub"
0
[root@storm2 .ssh]# expr "id_rsa.pub" : ".*\.pub"
10 10是匹配后的字符数
可以用来进行文件或字符串的扩展名
以上这些方法只能用与整数的计算,而不支持浮点数的计算。
bc是一个用于数学运算的高级工具。这是一个精密计算器包含了大量的选项。我们可以借助它执行浮点数运算,并应用一些高级函数。
echo "4*6.4" |bc
设定小数精度。参数scale=2将小数位数个数设置为2.
scale=n(当输入这条命令时,除法运算可以保留n位小数)
echo "scale=2;13/8" | bc
1.62
用bc进行进制转换。进制转换设置参数obase=进制数。
- <span style="font-family:Microsoft YaHei;font-size:16px;">#!/bin/bash
- no=100
- echo "obase=2;$no" |bc
- no=111111
- echo "obase=10;ibase=2;$no" |bc</span>
1100100
63
用bc计算平方及平方根
echo "sqrt(100)" |bc
10
echo "10^10" |bc
10000000000
bc可以用来进行科学计算
seq -s "+" 10|bc 用来计算从1加到10,结果为55