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

shell版计算器(支持简单四则运算)

[复制链接]

尚未签到

发表于 2018-8-22 06:25:04 | 显示全部楼层 |阅读模式
  前一段时间受人之托,说是毕业设计非要用shell写个计算器,要支持四则运算的,刚开始觉得还容易,可发现四则的匹配还是比较繁琐的,在这里分享下吧~估计之后也不会出这样的毕业设计了
  PS:赶时间写的,有bug的欢迎指正
  


  • #!/bin/bash

  • ## Calculator.sh ##
  • main()
  • {
  •     echo 'This is a Calculator:'
  •     echo 'example: 3 + 90 x ( 9 - 5 ) / 3 - 23'
  •     call
  • }


  • call()
  • {
  •     while [ 1 ];do
  •         read str
  •                 u=($str)
  •         g1='no'
  •         g2='no'
  •                 nu=`echo $str | awk '{print NF}'`
  •         for((i=0;i /dev/null
  •             if (( $? == 0 ));then
  •                 echo ${u[$i]} |grep -E '\(|\)' > /dev/null
  •                                         if (( $? == 0 ));then
  •                                                 echo ${u[$i]} |grep -w '(' > /dev/null
  •                                                 if (( $? == 0 ));then
  •                             g1=$i
  •                             continue
  •                         fi

  •                                                 echo ${u[$i]} |grep -w ')' > /dev/null
  •                                                 if (( $? == 0 ));then
  •                                                         g2=$i
  •                             if [ $g1 != 'no' ] || [ $g2 != 'no' ];then
  •                                             compute $g1 $g2
  •                                 u[$g1]=$?
  •                                 for((p=$g1+1;p /dev/null
  •                 if (( $? == 0 ));then
  •                     sum=`expr ${s[$k-1]} \* ${s[$k+1]}`
  •                     s[$k+1]=$sum
  •                     s[$k]=''
  •                     s[$k-1]=''
  •                     continue
  •                 fi

  •                                 echo ${s[$k]} |grep -w '/' > /dev/null
  •                                 if (( $? == 0 ));then
  •                                         sum=`expr ${s[$k-1]} \/ ${s[$k+1]}`
  •                     s[$k+1]=$sum
  •                                         s[$k]=''
  •                                         s[$k-1]=''
  •                                         continue

  •                                  fi
  •             fi
  •         echo ${s[@]} |grep -E '+|-' > /dev/null
  •             if (( $? == 0 ));then
  •                 t=(${s[@]})
  •                 nu2=`echo ${t[@]} | awk '{print NF}'`
  •                 for((j=$1;j /dev/null
  •                                 if (( $? == 0 ));then
  •                                     echo ${t[$j]} |grep -w '+' > /dev/null
  •                                         if (( $? == 0 ));then
  •                                             sum=`expr ${t[$j-1]} + ${t[$j+1]}`
  •                                                 t[$j+1]=$sum
  •                             t[$j]=''
  •                             t[$j-1]=''
  •                                                     continue
  •                                             fi

  •                                             echo ${t[$j]} |grep -w '-' > /dev/null
  •                                             if (( $? == 0 ));then
  •                                                 sum=`expr ${t[$j-1]} - ${t[$j+1]}`
  •                                                     t[$j+1]=$sum
  •                                                     t[$j]=''
  •                                                     t[$j-1]=''
  •                                                     continue
  •                                             fi

  •                     fi
  •                 done
  •             fi
  •     done
  •     return $sum
  • }
  

  运行结果:
  


  • zhangbo@ufo:~/me/shell$ ./Calculator.sh
  • This is a Calculator:
  • example: 3 + 90 x ( 9 - 5 ) / 3 - 23
  • 3 + 90 x ( 9 - 5 ) / 3 - 23
  • 100
  • 2 x ( 3 + 10 )
  • 26
  




运维网声明 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.iyunv.com/thread-554801-1-1.html 上篇帖子: python学习之路(针对没有任何编程经验者或懂一点shell者) 下篇帖子: shell特殊符号,cut,sort,wc,uniq,tee,tr,split命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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