it-swarm.com.de

Hinzufügen von zwei Zahlen mit Ausdruck

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

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

Wenn ich ihm jedoch die Ausführungsberechtigung erteile und das Skript ausführe, wird mir dieser Fehler angezeigt.

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

enter image description here

Ich habe versucht, dies sowohl unter Ubuntu als auch unter Fedora auszuführen, aber der gleiche Fehler tritt auf. Kann mir bitte jemand sagen, was ich hier vermisse?

13
Isuru

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

sum='expr $num1 + $num2'

dann müssen Sie ' in ` oder noch besser in $() ändern:

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

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

sum=$((num1 + num2))
39
Ulrich Dangel

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.

9
jasonwryan

expr ist ein externes Programm, das von Bourne Shell (d. h. sh) verwendet wird. Bourne Shell hatte ursprünglich keinen Mechanismus, um einfache Arithmetik durchzuführen. Es verwendet das externe Programm expr mit Hilfe von Backtick.

Das Backtick (`) wird eigentlich als Befehlssubstitution bezeichnet. Die Befehlssubstitution ist der Mechanismus, mit dem die Shell einen bestimmten Satz von Befehlen ausführt und dann deren Ausgabe anstelle der Befehle ersetzt.

sum=`expr $num1 + $num2`

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

sum=$((num1+num2))

wenn wir das externe Programm expr verwenden wollen. Wir haben die folgende Systax:

sum=$(expr $num1 + $num2)
1
Premraj

Wenn Sie bash verwenden, können Sie einfach Folgendes tun:

sum=$((num1+num2))
0
Hopping Bunny