Agregar dos números usando expr

13

Estoy aprendiendo las secuencias de comandos de Shell para un diploma en TI que estoy haciendo actualmente. Estoy tratando de escribir un pequeño script que agrega dos números como se muestra en uno de los tutoriales que nos dieron.

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

Sin embargo, cuando le doy permiso de ejecución y ejecuto el script, me da este error.

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

ingrese la descripción de la imagen aquí

Intenté ejecutar esto en Ubuntu y Fedora pero ocurre el mismo error. ¿Alguien puede decirme lo que me falta aquí?

Isuru
fuente

Respuestas:

39

Primero tiene que deshacerse de los espacios para la tarea, por ejemplo

sum='expr $num1 + $num2'

entonces tienes que cambiar 'a uno `o incluso mejor para $():

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

en lugar de usar expr, también puede hacer el cálculo directamente en su shell:

sum=$((num1 + num2))
Ulrich Dangel
fuente
3
Si la motivación para usar en exprlugar de $((...))es un deseo de ser portátil al clásico Bourne Shell, entonces también es una buena idea evitarlo $(...).
Alan Curry
2
@AlanCurry ¿hay algún caparazón que no sea compatible $()? Hasta donde yo sé, es requerido por Posix, por ejemplo, todos los shells compatibles con Posix deberían ser compatibles$()
Ulrich Dangel
1
@UlrichDangel El shell Bourne original no tenía $(…), pero se ha extinguido (tal vez alguien en algún lugar todavía se está ejecutando /bin/shen Solaris).
Gilles 'SO- deja de ser malvado'
C Shell no admite $(…)–– o al menos, no todas las versiones.
Scott
¿Cuál es el propósito de tener comillas dobles alrededor de las variables?
kojow7
9

Probablemente haya leído mal los backticks como comillas simples en la línea:

sum = 'expr $num1 + $num2'

Ver Greg's Wiki sobre el uso en su $(...)lugar.

Esto funciona como se esperaba:

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

También tenga en cuenta que no hay espacios alrededor del signo igual (la asignación variable).

jasonwryan
fuente
1

expres un programa externo utilizado por Bourne shell (es decir, sh). Bourne Shell originalmente no tenía ningún mecanismo para realizar operaciones aritméticas simples. Utiliza exprun programa externo con la ayuda de backtick.

El backtick ( ` ) en realidad se llama sustitución de comando. La sustitución de comandos es el mecanismo por el cual el shell realiza un conjunto dado de comandos y luego sustituye su salida en lugar de los comandos.

sum=`expr $num1 + $num2`

En bash (bourne again shell) tiene la siguiente sintaxis, no usará un programa externo expr.

sum=$((num1+num2))

si queremos usar el programa externo expr. tenemos la siguiente sintaxis:

sum=$(expr $num1 + $num2)
Premraj
fuente
0

Si está usando bash, puede hacer algo como esto:

sum=$((num1+num2))
Saltando conejito
fuente
-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
Imtiyaz
fuente
también agregue alguna descripción sobre el código y cómo ayudará a resolver la pregunta
Tejas
-1

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = `expr $a + $b`"
pandu raju
fuente
-2

Puede usar una sola `tecla de retroceso (la clave)

sahare prashant
fuente
1
Es un backtick, y se recomienda usar $( ... )en su lugar en los depósitos. Además, el problema es que OP usa espacios donde no deberían.
vonbrand
-2
echo a 
read a
echo b
read b
c=`expr $a + $b`
echo $c
prasanna
fuente
-3
echo "addition of two number"

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

c=`expr $a + $b`

echo $c
kishan
fuente
3
Esto no responde la pregunta. Alguna explicación ayudaría.
Bernhard