Ich habe ein Bash-Skript mit folgenden Inhalten:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Dieses Skript wird nicht ohne das -e ausgeführt. Was macht das -e
für dieses Skript? Und was macht der $?
in diesem Zusammenhang?
-e
in der Manpage (ich möchte wirklich eine Antwortadresse dazu sehen).$?
enthält den letzten Exit-Code (den desegrep
oben erzeugten Prozesses).-e
ist dokumentiert unterset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
und[
. Dieses Skript funktioniert nicht mit-e
, da, wenngrep
nichts gefunden wird,-e
das Skript direkt dort beendet wird. Ohne-e
hast du die Nachricht verkehrt herum: Ein status ($?
) von 0 bedeutet, dass grep den Benutzer gefunden hat. Beachten Sie, dass dies übrigens "grep" ^ username: "sein sollte (was ist, wenn es einen anderen Benutzer mit einem längeren Namen gibt?).#/bin/bash -e
sich das genauso aus wie#/bin/bash
in Zeile 1 undset -e
in Zeile 2?Antworten:
Fehler beim Beenden. Noch mehr Fahnen
Wenn ein Fehler auftritt, wird er sofort beendet.
Die $? ist der Beendigungsstatus des vorherigen Befehls. Unter Linux bedeutet der Beendigungsstatus 0, dass der Befehl erfolgreich war. Jeder andere Status würde bedeuten, dass ein Fehler aufgetreten ist.
egrep "^ Benutzername" / etc / passwd> / dev / null Sucht nach dem Benutzernamen in der Datei / etc / passwd. Wenn es es findet, wird der Exit-Status $? wird gleich 0 sein. Wenn es es nicht findet, wird der Ausgangsstatus etwas anderes sein (nicht 0), daher werden Sie "Echo existiert nicht".
quelle
if egrep "^username" /etc/passwd >/dev/null
.set
erforderlich? : - /-e
als Kommandozeilenargument an bash übergeben wird. Alle unter aufgelisteten Optionenset
werden auch von bash in der Befehlszeile akzeptiert - beachten Sie den ersten Satz im Abschnitt Optionen der Handbuchseite.Alle bash-Befehlszeilenoptionen sind in dokumentiert
man bash
.quelle
set
erforderlich? : - /Dein Skript ist falsch, weil
exit status 0 - mean - alles ist OK, im Falle von grep mean "OK, fand den String". exit status! = 0 bedeutet, dass etwas nicht stimmt, im Fall von grep 1 bedeutet "nicht gefunden", 2 bedeutet "Eingang kann nicht geöffnet werden" ...
quelle