Ich habe den folgenden if
Block in meinem Bash-Skript:
if [ ${PACKAGENAME} -eq kakadu-v6_4-00902C ]; then
echo "successfully entered if block!!"
fi
Die Skriptausführung betritt meinen if
Block nicht, obwohl $PACKAGENAME
gleich ist kakadu-v6_4-00902C
. Was mache ich falsch?
bash
shell-script
test
DemiSheep
quelle
quelle
-eq
gilt für ganze Zahlen, Sie möchten auf eine Zeichenfolge oder einen regulären==
=~
jasonwryan
ich schaue mir diese Ressource an!Antworten:
-eq
ist ein arithmetischer Operator, der zwei Zahlen vergleicht.Verwenden Sie
=
(tragbar / Standardsh
)=~
oder==
stattdessen.Verwenden Sie auch Anführungszeichen, denn wenn
${PACKAGENAME}
ein Leerzeichen oder ein Platzhalterzeichen enthalten ist, wird es in mehrere Argumente aufgeteilt, wodurch[
mehr Argumente als gewünscht angezeigt werden. Sehen Sie sich hier eine Liste der gängigen Fallstricke an.Siehe
man bash
search ( /) fürCONDITIONAL EXPRESSIONS
.quelle
polym
ich schau mal rein, danke für die Ressource! Ich öffne diesen Tab neben meiner VI-Anleitung. :)[[ $PACKAGENAME == "kakadu..." ]]
ist es in Ordnung.=
,==
und!=
, weil die Seite ein Muster ist, kein String. Zum Beispielfoo='*'; [[ whatever = $foo ]]
ist wahr.Ersetzen Sie
-eq
mit,==
damit Ihr if-Block wie folgt lautet :quelle
Ein anderer Weg ist, sie zu negieren:
Der obige Block testet zuerst, ob
"$PACKAGENAME"
überhaupt ein Wert vorhanden ist, und wenn nicht, wird er mit einem Fehler beendet und gibt ein Echo?'this'}
von ausstderr
. Wenn die übergeordnete Shell noch vorhanden ist, ist der Test bestanden. Anschließend wird geprüft, ob das Entfernen der Zeichenfolge 'kakadu ...' aus der Variablen zu einer-z
leeren Zeichenfolge führt. Wenn dies nicht der Fall ist, wird erneut ein Fehler ausgegeben und die Shell verlassen. Wenn Ihre Shell zu diesem Zeitpunkt noch vorhanden ist, nachdem der Block ausgeführt wurde, ist dies ansonsten nicht der Fall.Wahrscheinlich lässt sich so etwas am besten in eine Funktion implementieren. Mögen:
Mit dieser Funktion können Sie so viele Argumente angeben, wie Ihr System zulässt. Wenn Sie weniger als 2 angeben, wird 1 zurückgegeben und eine Nachricht an gesendet
stderr
. Wenn Sie 2 oder mehr Argumente angeben, werden alle als Zeichenfolgen behandelt, und es wird 0 zurückgegeben, wenn alle identisch und nicht null sind. Andernfalls wird die Argumentnummer zurückgegeben, bei der die Prüfung zuerst fehlschlägt.In Ihrem Fall kann es wie folgt verwendet werden:
Zur weiteren Demonstration schreibe ich eine andere Funktion:
DEMO:
AUSGABE:
quelle