红联Linux门户
Linux帮助

Linux shell脚本攻略--数学运算

发布时间:2016-09-25 09:34:29来源:linux网站作者:SK_Lavender
在bash shell中,可以采用(1) let (2) (()) (3) [] 进行基本的算数运算。在高级操作中,可以采用(4) expr (5) bc进行高级运算。
 
(1)、let 命令
在用普通的变量赋值方法定义数值的时候,变量是被存储成字符串的形式。比如
sk_lavender@sk-pc:~$ num=1
sk_lavender@sk-pc:~$ num=2
此时,可以采用let命令来直接进行基本的算术操作。使用let命令时,变量名之前不需要再次添加$符号。
sk_lavender@sk-pc:~$ num1=1
sk_lavender@sk-pc:~$ num2=2
sk_lavender@sk-pc:~$ let num3=num1+num2
sk_lavender@sk-pc:~$ echo $num3
3
sk_lavender@sk-pc:~$ # 注意不要添加空格,否则报错
sk_lavender@sk-pc:~$ let num3 = num1 + num2
bash: let: =: 语法错误: 需要操作数 (错误符号是 "=")
let命令也可以进行自加或者自减操作
sk_lavender@sk-pc:~$ num1=2
sk_lavender@sk-pc:~$ num2=3
sk_lavender@sk-pc:~$ let num1++
sk_lavender@sk-pc:~$ let num2--
sk_lavender@sk-pc:~$ echo $num1 $num2
3 2
sk_lavender@sk-pc:~$ let num1*=3
sk_lavender@sk-pc:~$ let num2-=5
sk_lavender@sk-pc:~$ echo $num1 $num2
9 -3
 
(2)、[]方法
操作符[]方法与let方法类似
sk_lavender@sk-pc:~$ num1=1
sk_lavender@sk-pc:~$ num2=2
sk_lavender@sk-pc:~$ num3=$[num1 + num2]
sk_lavender@sk-pc:~$ echo $num3
3
sk_lavender@sk-pc:~$ # 也可以在[]中使用$前缀
sk_lavender@sk-pc:~$ num3=$[$num1 + $num2]
sk_lavender@sk-pc:~$ echo $num3
3
sk_lavender@sk-pc:~$ # []里面一定要加空格
sk_lavender@sk-pc:~$ num3=$[num1+num2]
sk_lavender@sk-pc:~$ echo #num3
sk_lavender@sk-pc:~$
 
3、(()) 方法
跟[]类似。
 
4、expr 方法
sk_lavender@sk-pc:~$ num1=1
sk_lavender@sk-pc:~$ num2=2
sk_lavender@sk-pc:~$ num3=`expr 1 + 2`
sk_lavender@sk-pc:~$ echo $num3
3
sk_lavender@sk-pc:~$ num3=$(expr $num1 + $num2)
sk_lavender@sk-pc:~$ echo $num3
3
sk_lavender@sk-pc:~$ num3=`expr $num1 + $num2`
sk_lavender@sk-pc:~$ echo $num3
3
注意,上面的四种方法只支持整数运算,而不支持浮点数运算
sk_lavender@sk-pc:~$ num1=1.1
sk_lavender@sk-pc:~$ num2=2.2
sk_lavender@sk-pc:~$ let num3=num1+num2 
bash: let: 1.1: 语法错误: 无效的算术运算符 (错误符号是 ".1")
sk_lavender@sk-pc:~$ let num1--
bash: let: 1.1: 语法错误: 无效的算术运算符 (错误符号是 ".1")
sk_lavender@sk-pc:~$ num3=$[ $num1 + $num2 ]
bash: 1.1 + 2.2 : 语法错误: 无效的算术运算符 (错误符号是 ".1 + 2.2 ")
sk_lavender@sk-pc:~$ num3=`expr $num1 + $num2`
expr: 非整数参数
 
5、bc方法
我们可以借助bc这个高级数学运算工具来进行浮点数等的高级运算。
sk_lavender@sk-pc:~$ num1=1.1
sk_lavender@sk-pc:~$ num2=2.2
sk_lavender@sk-pc:~$ num3=`echo "$num1 * $num2" | bc`
sk_lavender@sk-pc:~$ echo $num3
2.4
sk_lavender@sk-pc:~$ # 采用scale参数设定小数精度
sk_lavender@sk-pc:~$ num3=`echo "scale=7; $num1 * $num2" | bc`
sk_lavender@sk-pc:~$ echo $num3
2.42
sk_lavender@sk-pc:~$ # 采用bc进行进位制转换
sk_lavender@sk-pc:~$ # 十进制转二进制
sk_lavender@sk-pc:~$ num=123
sk_lavender@sk-pc:~$ result=`echo "obase=2; $num" | bc`
sk_lavender@sk-pc:~$ echo $result
1111011
sk_lavender@sk-pc:~$ # 二进制转十进制
sk_lavender@sk-pc:~$ echo "obase=10;ibase=2; $result" | bc
123
sk_lavender@sk-pc:~$ # 采用bc计算平方以及平方根
sk_lavender@sk-pc:~$ echo "sqrt(100)" | bc
10
sk_lavender@sk-pc:~$ echo "10^10" | bc
10000000000
sk_lavender@sk-pc:~$
 
本文永久更新地址:http://www.linuxdiyf.com/linux/24459.html