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
Intenté ejecutar esto en Ubuntu y Fedora pero ocurre el mismo error. ¿Alguien puede decirme lo que me falta aquí?
shell-script
Isuru
fuente
fuente
Respuestas:
Primero tiene que deshacerse de los espacios para la tarea, por ejemplo
entonces tienes que cambiar
'
a uno`
o incluso mejor para$()
:en lugar de usar
expr
, también puede hacer el cálculo directamente en su shell:fuente
expr
lugar de$((...))
es un deseo de ser portátil al clásico Bourne Shell, entonces también es una buena idea evitarlo$(...)
.$()
? Hasta donde yo sé, es requerido por Posix, por ejemplo, todos los shells compatibles con Posix deberían ser compatibles$()
$(…)
, pero se ha extinguido (tal vez alguien en algún lugar todavía se está ejecutando/bin/sh
en Solaris).$(…)
–– o al menos, no todas las versiones.Probablemente haya leído mal los backticks como comillas simples en la línea:
Ver Greg's Wiki sobre el uso en su
$(...)
lugar.Esto funciona como se esperaba:
También tenga en cuenta que no hay espacios alrededor del signo igual (la asignación variable).
fuente
expr
es 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. Utilizaexpr
un 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.
En bash (bourne again shell) tiene la siguiente sintaxis, no usará un programa externo
expr
.si queremos usar el programa externo
expr
. tenemos la siguiente sintaxis:fuente
Si está usando bash, puede hacer algo como esto:
fuente
fuente
fuente
Puede usar una sola `tecla de retroceso (la clave)
fuente
$( ... )
en su lugar en los depósitos. Además, el problema es que OP usa espacios donde no deberían.fuente
fuente