Jak dodać liczbę jako argument wiersza poleceń?


10

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

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

To właśnie mam.

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 mam niepoprawną składnię? Nie jestem pewien, czy jestem na dobrej drodze. Czy źle dodałem liczby? Czy zamiast tego powinienem używać awk?

let sum = $default + $number 

Aby dodać, zamiast echoing, a następnie użycia readbezpośrednio, możesz wpisać:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Odpowiedzi:


2

Spacje powodują błędy.

Jeśli chcesz, aby użytkownik wprowadził numer, gdy pojawi się monit „Wprowadź liczbę:”, możesz użyć skryptu z pewnymi poprawkami, 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."

Czek:

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

Jeśli chcesz, aby użytkownik wprowadził liczbę jako argument do skryptu, możesz użyć skryptu poniżej:

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

Czek:

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

3
Po co zawracać sobie głowę uruchamianiem bc tylko po to, aby wykonywać proste działania arytmetyczne na liczbach całkowitych?
PM 2,

15

Nie powinieneś mieć spacji między „default = 10” i „sum = $”, również default & number powinny mieć $ przed nimi do odczytania 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."

Rozumiem! Mam to teraz. To był tylko problem z odstępami. Naprawdę nad tym myślałem. Dziękuję za pomoc!
techiegeek,

3
Zauważ, że nie musisz używać $wewnętrznego wyrażenia arytmetycznego. Np. Spróbuj tego:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring

4

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

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

Wynik:

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

1
to może być niebezpieczne - spróbuj./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv

@mikeserv Bardzo dokładne, jednak w przypadku ćwiczenia nie jestem pewien, czy jest to problem. Dziękuję za komentarz niezależnie od tego.
cremefraiche,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.