Wie fügt man eine Zahl als Befehlszeilenargument hinzu?

10

Ich versuche, 1 Nummer über die Befehlszeile und eine Nummer als Standard hinzuzufügen. Beispiel: Wenn der Benutzer die Nummer 50 eingibt, fügt das Skript 10 hinzu (als Standardnummer).

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

Das habe ich bisher.

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

Habe ich die falsche Syntax? Ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin. Füge ich die Zahlen falsch hinzu? Soll ich stattdessen awk verwenden?

let sum = $default + $number 
Techiegeek
quelle
Nur um hinzuzufügen, anstatt echoing und dann die Verwendung von readdirekt können Sie read -p 'Please enter a number: ' yournumber
eingeben

Antworten:

2

Leerzeichen verursachen die Fehler.

Wenn Sie möchten, dass der Benutzer die Nummer eingibt, wenn er als "Bitte geben Sie eine Nummer ein:" aufgefordert wird, können Sie Ihr Skript mit folgenden Korrekturen verwenden:

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

Prüfen:

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

Wenn der Benutzer die Nummer als Argument für das Skript eingeben soll, können Sie das folgende Skript verwenden:

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

Prüfen:

./temp.sh 50
The sum of 50 and 10 is 60.
Mandar Shinde
quelle
3
Warum sich die Mühe machen, bc auszuführen, nur um einfache Ganzzahlarithmetik durchzuführen?
PM 2Ring
14

Sie sollten keine Leerzeichen zwischen "default = 10" und "sum = $" haben, außerdem sollte default & number $ vor sich haben, um aus den Variablen zu lesen.

Das Skript funktioniert dann wie erwartet für mich, wenn es wie folgt geschrieben wird.

#!/bin/bash

echo -n "Please enter a number: " 
read number 
default=10
sum=$(($default + $number))
echo "The sum of $number and 10 is $sum."
Chris Davidson
quelle
Oh ich verstehe! Ich hab es jetzt. Es war nur ein Abstandsproblem. Ich habe das wirklich überlegt. Danke für die Hilfe!
Techiegeek
3
Beachten Sie, dass Sie das Innere des arithmetischen Ausdrucks nicht verwenden müssen $. Versuchen Sie dies beispielsweise:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

Dies ist der schnellste Weg, um das zu tun, was Sie verlangen:

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

Ausgabe:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
Creme fraiche
quelle
1
das könnte gefährlich sein - try./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@mikeserv Sehr genau, aber für die Übung bin ich mir nicht sicher, ob es ein Problem ist. Trotzdem danke für deinen Kommentar.
Cremefraiche