Come si aggiunge un numero come argomento della riga di comando?


10

Sto cercando di aggiungere 1 numero dalla riga di comando e un numero come predefinito. Ad esempio: quando l'utente digita il numero 50, lo script aggiungerà 10 (come numero predefinito).

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

Questo è quello che ho finora.

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

La sintassi è sbagliata? Non sono sicuro di essere sulla strada giusta. Sto aggiungendo i numeri sbagliati? Dovrei usare awk invece?

let sum = $default + $number 

Solo per aggiungere, invece di echoing e quindi l'utilizzo di readdirettamente è possibile digitare:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Risposte:


2

Gli spazi stanno causando gli errori.

Se si desidera che l'utente inserisca il numero quando viene richiesto come "Immettere un numero:", è possibile utilizzare lo script con alcune correzioni come:

#!/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."

Dai un'occhiata:

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

Se si desidera che l'utente inserisca il numero come argomento nello script, è possibile utilizzare lo script seguente:

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

Dai un'occhiata:

./temp.sh 50
The sum of 50 and 10 is 60.

3
Perché preoccuparsi di eseguire bc solo per fare l'aritmetica dei numeri interi semplici?
PM 2Ring

14

Non dovresti avere spazi tra "default = 10" e "sum = $", inoltre default e numero dovrebbero avere $ prima di poter leggere dalle variabili.

La sceneggiatura funziona quindi come previsto per me, se scritta come di seguito;

#!/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, capisco! Ora ho capito. Era solo un problema di spaziatura. Ci ho davvero pensato. Grazie per l'aiuto!
techiegeek,

3
Si noti che non è necessario utilizzare l' $interno dell'espressione aritmetica. Ad esempio, prova questo:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring

4

Questo è il modo più veloce per fare ciò che stai chiedendo:

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

Produzione:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.

1
potrebbe essere pericoloso - prova./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv il

@mikeserv Molto preciso, tuttavia per l'esercizio non sono sicuro che sia un problema. Grazie per il tuo commento a prescindere.
Cremefraiche,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.