Estoy aprendiendo a escribir en Shell para un diploma en TI que estoy haciendo actualmente. Estoy tratando de escribir un pequeño script que agregue 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 el permiso de ejecución y ejecutar 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 tanto en Ubuntu como en Fedora, pero se produce el mismo error. ¿Alguien puede decirme lo que «me estoy perdiendo aquí?

Comentarios

Respuesta

Primero debe deshacerse de los espacios para la tarea, por ejemplo

sum="expr $num1 + $num2" 

entonces tienes que cambiar " a ` o incluso mejor a $():

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

en lugar de usar expr también puedes hacer el cálculo ulación directamente en su shell:

sum=$((num1 + num2)) 

Comentarios

  • Si la motivación para usar expr en lugar de $((...)) es un deseo de ser portátil al shell Bourne clásico, entonces ' es una buena idea para evitar $(...) también.
  • @AlanCurry ¿Hay shells que no admitan $()? Hasta donde yo sé, posix lo requiere, p. Ej. todos los shells compatibles con Posix deben admitir $()
  • @UlrichDangel El shell Bourne original no ' no tenía $(…), pero casi se ha extinguido (tal vez alguien en algún lugar todavía esté ejecutando /bin/sh en Solaris).
  • El shell C no lo hace t admite $(…) –– o al menos, no todas las versiones.
  • ¿Cuál es el propósito de tener comillas dobles alrededor de las variables?

Respuesta

Probablemente haya leído mal las comillas inversas como comillas simples en la línea:

sum = "expr $num1 + $num2"

Consulte la Wiki de Greg sobre el uso de $(...) en su lugar.

Este funciona como se esperaba:

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

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

Respuesta

expr es un programa externo utilizado por Bourne shell (es decir sh). El shell Bourne no tenía originalmente ningún mecanismo para realizar operaciones aritméticas simples. Utiliza expr un programa externo con la ayuda de comillas inversas.

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

sum=`expr $num1 + $num2` 

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

sum=$((num1+num2)) 

si queremos utilizar el programa externo expr. tenemos la siguiente systax:

sum=$(expr $num1 + $num2) 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *