使用expr将两个数字相加


13

我正在学习Shell脚本以获取我目前正在攻读的IT文凭。我正在尝试编写一个小脚本,该脚本将两个数字相加,如给出的教程之一所示。

echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"

但是,当我授予它执行权限并运行脚本时,它给了我这个错误。

sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory

在此处输入图片说明

我尝试在Ubuntu和Fedora上都运行此命令,但发生相同的错误。谁能告诉我我在这里想念的吗?


Answers:


39

首先,您必须摆脱分配空间,例如

sum='expr $num1 + $num2'

那么您必须更改'`或什至更好$()

sum=$(expr "$num1" + "$num2")

expr除了使用之外,您还可以直接在您的shell中进行计算:

sum=$((num1 + num2))

3
如果使用expr代替的动机$((...))是希望移植到经典的Bourne外壳,那么最好也避免使用$(...)
艾伦·库里

2
@AlanCurry是否有不支持的外壳$()?据我所知,posix要求,例如所有posix兼容的外壳都应支持$()
Ulrich Dangel,2012年

1
@UlrichDangel原始的Bourne shell没有安装$(…),但是它已经快要消失了(也许某人仍在/bin/shSolaris上运行)。
吉尔(Gilles)'所以

C Shell不支持$(…)–或至少不支持所有版本。
斯科特,

在变量周围加双引号的目的是什么?
kojow7 '18

9

您可能将反引号误读为该行中的单引号:

sum = 'expr $num1 + $num2'

有关使用的信息,请参见Greg的Wiki$(...)

这按预期工作:

sum=$(expr "$num1" + "$num2")

另请注意,等号(变量赋值)之间没有空格。


1

exprBourne shell(即sh)使用的外部程序。Bourne Shell最初没有执行简单算术的任何机制。它expr在反引号的帮助下使用外部程序。

backtick(`)实际上称为命令替换。命令替换是一种机制,外壳程序通过该机制执行给定的命令集,然后替换其输出来代替命令。

sum=`expr $num1 + $num2`

bash(再次是bourne shell)中,它具有以下systax,它将不使用extrnal program expr

sum=$((num1+num2))

如果我们要使用外部程序expr。我们有以下系统税:

sum=$(expr $num1 + $num2)

0

如果您正在使用bash,则可以执行以下操作:

sum=$((num1+num2))

-1
#!/bin/bash
function add()
{
sum=`expr $a + $b`
echo "Sum is :$sum";
}

echo "Enter the value of a";
read a
echo "Enter the valure of b";
read b
add

还添加一些有关代码的描述,它将如何帮助解决该问题?
Tejas 2014年

-1

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = `expr $a + $b`"



-3
echo "addition of two number"

echo "enter a number"
read a
echo "enter a number"
read b

c=`expr $a + $b`

echo $c

3
这没有回答问题。一些解释会有所帮助。
伯恩哈德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.