Hvordan tilføjer du et nummer som et kommandolinjeargument?

Jeg prøver at tilføje 1 nummer fra kommandolinjen og et nummer som en standard. For eksempel: Når brugeren skriver nummeret 50, script tilføjer 10 (som standardnummer).

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

Dette er hvad jeg har hidtil.

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 jeg syntaksen forkert? Jeg er ikke sikker på, om jeg er på rette spor. Tilføjer jeg tallene forkert? Skal jeg bruge awk i stedet?

let sum = $default + $number 

Kommentarer

  • Bare for at tilføje i stedet for echo ing og derefter brugen af read direkte kan du skrive: read -p 'Please enter a number: ' yournumber

Svar

Mellemrum forårsager fejlene.

Hvis du vil have brugeren til at indtaste nummeret, når han bliver bedt om at “Indtast et nummer:”, kan du bruge dit script med nogle rettelser 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." 

Check:

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

Hvis du vil have os er for at indtaste nummeret som et argument til scriptet, kan du bruge scriptet nedenfor:

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

Check:

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

Kommentarer

  • Hvorfor gider du at køre bc bare for at gøre simpelt heltal aritmetik?

Svar

Du skal ikke have mellemrum mellem “default = 10” & “sum = $”, også standard & nummer skal have $ foran sig til at læse fra variablerne.

Scriptet fungerer derefter som forventet for mig, når det er skrevet som nedenfor;

#!/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 jeg ser! Jeg fik det nu. Det var bare et afstandsproblem. Jeg tænkte virkelig over dette. Tak for hjælpen!
  • Bemærk at du ikke ' t har brug for at bruge $ inde i det aritmetiske udtryk. F.eks. Prøv dette: num=5;def=10;echo "sum = $((num + def))"

Svar

Dette er den hurtigste måde at gøre, hvad du beder om:

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

Output:

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

Kommentarer

  • der kunne være farligt – prøv ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Meget nøjagtig, dog for øvelsen I ' er ikke sikker på, om det er et problem. Tak for din kommentar uanset.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *