Adicionando dois números usando expr


13

Estou aprendendo scripts da Shell para obter um diploma em TI que estou fazendo atualmente. Estou tentando escrever um pequeno script que adiciona dois números, como mostra um dos tutoriais que recebemos.

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

No entanto, quando eu concedo a permissão de execução e executo o script, isso me dá esse erro.

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

insira a descrição da imagem aqui

Eu tentei executar isso no Ubuntu e no Fedora, mas o mesmo erro ocorre. Alguém pode me dizer o que estou perdendo aqui?


Respostas:


39

Primeiro você precisa se livrar dos espaços para a tarefa, por exemplo

sum='expr $num1 + $num2'

você precisa mudar 'para um `ou ainda melhor para $():

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

Em vez de usar, exprvocê também pode fazer o cálculo diretamente no seu shell:

sum=$((num1 + num2))

3
Se a motivação para usar em exprvez de $((...))desejar ser portátil para o shell Bourne clássico, é uma boa ideia também evitar isso $(...).
Alan Curry

2
@AlanCurry existem conchas que não suportam $()? Tanto quanto eu sei que é exigido pelo posix, por exemplo, todos os shells compatíveis com o posix devem suportar #$()
1100 Ulrich Dangel

1
@UlrichDangel O shell Bourne original não tinha $(…), mas acabou (talvez alguém em algum lugar ainda esteja executando o /bin/shSolaris).
Gilles 'SO- stop be evil' em

O C Shell não suporta $(…)–– ou pelo menos nem todas as versões.
Scott

Qual é o objetivo de ter aspas duplas em torno das variáveis?
precisa saber é o seguinte

9

Você provavelmente leu os backticks como aspas simples na linha:

sum = 'expr $num1 + $num2'

Veja o Wiki de Greg sobre como usar $(...).

Isso funciona conforme o esperado:

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

Observe também que não há lacunas em torno do sinal de igual (a atribuição de variável).


1

expré um programa externo usado pelo Bourne shell (ie sh). O shell Bourne não tinha originalmente nenhum mecanismo para executar aritmética simples. Ele usa exprprograma externo com a ajuda de backtick.

O backtick ( ` ) é chamado de substituição de comando. Substituição de comando é o mecanismo pelo qual o shell executa um determinado conjunto de comandos e, em seguida, substitui sua saída no lugar dos comandos.

sum=`expr $num1 + $num2`

No bash (bourne again shell) ele tem o seguinte systax, não usará programa extrnal expr.

sum=$((num1+num2))

se queremos usar o programa externo expr. nós temos o seguinte systax:

sum=$(expr $num1 + $num2)

0

Se você estiver usando o bash, basta fazer algo assim:

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

adicione também algumas descrições sobre o código e como isso ajudará a resolver a questão?
Tejas

-1

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

-2

Você pode usar um único bastão (a `tecla)


1
É um bastão, e é recomendável usar $( ... )nas conchas. Além disso, o problema é que o OP usa espaços onde não deveria.
vonbrand

-2
echo a 
read a
echo b
read b
c=`expr $a + $b`
echo $c

-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
Isso não está respondendo à pergunta. Alguma explicação ajudaria.
Bernhard
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.