¿Cómo se agrega un número como argumento de línea de comando?

10

Estoy tratando de agregar 1 número desde la línea de comando y un número como predeterminado. Por ejemplo: cuando el usuario escribe el número 50, el script agregará 10 (como el número predeterminado).

./script 50
The sum of 50+ 10 is 60. 

Esto es lo que tengo hasta ahora.

echo -n "Please enter a number: " 
read number 
default = 10
sum = $((default + number)) // this line does not seem to work
echo "The sum of $number and 10 is $sum."

¿Tengo la sintaxis incorrecta? No estoy seguro si estoy en el camino correcto. ¿Estoy agregando los números incorrectamente? ¿Debo usar awk en su lugar?

let sum = $default + $number 
techiegeek
fuente
Solo para agregar, en lugar de echoing y luego el uso de readdirectamente, puede escribir:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Respuestas:

2

Los espacios están causando los errores.

Si desea que el usuario ingrese el número cuando se le solicite "Ingrese un número:", puede usar su script con algunas correcciones como:

#!/bin/bash
echo -n "Please enter a number: " 
read number 
default=10
sum=`echo "$number + $default" | bc`
echo "The sum of $number and 10 is $sum."

Cheque:

./temp.sh
Please enter a number: 50
The sum of 50 and 10 is 60.

Si desea que el usuario ingrese el número como argumento para el guión, puede usar el guión a continuación:

#!/bin/bash
number="$1"
default=10
sum=`echo "$number + $default" | bc`
echo "The sum of $number and 10 is $sum."

Cheque:

./temp.sh 50
The sum of 50 and 10 is 60.
Mandar Shinde
fuente
3
¿Por qué molestarse en ejecutar bc solo para hacer aritmética de enteros simples?
PM 2Ring
14

No debe tener espacios entre "default = 10" y "sum = $", también default & number debe tener $ antes de ellos para leer de las variables.

El script entonces funciona como se esperaba para mí, cuando está escrito como a continuación;

#!/bin/bash

echo -n "Please enter a number: " 
read number 
default=10
sum=$(($default + $number))
echo "The sum of $number and 10 is $sum."
Chris Davidson
fuente
¡Oh ya veo! Lo entiendo ahora. Era solo un problema de espacio. Realmente pensé demasiado en esto. ¡Gracias por la ayuda!
techiegeek
3
Tenga en cuenta que no necesita usar el $interior de la expresión aritmética. Por ejemplo, intente esto:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

Esta es la forma más rápida de hacer lo que está pidiendo:

#!/bin/bash
echo "The sum of $1 + 10 is $(($1 + 10))."

Salida:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
cremefraiche
fuente
1
eso podría ser peligroso - intente./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@mikeserv Muy preciso, sin embargo, para el ejercicio no estoy seguro de si es una preocupación. Gracias por tu comentario de todos modos.
cremefraiche