Wie fügt man eine Zahl als Befehlszeilenargument hinzu?

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

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

Dies ist, was ich bisher habe.

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 nicht sicher, ob ich auf dem richtigen Weg bin. Füge ich die falschen Zahlen hinzu? Soll ich stattdessen awk verwenden?

let sum = $default + $number 

Kommentare

  • Nur zum Hinzufügen, anstatt echo und dann die Verwendung von read Sie können direkt Folgendes eingeben: read -p 'Please enter a number: ' yournumber

Antwort

Leerzeichen verursachen die Fehler.

Wenn der Benutzer die Nummer eingeben soll, wenn er als „Bitte geben Sie eine Nummer ein:“ aufgefordert wird, können Sie Ihr Skript mit verwenden Einige Korrekturen wie:

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

Überprüfen Sie:

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

Wenn Sie die USA möchten Um die Nummer als Argument für das Skript einzugeben, 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." 

Überprüfen Sie:

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

Kommentare

  • Warum sollte man bc ausführen, um einfache Ganzzahlarithmetik durchzuführen?

Antwort

Sie sollten keine Leerzeichen zwischen „default = 10“ & „sum = $“ haben, auch default & Nummer sollte $ 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." 

Kommentare

  • Oh, ich verstehe! Ich hab es jetzt. Es war nur ein Abstandsproblem. Ich habe das wirklich überlegt. Vielen Dank für die Hilfe!
  • Beachten Sie, dass Sie nicht ' t die $ innerhalb des arithmetischen Ausdrucks. Versuchen Sie dies beispielsweise: num=5;def=10;echo "sum = $((num + def))"

Antwort

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. 

Kommentare

  • das könnte gefährlich sein – versuchen Sie ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Sehr genau, jedoch für die Übung I ' Ich bin nicht sicher, ob es sich um ein Problem handelt. Trotzdem vielen Dank für Ihren Kommentar.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.