linux-shell-数学计算

目录

摘要

详解

expr

$(()) 算术扩展

let

let-算数运算

let-位运算

bc

$[]

declare


摘要

count=0; let count++; echo $count #需包含let命令,注意此处直接使用变量名,不需要添加$符号,如果写成let $count++ , let会把count的值当做变量名执行运算,相当于执行 0++count=0;

result=$[ $count + 1 ]; echo $result  #sh不支持、bash支持

count=0; result=$(expr $count + 1); echo $result  #sh、bash都支持

count=0; result=$(echo "$count + 1" | bc); echo $result  #需包含bc命令

count=4; result=$(echo "scale=4; $count / 3" | bc); echo $result 

count=0; declare -i result=1+$count; echo $result

result=$(awk 'BEGIN {x=1.2;y=2.3;printf "%f",x+y }'); echo $result 

详解

expr

expr命令也可用于整数运算。和其他算术运算方式不同,expr要求操作数和操作符之间使用空格隔开(否则只会打印出字符串),所以特殊的操作符要使用转义符转义(比如*)。

expr支持的算术运算符有加、减、乘、除、余等,不支持幂运算,示例如下:

[root@192 my-linux-shell]# var=100; result=$(expr $var + 1); echo $result

101

[root@192 my-linux-shell]# var=100; result=$(expr $var - 1); echo $result

99

[root@192 my-linux-shell]# var=100; result=$(expr $var * 2); echo $result

expr: syntax error

[root@192 my-linux-shell]# var=100; result=$(expr $var \* 2); echo $result

[root@192 my-linux-shell]# var=100; result=$(expr $var \% 3); echo $result

1

[root@192 my-linux-shell]#

$(()) 算术扩展

算术扩展是Shell提供的整数变量的运算机制,是Shell的内建命令之一。

其基本语法:$((算数表达式))

[root@192 my-linux-shell]# var=10; count=$(($var+2)); echo $count

12

[root@192 my-linux-shell]# var=10; count=$(($var-2)); echo $count

8

[root@192 my-linux-shell]# var=10; count=$(($var*2)); echo $count

20

[root@192 my-linux-shell]# var=10; count=$(($var/2)); echo $count

5

[root@192 my-linux-shell]# var=10; count=$(($var%2)); echo $count

0

[root@192 my-linux-shell]# var=10; count=$(($var**2)); echo $count

100

[root@192 my-linux-shell]#

let

let-算数运算

加 +

减 -

乘 *

除 \

幂 **

余 %

+=

-=

*=

/=

%=

puxl@vm-ubuntu:~$ var=100; let "var+=1"; echo $var

101

puxl@vm-ubuntu:~$ var=100; let "var-=1"; echo $var

99

puxl@vm-ubuntu:~$ var=100; let "var*=10"; echo $var

1000

puxl@vm-ubuntu:~$ var=100; let "var/=10"; echo $var

10

puxl@vm-ubuntu:~$ var=100; let "var%=3"; echo $var

1

puxl@vm-ubuntu:~$ var=5; let "var=$var**3"; echo $var

125

puxl@vm-ubuntu:~$

let-位运算

左移、右移、位与、位或、异或

>>

&

|

^

自增、子减

操作对象只能是变量,不能是常量或者表达式

++

--

puxl@vm-ubuntu:~/test$ var=100; let var++; echo $var

101

puxl@vm-ubuntu:~/test$ var=100; let var--; echo $var

99

puxl@vm-ubuntu:~/test$ var=100; let ++var; echo $var

101

puxl@vm-ubuntu:~/test$ var=100; let --var; echo $var

99

puxl@vm-ubuntu:~/test$

bc

前面介绍的几种算术运算都只能是基于整数的,但现实中有很多需求必须是基于浮点数进行的计算,比如说职工的工资、贷款的利率等,这就要求更高精度的计算。而Linux下的bc正是这样一款专门用于高精度计算的工具。

与其说bc是一个命令或者工具,不如说它是一门语言,bc的man文件对它的描述是:“一款高精度计算语言(An arbitrary precision calculator language)”,它有和常规编程语言一样的支持顺序执行、判断、循环等运行机制,还支持自定义函数等,功能非常强大。

在Linux下使用bc最简单的方式是直接输入bc命令,回车后进入bc的交互式界面,闪烁的命令提示符表明现在可以输入表达式了。

事实上,默认情况下bc并不显示小数部分,必须设置要显示的小数位数。这可以通过设置scale做到,本例中设置为4后再运行除法运算结果就正确了。

[root@192 my-linux-shell]# 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'.

a=100

b=3

a/b

33

scale=4

a/b

33.3333

quit

[root@192 my-linux-shell]#

通过命令替换+管道命令,把结算结果复制给指定变量

[root@192 my-linux-shell]# var1=100; var2=3; result=$(echo "scale=4; $var1 / $var2" | bc); echo $result

33.3333

[root@192 my-linux-shell]#

除此之外,bc还支持逻辑运算、比较运算。

$[]

[root@192 my-linux-shell]# var=100; result=$[ $var + 3]; echo $result

103

[root@192 my-linux-shell]# var=100; result=$[ $var - 3]; echo $result

97

[root@192 my-linux-shell]# var=100; result=$[ $var * 3]; echo $result

300

[root@192 my-linux-shell]# var=100; result=$[ $var / 3]; echo $result

33

[root@192 my-linux-shell]# var=100; result=$[ $var % 3]; echo $result

1

[root@192 my-linux-shell]# var=100; result=$[ $var ** 3]; echo $result

1000000

[root@192 my-linux-shell]#

declare

declare是Shell的内建命令,通过它们也能进行整数运算。

虽然说Shell可以不利用declare命令创建变量,但是通过下面的例子可以看到,它和显式使用declare定义变量的差别是很大的。

未经明确指定类型便赋值“1+100”,对Shell来说,此时的“1+100”只是一个字符串,和“abc”无异,所以打印出来也只是字符串。

-i 参数指定变量为“整数”,此时再赋值“1+100”,Shell会将后面的字符串解析成算术运算,所以打印出的值是算术表达式的计算值。

[root@192 my-linux-shell]# declare -i count=1+100; echo $count

101

[root@192 my-linux-shell]# count=1+100; echo $count

101

[root@192 my-linux-shell]# var=100; declare -i count=1+$var; echo $count

101

[root@192 my-linux-shell]# unset count; count=1+100; echo $count

1+100

[root@192 my-linux-shell]#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值