Ich lerne Shell-Scripting für ein Diplom in IT, das ich gerade mache. Ich versuche, ein kleines Skript zu schreiben, das zwei Zahlen hinzufügt, wie in einem der Tutorials gezeigt.

echo "Enter two numbers" read num1 num2 sum = "expr $num1 + $num2" echo "The sum is = $sum" 

Wenn ich es jedoch gebe Ausführungsberechtigung und Ausführen des Skripts, es gibt mir diesen Fehler.

sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory 

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, dies unter Ubuntu und Fedora auszuführen, aber es tritt der gleiche Fehler auf. Kann mir bitte jemand sagen, was mir hier fehlt?

Kommentare

Antwort

Zuerst müssen Sie die Leerzeichen für die Zuweisung entfernen, z. B.

sum="expr $num1 + $num2" 

dann müssen Sie " in ` oder noch besser in :

sum=$(expr "$num1" + "$num2") 

Anstatt expr zu verwenden, können Sie auch die Berechnung durchführen ulation direkt in Ihrer Shell:

sum=$((num1 + num2)) 

Kommentare

  • Wenn die Motivation für die Verwendung von expr anstelle von $((...)) ist der Wunsch, auf die klassische Bourne-Shell portierbar zu sein. Dann ist ' eine gute Idee um $(...) ebenfalls zu vermeiden.
  • @AlanCurry Gibt es Shells, die $() nicht unterstützen? Soweit ich weiß, wird es von posix benötigt, z. Alle posix-kompatiblen Shells sollten $()
  • @UlrichDangel unterstützen. Die ursprüngliche Bourne-Shell hatte ' kein $(…), aber es ist ungefähr ausgestorben (vielleicht läuft irgendwo noch /bin/sh unter Solaris).
  • Die C-Shell funktioniert nicht. t unterstützt $(…) –– oder zumindest nicht alle Versionen.
  • Was ist der Zweck von doppelten Anführungszeichen um die Variablen?

Antwort

Sie haben Backticks wahrscheinlich als einfache Anführungszeichen in der Zeile falsch gelesen:

sum = "expr $num1 + $num2"

Siehe Gregs Wiki zur Verwendung von $(...).

Dies funktioniert wie erwartet:

sum=$(expr "$num1" + "$num2")

Beachten Sie auch, dass das Gleichheitszeichen (die Variablenzuweisung) keine Lücken aufweist.

Antwort

expr ist ein externes Programm, das von Bourne-Shell (d. h. Sch). Die Bourne-Shell hatte ursprünglich keinen Mechanismus, um eine einfache Arithmetik durchzuführen. Sie verwendet das externe Programm expr mit Hilfe des Backticks.

Der Backtick ( `) wird tatsächlich als Befehlssubstitution bezeichnet. Die Befehlssubstitution ist der Mechanismus, mit dem die Shell einen bestimmten Befehlssatz ausführt und dann ihre Ausgabe in der ersetzt Ort der Befehle.

sum=`expr $num1 + $num2` 

In bash (bourne again shell) es hat die folgende Systax, es wird kein externes Programm expr verwendet.

sum=$((num1+num2)) 

wenn wir das externe Programm expr verwenden möchten. Wir haben die folgende Systax:

sum=$(expr $num1 + $num2) 

Schreibe einen Kommentar

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