Ich verstehe, dass die Überprüfung auf Fehler in Linux unter Verwendung von $?
erfolgen kann. Die Sache ist, dass der $?
Wert zurückgesetzt wird, wenn einer der Befehle erfolgreich ausgeführt wird, selbst wenn der vorherige Befehl fehlgeschlagen ist. Der Code, den ich wie unten zum Testen verwenden:
cd /vobs/test2/test3
if [ $2 = "R" ]; then
mv missing ~/missing2
echo "Created"
Unter der Annahme, dass mv missing ~/missing2
die $?
gescheitert sollte echo "Created"
die $?
ausgeführt 1
aber aufgrund des letzten Befehl gleich sein werden 0
gleich sein. Wie führe ich einen Scan für den obigen Code durch, so dass $?=1
exit 1
Befehl ausgeführt wird. Ich kann ausführen, wenn sonst für jeden Befehl ausgeführt wird, aber es ist nicht der beste Weg, etwas zu tun, oder? Ich brauche dazu bitte einen Rat.
Beachten Sie, dass es hilfreich wäre, wenn Sie ein funktionierendes Fragment des Shell-Skripts gezeigt hätten. Du hast das 'fi' verpasst, was es schwer macht zu erraten, was du wirklich vorhast - war das' echo' im Körper des 'if' oder außerhalb? Die Einrückung hilft uns auch nicht. Im Allgemeinen sollten Sie '" $ 2 "' in Anführungszeichen einschließen (aber es wäre egal, wenn Sie die Anführungszeichen um '' R '' weglassen würden, obwohl ich sie aus Konsistenzgründen hier behalten würde). Wenn Sie sich Sorgen darüber machen, dass ein Befehl fehlschlägt, können Sie ihn testen: 'falls mv fehlt ~/fehlt; dann echo "Erstellt"; else echo "Erstellung fehlgeschlagen"; fi', etc. Oder Sie können 'set -e' verwenden. –
Best Practices sind im Allgemeinen, um Ihre Fehlerbehandlung in einer Weise zu erstellen, die für das vorliegende Skript geeignet ist. 'die() {(($ #)) && echo" $ * "> & 2; Ausgang 1; } 'ist eine nützliche Utility-Funktion für diesen Zweck, gefolgt von Anwendungen wie' cd/vobs/test2/test3 || sterben. –
... 'set -e' kann verwendet werden, erfordert aber ein wenig Sorgfalt und Vorsicht; Siehe meinen Link in einem Kommentar zu der vorhandenen Antwort. –