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 

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.

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

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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.