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

Linux shell 脚本攻略 – 数学运算

在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:~$ 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值