friendlessstar 发表于 2018-8-22 06:25:04

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

  前一段时间受人之托,说是毕业设计非要用shell写个计算器,要支持四则运算的,刚开始觉得还容易,可发现四则的匹配还是比较繁琐的,在这里分享下吧~估计之后也不会出这样的毕业设计了http://blog.51cto.com/neweditor/editor/images/smiley/46.gif
  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]
查看完整版本: shell版计算器(支持简单四则运算)