用的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都可执行, 这样可以吧?
可以这样写,我加了些判断条件,有点长,交互式和命令列用参数形式
合在一起
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都可执行, 这样可以吧?
温馨提示:答案为网友推荐,仅供参考