Ich habe versucht herauszufinden, was daran falsch ist, kann es aber einfach nicht herausfinden.
Dies ist der Teil scheint einen Fehler zu bekommen ..
elif [ $operation = "man" ]; then
if [ $aug1 = "add" ]; then # <- Line 75
echo "Man Page for: add"
echo ""
echo "Syntax: add [number 1] [number 2]"
echo ""
echo "Description:"
echo "Add two different numbers together."
echo ""
echo "Info:"
echo "Added in v1.0"
echo ""
elif [ -z $aug1 ]; then
echo "Please specify a command to read the man page."
else
echo "There is no manual page for that command."
fi
Ich bekomme diesen Fehler:
calc_1.2: line 75: [: =: unary operator expected
if
Aussage in Zeile 75 braucht afi
.Antworten:
Wenn Sie wissen, dass Sie immer bash verwenden werden, ist es viel einfacher
[[ ... ]]
, anstelle der Posix-kompatiblen Einzelklammerversion immer den bedingten zusammengesetzten Doppelklammerbefehl zu verwenden[ ... ]
. Innerhalb einer[[ ... ]]
Verbindung werden Wortaufteilung und Pfadnamenerweiterung nicht auf Wörter angewendet, sodass Sie sich darauf verlassen könnenum den Wert von
$aug1
mit der Zeichenfolge zu vergleichenand
.Wenn Sie verwenden
[ ... ]
, müssen Sie immer daran denken, Variablen wie diese in doppelte Anführungszeichen zu setzen:Wenn Sie die Variablenerweiterung nicht zitieren und die Variable undefiniert oder leer ist, verschwindet sie vom Tatort und bleibt nur übrig
Das ist keine gültige Syntax. (Es würde auch mit einer anderen Fehlermeldung fehlschlagen, wenn
$aug1
Leerzeichen oder Shell-Metazeichen enthalten wären .)Der moderne
[[
Operator verfügt über viele weitere nützliche Funktionen, einschließlich der Anpassung regulärer Ausdrücke.quelle
Ich habe eine Weile gebraucht, um dies zu finden, aber beachten Sie, dass bei einem Abstandsfehler auch derselbe Fehler angezeigt wird:
Richtig:
vs.
Wie immer
-x
hilft das Setzen der Debug-Variablen, diese zu finden:quelle
Versuchen Sie, einen Wert zuzuweisen,
$aug1
bevor Sie ihn inif[]
Anweisungen verwenden. Die Fehlermeldung verschwindet danach.quelle
du sagst ... :
Ich denke, es ist nur der Raum ... mach das so:
quelle
Sie können auch einen Standardwert für die Variable festlegen, sodass Sie nicht zwei "[" verwenden müssen, was zwei Prozessen entspricht ("[" ist eigentlich ein Programm) anstelle von einem.
Es folgt dieser Syntax: $ {VARIABLE: -default}.
Das Ganze muss so gedacht werden, dass dieser "Standard" -Wert etwas anderes ist als ein "gültiger" Wert / Inhalt.
Wenn dies aus irgendeinem Grund nicht möglich ist, müssen Sie wahrscheinlich einen Schritt hinzufügen, z. B. prüfen, ob überhaupt ein Wert vorhanden ist, wie z. B. "if [-z $ VARIABLE]; dann echo" die Variable muss gefüllt werden "" oder " Wenn [! -z $ VARIABLE]; dann ist # alles in Ordnung, fahren Sie mit dem Rest des Skripts fort ".
quelle
[[
erzeugt nicht zwei Prozesse, sondern ist eine eingebaute Shell (und auch[
eine eingebaute Bash).[[
unterscheidet sich von[ [
, was die zweite[
als Zeichenfolge behandelt