Hur lägger du till ett nummer som ett kommandoradsargument?

Jag försöker lägga till 1 nummer från kommandoraden och ett nummer som en standard. Till exempel: När användaren skriver in siffran 50 skript kommer att lägga till 10 (som standardnummer).

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

Detta är vad jag har hittills.

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

Har jag syntaxen fel? Jag är inte säker på om jag är på rätt spår. Lägger jag till siffrorna fel? Ska jag använda awk istället?

let sum = $default + $number 

Kommentarer

  • Bara att lägga till, istället för echo ing och sedan användningen av read direkt kan du skriva: read -p 'Please enter a number: ' yournumber

Svar

Utrymmen orsakar felen.

Om du vill att användaren ska ange numret när han uppmanas att ”Ange ett nummer:”, kan du använda ditt skript med några korrigeringar som:

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

Kontroll:

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

Om du vill ha oss för att mata in numret som ett argument i skriptet kan du använda skriptet nedan:

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

Kontroll:

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

Kommentarer

  • Varför bry sig om att köra bc bara för att göra enkel helräkning?

Svar

Du ska inte ha mellanslag mellan ”default = 10” & ”sum = $”, även standard & nummer ska ha $ före sig för att läsa från variablerna.

Skriptet fungerar sedan som förväntat för mig, när det skrivs som nedan;

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

Kommentarer

  • Åh förstår jag! Jag förstår nu. Det var bara en avståndsfråga. Jag tänkte verkligen på det här. Tack för hjälpen!
  • Observera att du inte ' t behöver använda $ inuti det aritmetiska uttrycket. Testa t.ex.: num=5;def=10;echo "sum = $((num + def))"

Svar

Detta är det snabbaste sättet att göra vad du frågar:

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

Utgång:

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

Kommentarer

  • som kan vara farligt – prova ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Mycket exakt, men för övningen jag ' jag är inte säker på om det är ett problem. Tack för din kommentar oavsett.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *