¿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 

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.

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."

¡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.

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.