Shell运算命令总结

shell常用的运算命令有expr、$[]或 $(())、let命令、bc,awk工具也能进行数值运算,但是毕竟只要的作用并不是用来做运算的,expr、 $[]或 $(())let只能进行整数的运算,bc,awk都可以进行整数和小数的运算。

1.使用expr命令
乘法操作需要在*号前面加上转义符\,避免被bash当做是Shell的通配符;参与运算的整数值与操作符之间需要以空格分开,引用变量时必须加$符号。

实例:
定义变量a=666,分别计算与12加减乘除和求模(余数)运算结果

[root@redhat ~]# a=666
[root@redhat ~]# expr $a + 12  //加法
678
[root@redhat ~]# expr $a - 12  //减法
654
[root@redhat ~]# expr $a \* 12 //乘法,操作符要添加转义符\
7992
[root@redhat ~]# expr $a / 12 //除法,仅保留整除结果
55
[root@redhat ~]# expr $a % 12 //除法,求模(余数)
6

2.使用 [ ] 或 []或 [](())表达式,两者效果等同
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。
同样对于变量a=666,分别计算与12的加减乘除和求模运算结果:

[root@redhat ~]# echo $[a+12] //加法,[]内可以没有空格
678
[root@redhat ~]# echo $[a-12] //减法
654
[root@redhat ~]# echo $[a*12] //乘法
7992
[root@redhat ~]# echo $[a/12] //除法,保留整数结果
55
[root@redhat ~]# echo $[a%12] //求模(余数)
6
[root@redhat ~]# echo $((a*12)) //乘法
7992

3.使用let命令
expr或 [ ] 、 []、 [](())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量a=666,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:

[root@redhat ~]# let b=a+12 //加法
[root@redhat ~]# echo $b
678
[root@redhat ~]# let b=a-12 //减法
[root@redhat ~]# echo $b
654
[root@redhat ~]# let b=a*12 //乘法
[root@redhat ~]# echo $b
7992
[root@redhat ~]# let b=a/12 //除法,保留整数结果
[root@redhat ~]# echo $b
55
[root@redhat ~]# let b=a%12 //求模
[root@redhat ~]# echo $b
6
[root@redhat ~]# let a++
[root@redhat ~]# echo $a
667
let a++相当于let a=a+1
let a--相当于let a=a-1
let a+=66相当于let a=a+66
let a-+66相当于let a=a-66
let a*=66相当于let a=a*66
let a/=66相当于let a=a/66
let a%66相当于let a=a%66

4.小数运算工具
1)bc交互式运算
先执行bc命令进入交互环境,然后再输入需要计算的表达式。以计算小数1.234与5.678的四则运算为例,相关操作如下:

[root@redhat ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.234+5.678 //加法
6.912
1.234-5.678 //减法
-4.444
1.234*5.678 //乘法
7.006
1.234/5.678 //除法,只保留整数结果
0
quit //退出交互计算器

2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响。以计算小数1.234与5.678的四则运算为例,相关操作如下:

[root@redhat ~]# echo 'scale=4;1.234+5.678' | bc   
6.912
[root@redhat ~]# echo 'scale=4;1.234*5.678' | bc 
7.0066
[root@redhat ~]# echo 'scale=4;1.234/5.678' | bc 
.2173

上面可以发现,当bc命令计算浮点数的时候,不过在除法运算时,如果得到的结果值小于1,得到的小数前面的0不显示出来
解决办法: 使用printf命令格式化输出
方法1:res1=$(printf “%.2f” $(echo “scale=2;1/3”|bc))

方法2:res2=$(echo 1 3 | awk ‘{ printf “%0.2f\n” ,$1/$2}’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值