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 ihm jedoch die Ausführungsberechtigung erteile und das Skript ausführe, erhalte ich diesen Fehler.
sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory
Ich habe versucht, dies auf Ubuntu und Fedora auszuführen, aber derselbe Fehler tritt auf. Kann mir bitte jemand sagen, was ich hier vermisse?
shell-script
Isuru
quelle
quelle
Antworten:
Zuerst müssen Sie die Leerzeichen für die Zuordnung entfernen, z
dann musst du
'
auf a`
oder noch besser auf$()
:Anstatt zu verwenden
expr
, können Sie die Berechnung auch direkt in Ihrer Shell durchführen:quelle
expr
anstelle des$((...))
Wunsches ist, auf die klassische Bourne-Shell portierbar zu sein, ist es eine gute Idee, dies ebenfalls zu vermeiden$(...)
.$()
? So weit ich weiß, wird es von posix benötigt, zB sollten alle posix-kompatiblen Shells unterstützt werden$()
$(…)
, aber sie ist fast ausgestorben (vielleicht läuft irgendwo noch jemand unter/bin/sh
Solaris).$(…)
- oder zumindest nicht alle Versionen.Sie haben wahrscheinlich Backticks als einfache Anführungszeichen in der Zeile falsch interpretiert:
Siehe stattdessen Gregs Wiki zur Verwendung
$(...)
.Das funktioniert wie erwartet:
Beachten Sie auch, dass es keine Lücken um das Gleichheitszeichen (die Variablenzuordnung) gibt.
quelle
expr
ist ein externes Programm, das von der Bourne-Shell verwendet wird (dh sh). Die Bourne-Shell verfügte ursprünglich nicht über einen Mechanismus, um einfache Arithmetik durchzuführen. Es verwendetexpr
externes Programm mit Hilfe von Backtick.Das Backtick ( ` ) wird eigentlich als Befehlsersetzung bezeichnet. Die Befehlsersetzung ist der Mechanismus, mit dem die Shell einen bestimmten Satz von Befehlen ausführt und dann deren Ausgabe anstelle der Befehle ersetzt.
In bash (bourne again shell) hat es den folgenden Systax, es wird kein externes Programm verwendet
expr
.wenn wir das externe Programm verwenden wollen
expr
. wir haben folgenden systax:quelle
Wenn Sie bash verwenden, können Sie einfach Folgendes tun:
quelle
quelle
quelle
Sie können ein einzelnes Backtick (den `Schlüssel) verwenden.
quelle
$( ... )
stattdessen in den Muscheln zu verwenden. Außerdem ist das Problem, dass OP Räume verwendet, in denen sie nicht sollten.quelle
quelle