Adicionando dois números usando expr

11

Estou aprendendo scripts da Shell para um diploma em TI que estou fazendo atualmente. Eu estou tentando escrever um pequeno script que adiciona dois números, como mostrado em um dos tutoriais que nos foi dado.

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

No entanto, quando dou a permissão de execução e executo o script, isso me causa esse erro.

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

Eu tentei rodar isso no Ubuntu e no Fedora, mas o mesmo erro ocorreu. Alguém pode me dizer o que eu estou sentindo falta aqui?

    
por Isuru 08.08.2012 / 06:20

9 respostas

37

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

sum='expr $num1 + $num2'

você precisa alterar ' para ' ou melhor ainda para $() :

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

em vez de usar expr , você também pode fazer o cálculo diretamente no seu shell:

sum=$((num1 + num2))
    
por 08.08.2012 / 06:36
8

Você provavelmente interpretou mal os backticks como aspas simples na linha:

sum = 'expr $num1 + $num2'

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

Isso funciona como esperado:

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

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

    
por 08.08.2012 / 06:36
1

expr é um programa externo usado pelo shell Bourne (ou seja, sh). O shell Bourne não tinha originalmente nenhum mecanismo para realizar aritmética simples. Usa expr programa externo com a ajuda de backtick.

O backtick ( ') é chamado de substituição de comando. A 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, ele não usará o programa extralum expr .

sum=$((num1+num2))

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

sum=$(expr $num1 + $num2)
    
por 25.05.2016 / 08:45
0

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

sum=$((num1+num2))
    
por 17.10.2018 / 09:28
-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
    
por 31.10.2014 / 11:52
-1

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = 'expr $a + $b'"
    
por 15.12.2014 / 19:46
-2

Você pode usar um único backtick (a tecla ')

    
por 09.03.2013 / 08:46
-2
echo a 
read a
echo b
read b
c='expr $a + $b'
echo $c
    
por 20.12.2014 / 05:14
-3
echo "addition of two number"

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

c='expr $a + $b'

echo $c
    
por 27.08.2012 / 05:13