Cum adăugați un număr ca argument de linie de comandă?

Încerc să adaug 1 număr din linia de comandă și un număr ca în mod implicit. De exemplu: Când utilizatorul introduce numărul 50 scriptul va adăuga 10 (ca număr implicit).

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

Aceasta este ceea ce am până acum.

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

Am greșit sintaxa? Nu sunt sigur dacă sunt pe drumul cel bun. Adăug greșit numerele? Ar trebui să folosesc în schimb awk?

let sum = $default + $number 

Comentarii

  • Doar pentru a adăuga, în loc de echo ing și apoi utilizarea read direct puteți introduce: read -p 'Please enter a number: ' yournumber

Răspuns

Spațiile cauzează erorile.

Dacă doriți ca utilizatorul să introducă numărul atunci când i se solicită „Vă rugăm să introduceți un număr:”, puteți utiliza scriptul cu câteva corecții ca:

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

Verificați:

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

Dacă doriți ca noi er pentru a introduce numărul ca argument pentru script, puteți utiliza scriptul de mai jos:

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

Verificați:

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

Comentarii

  • De ce să te deranjezi să rulezi bc doar pentru a face aritmetică simplă întreagă?

Răspuns

Nu ar trebui să aveți spații între „default = 10” & „sum = $”, de asemenea implicit & numărul ar trebui să aibă $ înaintea lor pentru a citi din variabile.

Scriptul funcționează așa cum era de așteptat pentru mine, atunci când este scris ca mai jos;

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

Comentarii

  • Oh, văd! Am înțeles acum. A fost doar o problemă de spațiu. Chiar m-am gândit la asta. Vă mulțumim pentru ajutor!
  • Rețineți că nu ' t trebuie să utilizați $ în interiorul expresiei aritmetice. De exemplu, încercați acest lucru: num=5;def=10;echo "sum = $((num + def))"

Răspuns

Acesta este cel mai rapid mod de a face ceea ce cereți:

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

Ieșire:

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

Comentarii

  • care ar putea fi periculos – încercați ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Foarte precis, totuși pentru exercițiul I ' Nu sunt sigur dacă este o problemă. Vă mulțumim pentru comentariu indiferent.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *