编写一个shell程序,键盘输入两个数以及+、-、*、/中的任一运算符,计算这两个数的运算结果?

用的expr $ case 之类的,我写了老出错,求高手帮忙

上回你说得不清楚,只说用 + - * / , 当然用 awk 最快, 用 expr + case
可以这样写,我加了些判断条件,有点长,交互式和命令列用参数形式
合在一起

User@User-PC ~
$ cat a
#! /bin/bash
checkargu(){
if echo "$num" | grep -E '^[0-9]+$' > /dev/null 2>&1 \
&& echo "$num2" | grep -E '^[0-9]+$' > /dev/null 2>&1
then
myexpr
else
exit 98
fi
}

myexpr(){
case "$method" in
+|-|/) sum=$(expr $num $method $num2)
;;
\*) sum=$(expr $num \* $num2)
;;
[!+-*/]) echo "method must be + - * /" >&2
exit 99
;;
esac
}

case $# in
0) printf "Calculator> "
read num method num2
checkargu
echo $sum
;;
3) num=$1 ; method=$2 ; num2=$3
checkargu
echo $sum
;;
*) exit 97
;;
esac
exit 0

测试

User@User-PC ~
$ ./a 12 \* 2
24

User@User-PC ~
$ ./a
Calculator> 12 + 2
14

User@User-PC ~
$ ./a
Calculator> 12 - 2
10

User@User-PC ~
$ ./a
Calculator> 12 * 2
24

User@User-PC ~
$ ./a
Calculator> 12 / 2
6

User@User-PC ~
$ ./a 12 + 2
14

User@User-PC ~
$ ./a 12 - 2
10

User@User-PC ~
$ ./a 12 \* 2
24

User@User-PC ~
$ ./a 12 / 2
6

User@User-PC ~
$ ./a
Calculator>

User@User-PC ~
$ ./a 12

User@User-PC ~
$ ./a 12 k 7
method must be + - * /

User@User-PC ~
$ ./a
Calculator> 12 k 7
method must be + - * /

User@User-PC ~
$

参数要有空格,浮点数不支援, 我没用上 bash 特性,该在任何 POSIX
shells都可执行, 这样可以吧?
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网