shell脚本之数学计算问题

     shell编程语言当中不可避免的要使用到数值计算来解决过程问题,最近看了Richard Blum写的《linux 命令行和shell脚本编程》这本书,发现里面东西总结的都挺好的,现在废话就不多说了,直奔主题.

方式一:使用expr 

这种表达方式可以应用与基于整数和部分字符串的处理。

格式:  expr  操作符  这个表达式返回计算结果:

其中  操作符有

  ARG1      |           ARG2         如果两个参数都不为空或都不为0,则返回ARG1,否则,返回ARG2

  ARG1      &         ARG2        如果两个参数都不为空或都不为0,则返回ARG1,否则,返回0

  ARG1      >        ARG2          如果ARG1大于ARG2,返回1,否则返回0

  ARG1      >=        ARG2          如果ARG1大于或等于ARG2,返回1,否则返回0

   ARG1     <       ARG2          如果ARG1小于ARG2,返回1,否则返回0

  ARG1      <=        ARG2          如果ARG1小与或等于ARG2,返回1,否则返回0

  ARG1   +   -   *  /  %   ARG2    返回各类数值计算的值

 index   STRING CHARS   返回在STRING中找到CHARS的位置,否则返回0

length   STRING                       返回STRING的长度

+   TOKEN                                 将TOKEN解释为一字符串,即使它是一个关键字

(EXPRESSION)                     返回EXPRESSION的值


eg:

$ expr 10 * 5
50

//下面的除法运算符需要转义,有些情况下连乘法也需要转义

$ expr 10 /2
expr: syntax error
$ expr 10/2
10/2
$ expr 10 \/ 2
5
$


提示:

expr还有较为高级的表示方式

   $[OPERATION]

eg

root@jiangjian-K42JZ:~# tmp=$[10-9]
root@jiangjian-K42JZ:~# echo $tmp
1
root@jiangjian-K42JZ:~# tmp=$[10*9]
root@jiangjian-K42JZ:~# echo $tmp
90
root@jiangjian-K42JZ:~# tmp=$[10 / 5]
root@jiangjian-K42JZ:~# echo $tmp
2
root@jiangjian-K42JZ:~# tmp=$[10+5]
root@jiangjian-K42JZ:~# echo $tmp
15
root@jiangjian-K42JZ:~#


在以上的处理过程当中只涉及到整数

方式 二  使用bc解决浮点类运算

bc是shell当中的一个计算命令,其中内部有一个内置环境变量scale,这个变量用于定义获取到小数点的位数,退出程序输入quit

root@jiangjian-K42JZ:~# 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'.
scale=4
1/3
.3333
quit
root@jiangjian-K42JZ:~# 


如果在脚本中使用可以尝试使用

varible=`echo "option; expression" |bc`

其中option可以设置多个参数,下面是一个脚本案例:

root@jiangjian-K42JZ:~# vi example
root@jiangjian-K42JZ:~# chmod u+x example
root@jiangjian-K42JZ:~# cat example
#!/bin/bash
var=`echo "scale=6; 1/3 " |bc `
echo $var

root@jiangjian-K42JZ:~# ./example
.333333
root@jiangjian-K42JZ:~# 


希望能对大家有帮助!








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值