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

Sto cercando di aggiungere 1 numero dalla riga di comando e un numero come predefinito. Ad esempio: quando lutente 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." 

Ho la sintassi sbagliata? Non sono sicuro di essere sulla strada giusta. Sto aggiungendo i numeri in modo sbagliato? Dovrei invece usare awk?

let sum = $default + $number 

Commenti

  • Solo per aggiungere, invece di echo ing e poi luso di read puoi digitare direttamente: read -p 'Please enter a number: ' yournumber

Risposta

Gli spazi stanno causando gli errori.

Se desideri che lutente inserisca il numero quando gli viene chiesto come “Inserisci un numero:”, puoi utilizzare il tuo 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." 

Controlla:

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

Se vuoi noi Per inserire il numero come argomento dello script, puoi utilizzare lo script seguente:

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

Controlla:

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

Commenti

  • Perché preoccuparsi di eseguire bc solo per eseguire semplici operazioni aritmetiche su interi?

Risposta

Non dovresti avere spazi tra “default = 10” & “sum = $”, anche predefinito & il numero dovrebbe avere $ prima di loro per poter leggere dalle variabili.

Lo script quindi funziona come previsto per me, se scritto 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." 

Commenti

  • Oh capisco! Adesso ho capito. Era solo un problema di spaziatura. Ci ho davvero pensato. Grazie per laiuto!
  • Tieni presente che non ' t è necessario utilizzare $ allinterno dellespressione aritmetica. Ad esempio, prova questo: num=5;def=10;echo "sum = $((num + def))"

Answer

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

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

Output:

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

Commenti

  • che potrebbe essere pericoloso – prova ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Molto preciso, tuttavia per lesercizio I ' non sono sicuro che sia un problema. Grazie per il tuo commento a prescindere.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *