设为首页 收藏本站
查看: 1103|回复: 0

[笔记]shell编程:数学计算

[复制链接]

尚未签到

发表于 2018-8-29 13:13:04 | 显示全部楼层 |阅读模式
  在shell Script中,有好几种进行数学运算的方法,虽然有几个效果差不多,在编写程序的时候使用一种方法就够了,但是我们可能还需要学习别人的程序啊,在阅读别人的程序的时候不能不认识这些东西吧。所以,留个笔记。
  一.expr 命令  --  expr 允许在命令行上处理数学表达式,但是略显拙劣。
  例:$ expr 1 + 5    #注意在表达式中要有空格,如果写成1+5那么结果就不是我们想要的了。
  expr命令能够识别一些不同的数学和字符串操作符:
操作符描述arg1 | arg2  如果没有参数是NULL或者零,返回arg1;否则返回arg2
arg1 & arg2  如果没有参数是null或者零,返回arg1 , 否则返回0
arg1 < arg2如果arg1 小于 arg2 返回1 ,否则返回0;arg1 = arg2   arg1 大于等于arg2 返回1,否则返回0
arg1 > arg2  arg1 大于arg2 返回1 , 否则返回0
arg1 + arg2返回两参数算数和arg1 - arg2返回算数差arg1 * arg2返回算术乘积arg1 / arg2 返回算术商arg1 % arg2返回两数相除的余数string : regexp如果regexp匹配到了string中的某个模式,则返回该模式match string :regexp如果regexp匹配到了string中的某个模式,则返回该模式substr STRING POS LENGTH返回起始位置为POS 长度为LENGTH个字符的子串index STRING CHARS返回在STRING中找到的CHARS的位置,否则为0length STRING返回字符串STRING的长度+ TOKEN将TOKEN解释成字符串,即使是一个关键字(EXPRESSION)返回EXPRESSION的值  注意:在使用expr命令时可能要使用'\'转义或者''转义:expr 2 * 5   ==> expr: 语法错误
  expr 2 \* 5  或者 expr 2 '*' 5 ==>10
  .美元符号+方括号 -- $[OPERATION]
  例:var1=$[1+5] ;  ==> var1=6
  var2=$[$var1*3] ;  ==>  var2=18;
  这个比前面的要方便多了...
  缺点:只能进行整数运算,这是bash shell的原因,据说Z shell 支持浮点运算。我还没有验证过。
  语句:var1=$[100/30]  ==>  var1=3 ,如果要进行浮点运算可以使用bc计算器。该用法将在后面讲到。
  三. 美元符号+双括号 -- $((OPERATION))
  与$[]使用方法相同.
  例如:var=$((1+3)) ==> var=4
   .双括号 --(( expression ))双圆括号允许将高级数学表达式放入比较,也支持数学计算。
  这里的expression可以是任意的数学赋值或者比较表达式,能够是比较表达式,也就是说可以当作test命令使用,在if while for until 结构中都可以用作条件判别语句。
val++(后)自增val--  (后)自减
++val(前)自增--val(前)自减逻辑求反~位求反**幂运算右移位&位与|位或&&逻辑与||逻辑或  例:var1=10; ((var2=$var1**3)) ; ==>该句的意思是 var2=10*10*10=1000,(10的立方)
  if (($var1**2>90)) ; then echo "ok" ; fi   ==>当var1的平方大于90时输出 ok。
  这个东西很强大,而且在脚本中使用很直观,当见到(())时,我们就知道,这里出现了数值计算。
  五.  let 命令 --与(())类似;
  $let "$var+=1" 或者 $let "var=$var+1";
  六. bc计算器(大boss)解决浮点运算的常用方案。
  (一)在命令行使用bc
  bc 是我们学习linux时最先学习的几个命令。直接在命令行输入bc可以进入bc计算器的交互界面,可以在里面定义变量,计算表达式等操作。
  例如:$bc
  2+5
  7
  bc计算器的浮点运算由一个叫做scale的变量控制,实际上,scale的值就是小数点后的位数,而bc默认的scale=0,所以在计算的时候需要修改scale,比如scale=4,保留小数点后四位。
  例如:$bc
  3.44/5
  0
  scale=4
  3.44/5
  .6880
  使用-q参数可以将进入bc后输出的版权说明给屏蔽掉。使用quit退出bc
  例如:$bc
  quit
  (二)在脚本中使用bc
  bc可以接受标准输入,而这个标准输入我们可以通过管道或者重定向来提供给它。
  bc接受标准输入后,计算输入的表达式,输出到标准输出中,我们可以通过$(commamd)或者是`command`来获取它的输出。
  常见用法一:
  variable=$( echo "options; expression " | bc) ;
  例如:
  var=$(echo "scale=4; 3.44/5 ;" | bc) ;  ==> var=.6880
  常见用法二:使用内联(inline)输入重定向

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558205-1-1.html 上篇帖子: shell中使用>/dev/null 2>&1 丢弃信息 下篇帖子: Shell脚本调用mysql语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表