Ich habe einen folgenden Code, der besagt, dass, wenn alles ausgeführt wird, eine E-Mail an eine Person gesendet wird, wenn die E-Mail an die Person mit einer Fehlermeldung fehlschlägt.
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
Ich bin neu in Linux-Codierung. Ich möchte verstehen, was if [[ $? -ne 0 ]];
bedeutet
Kurz gesagt, einfache Begriffe:
[[ and ]]
... bedeutet, dass ein Test auf Wahrhaftigkeit gemacht wird.
$?
... ist eine Variable, die den Exit-Code des letzten Ausführungsbefehls enthält.
-ne 0
... prüft, ob die Sache links ($?
) "ungleich" bis "Null" ist. In UNIX war ein Befehl, der mit Null beendet wird, erfolgreich, während ein Exit mit einem anderen Wert (1, 2, 3 ... bis zu 255) fehlgeschlagen ist.
if [[ $? -ne 0 ]];
Überprüft den Rückgabewert der unmittelbar vorhergehenden if-Bedingung.
$?
bedeutet Rückkehrcode$? -ne 0
bedeutet, dass der vorherige Befehl einen Fehler zurückgegeben hat, da 0 als Erfolg betrachtet wirdWenn der vorherige Befehl einen Fehler zurückgegeben hat.
Das Snippet ist vermutlich Teil eines Codes, der ungefähr so aussieht:
for var in list of words; do
cmd $var
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
Was könnte (und sollte) einfacher geschrieben werden als:
for var in list of words; do
if ! cmd $var; then
message="could not PreProcess files"
else
message="PreProcessed files
fi
mailx -s" $message" [email protected]
done
Die [[ $? -ne 0 ]]
-Klausel ist eine hackige Methode, um den Rückgabewert von cmd
zu überprüfen. Es ist jedoch fast immer nicht erforderlich, $?
explizit zu überprüfen. Code ist fast immer sauberer, wenn Sie der Shell die Überprüfung durch Aufrufen des Befehls in der if-Klausel überlassen.