Jak dodać liczbę jako argument wiersza poleceń?

Próbuję dodać 1 liczbę z wiersza poleceń i jedną liczbę jako domyślną. Na przykład: Gdy użytkownik wpisze liczbę 50, skrypt doda 10 (jako domyślną liczbę).

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

To, co mam do tej pory.

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

Czy składnia jest nieprawidłowa? Nie jestem pewien, czy jestem na właściwej ścieżce. Czy źle dodam liczby? Czy zamiast tego powinienem użyć awk?

let sum = $default + $number 

Komentarze

  • Wystarczy dodać zamiast echo ing, a następnie użyć read bezpośrednio możesz wpisać: read -p 'Please enter a number: ' yournumber

Odpowiedź

Spacje powodują błędy.

Jeśli chcesz, aby użytkownik wprowadził liczbę, gdy zostanie wyświetlony monit „Wprowadź liczbę:”, możesz użyć skryptu z kilka poprawek, takich jak:

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

Sprawdź:

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

Jeśli chcesz, abyśmy er aby wprowadzić liczbę jako argument do skryptu, możesz użyć poniższego skryptu:

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

Sprawdź:

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

Komentarze

  • Po co uruchamiać bc tylko po to, aby wykonywać proste obliczenia arytmetyczne na liczbach całkowitych?

Odpowiedź

Nie powinno być spacji między „default = 10” & „sum = $”, również domyślnie & numer powinien mieć przed sobą znak $, aby odczytać ze zmiennych.

Skrypt działa wtedy zgodnie z oczekiwaniami, gdy jest napisany jak poniżej;

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

Komentarze

  • Och, rozumiem! Mam to teraz. To był tylko problem z odstępami. Naprawdę przemyślałem to. Dziękuję za pomoc!
  • Pamiętaj, że nie ' t musisz używać $ wewnątrz wyrażenia arytmetycznego. Na przykład spróbuj tego: num=5;def=10;echo "sum = $((num + def))"

Odpowiedź

To najszybszy sposób na zrobienie tego, o co prosisz:

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

Dane wyjściowe:

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

Komentarze

  • to może być niebezpieczne – spróbuj ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Bardzo dokładne, jednak w przypadku ćwiczenia I ' Nie jestem pewien, czy jest to problem. Dziękuję za komentarz niezależnie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *