echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
,但随后所有加法的尝试均失败:
case "$op" in
"+")
echo num1+num2;;
"-")
echo `num1-num2`;;
esac
运行:
First number please
1
Second mumber please
2
Operation?
+
输出:
num1+num2
...或...
echo $num1+$num2;;
# results in: 1+2
...或...
echo `$num1`+`$num2`;;
# results in: ...line 9: 1: command not found
当我尝试添加添加(“ 2 + 2”而不是“ 4”)时。
#1 楼
POSIX shell中的算术运算是用$
和双括号(( ))
完成的:echo "$(($num1+$num2))"
您可以从中分配(无
echo
):num1="$(($num1+$num2))"
还有
expr
:expr $num1 + $num2
在脚本编写中,
$(())
是可取的,因为它避免了对expr
命令执行fork / execute。评论
甚至直接回显$((($ num1 $ op $ num2)))而不涉及大小写。
–manatwork
2013年9月30日在16:44
这里没有任何案件。
–金锁
2013年9月30日16:49
否,但是您使用了文字+,因此将需要外面的大小写分别处理减法。
–manatwork
2013年9月30日16:51
@manatwork:您的意思是通过回显$(($ num1 $ op $ num2))从OP的代码中消除这种情况-可以,但是使用这种情况更为可靠,因为您可以使用默认*处理错误。
–金锁
2013年9月30日17:04
+1。我使用的是案例(可能一开始可能没有显示出来),但是你们俩都意识到问题与案例无关。
–迈克尔·杜兰特(Michael Durrant)
2013年9月30日17:05
#2 楼
现有的答案是纯bash,因此它将比此速度更快,但只能处理整数。如果需要处理浮点数,则必须使用外部程序bc
。$ echo 'scale=4;3.1415+9.99' | bc
13.1315
scale=4
告诉bc
使用四位小数。有关更多信息,请参见man bc
。评论
请注意,尽管bash不支持使用$((...))进行浮点运算,但许多shell(至少是ksh93,zsh,yash)支持。 bc的优点是它支持任意精度,而shell算术仅限于处理器的double类型。请注意,您无需在此处设置比例。对于添加,不使用scale参数。 3.1415 + 9.99的小数位数将从操作数的小数位数(此处为4)得出。
–StéphaneChazelas
16 Dec 20'在12:06
如果一个值是450,另一个是十进制值,该数学值如何存储在变量$ mynumber中?例如,450- $ mynumber。
–西格
17年3月17日在22:34
@sigur echo“ 450- $ mynumber” |公元前应该这样做。如果要扩展变量,则必须使用双引号而不是单引号。
– evilsoup
17年3月17日在23:22
@evilsoup,现在它就像一种魅力。谢谢。
–西格
17 Mar 17 '17在23:30
computeval = $(echo'scale = 10; var1-var2'| bc)不起作用,computeval = $(echo'scale = 10; $ var1- $ var2'| bc)也不起作用
–StatsSorceress
19年5月3日,1:50
#3 楼
您也可以使用$[ ... ]
结构。在这种情况下,我们在Bash中使用内置的机械化机制,该机制更快且使用起来更方便。由于我们知道$ [和]之间的所有内容都被视为表达式,因此我们不需要在变量前加$
。同样,我们不需要保护*
像对待样式一样。num1=2
num2=3
echo $[num1 + num2]
5
#4 楼
echo `expr $a + $b`
echo `expr $a - $b`
echo `expr $a \* $b`
echo `expr $a / $b`
注意
\
前面的*
(用于乘法),整个表达式必须在反引号`。
之内。
评论
expr是没有必要的,也不必捕获命令的标准输出而只是将其写回到标准输出。
–chepner
15年11月1日在18:07
#5 楼
极简主义者total=0
((total+=qty))
#6 楼
根据用户要求的输入顺序,似乎您正在使用反向抛光符号。echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
您可能会做得更好只是直接使用
dc
(台式计算器),因为这就是它的用途。DESCRIPTION
Dc is a reverse-polish desk calculator which supports unlimited pre-
cision arithmetic.
使用
dc
的示例会话:$ dc
1 2 + p # This part is typed; the result comes next.
3
q # This is also typed.
$
或者非交互地:
$ dc -e '1 2 + p'
3
$
评论
我编辑了您的标题,因为这是一个很好的一般性问题,如果缩小上下文范围,您会意识到这与大小写或其他任何内容都没有关系,只不过一行:echo $ num + $ num,因为这样可以准确地重现问题。此处解释了在编程问题中最小化上下文的想法:sscce.org+1嗨,金发姑娘,后来我对我很清楚,但是是的,我完全同意你的推理方法,是的,问题越具体,越“单一”就越好。我欢迎您的编辑:)谢谢:)