[Linux] shell数值计算的几种方式

shell数值计算相关命令:bc、expr、let

let、expr无法进行浮点运算;bc、awk可以进行浮点运算,bc的除法是地板除,awk的除法是精确的。

bc、expr可直接显示计算结果;let丢弃计算结果,可传递结果到变量。

数字和运算符之间有无空格,expr->必须有空格,let->不能有空格,bc->有无空格均可

1)expr
@数字和运算符之间要有空格
[root@xxx ~]# expr 200+1
200+1
[root@xxx ~]# expr 200/1
200/1

@加减乘除,注意乘法"\*"
[root@xxx ~]# expr 200 + 1
201
[root@xxx ~]# expr 200 - 1
199
[root@xxx ~]# expr 200 * 2
expr: syntax error
[root@xxx ~]# expr 200 \* 2
400
[root@xxx ~]# expr 200 / 2
100
[root@xxx ~]# expr 200 + 2 \* 2
204

@运算数得是整数
[root@xxx ~]# expr 20.0 + 2 \* 2
expr: non-integer argument


2)bc
@加减乘除
[root@xxx ~]# echo 30+1 | bc
31
[root@xxx ~]# echo 30-1 | bc
29
[root@xxx ~]# echo 30*2 | bc
60
[root@xxx ~]# echo 30/2 | bc
15

@可以进行浮点运算

[root@xxx ~]# echo 30.2+1 | bc
31.2

@除法是地板除
[root@xxx ~]# echo 30.2/2+1 | bc
16
[root@xxx ~]#

3)let
@数字和运算符之间不能有空格
[root@xxx ~]# let i=40 + 3
-bash: let: +: syntax error: operand expected (error token is "+")
[root@xxx ~]# let i= 40+3
-bash: let: i=: syntax error: operand expected (error token is "=")

@加减乘除
[root@xxx bin]# let i=40+3
[root@xxx bin]# echo $i
43
[root@xxx bin]# let i=40-3
[root@xxx bin]# echo $i
37
[root@xxx bin]# let i=40*3
[root@xxx bin]# echo $i
120
[root@xxx bin]# let i=40/3
[root@xxx bin]# echo $i
13

@运算数得是整数
[root@xxx bin]# let i=40.3/3
-bash: let: i=40.3/3: syntax error: invalid arithmetic operator (error token is ".3/3")
[root@xxx bin]#

4)awk
[root@xxx ~]# i=20
[root@xxx ~]#
[root@xxx ~]# i=$(echo "$i 6" | awk '{print $1+$2;}')
[root@xxx ~]#
[root@xxx ~]# echo $i
26
[root@xxx ~]# i=$(echo "$i 6" | awk '{print $1+$2}')
[root@xxx ~]# echo $i
32
[root@xxx ~]# i=$(echo "$i 6.6" | awk '{print $1+$2}')
[root@xxx ~]# echo $i
38.6
[root@xxx ~]#


5)shell脚本中,给变量赋值可以使用反引号或者$()
test.sh内容如下,

echo "initial value for i is 1."
echo "case1"
i=1
echo $i+1

echo "case2-1"
i=1
i=`expr $i+1`
echo $i

echo "case2-2"
i=1
i=$(expr $i+1)
echo $i

echo "case3-1"
i=1
i=`expr $i + 1`
echo $i

echo "case3-2"
i=1
i=$(expr $i + 1)
echo $i

echo "case4"
i=1
((i=$i+1))
echo $i

echo "case5"
i=1
((i++))
echo $i

echo "case6"
i=1
let i=i+1
echo $i

echo "case7"
i=1
let i++
echo $i

echo "case8"
i=1
i=$[i+1]
echo $i

执行结果如下,
[root@xxx ~]# ./test.sh
initial value for i is 1.
case1
1+1
case2-1
1+1
case2-2
1+1
case3-1
2
case3-2
2
case4
2
case5
2
case6
2
case7
2
case8
2


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值