设为首页 收藏本站
查看: 2030|回复: 6

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

[复制链接]

尚未签到

发表于 2013-4-8 08:53:51 | 显示全部楼层 |阅读模式
本帖最后由 yundian 于 2013-4-8 08:55 编辑

前一段时间受人之托,说是毕业设计非要用shell写个计算器,要支持四则运算的,刚开始觉得还容易,可发现四则的匹配还是比较繁琐的,在这里分享下吧~估计之后也不会出这样的毕业设计了

PS:赶时间写的,有bug的欢迎指正

  • [Shell] 纯文本查看 复制代码
    #!/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<$nu;i++));do 
                echo ${u[$i]} | grep -E '^[1-9]|+|-|x|/|\(|\)' > /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<$g2+1;p++));do 
                                        u[$p]='' 
                                    done                                 
    #                               echo ${u[@]} 
                                    nu3=`echo ${u[@]} | awk '{print NF}'` 
                                    compute 0 $nu3 
                                    echo $?  
                                        fi 
                                continue 
                            fi 
                        fi 
                            else 
                                    echo 'Error: is not digital' 
                fi 
            done 
     
            if [ $g1 = 'no' ] || [ $g2 = 'no' ];then 
                compute 0 $nu 
                echo $? 
            fi 
        done 
    } 
     
    compute() 
    { 
        s=(${u[@]}) 
        for((k=$1;k<$2;k++));do 
     
            echo ${s[$k]} |grep -E 'x|/' > /dev/null 
                if (( $? == 0 ));then 
                    echo ${s[$k]} |grep -w 'x' > /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<$2;j++));do 
                            echo ${t[$j]} |grep -E '+|-' > /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 
    } 


运行结果:

  • [Shell] 纯文本查看 复制代码
    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.yunweiku.com/thread-4917-1-1.html 上篇帖子: Windows PowerShell脚本实战--配置DNS服务器 下篇帖子: linux系统shell脚本实现 恶意扫描服务器密码 自动屏蔽 计算器

尚未签到

发表于 2013-4-8 08:57:42 | 显示全部楼层
很多女明星不红的原因是因为没有张开腿*^_^*

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

尚未签到

发表于 2013-5-18 07:44:26 | 显示全部楼层
内练一口气,外练一口屁。

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

尚未签到

发表于 2013-5-21 17:05:44 | 显示全部楼层
关羽五绺长髯,风度翩翩,手提青龙偃月刀,江湖人送绰号——刀郎。

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

尚未签到

发表于 2013-5-26 15:28:06 | 显示全部楼层
男人与女人,终究也只是欲望的动物吧!真的可以因为爱而结合吗?对不起,我也不知道。。

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

尚未签到

发表于 2013-6-1 14:44:18 | 显示全部楼层
有事秘书干,没事干秘书!

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

尚未签到

发表于 2013-6-6 07:38:07 | 显示全部楼层
路过,学习下

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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