Überprüfen des Befehlserfolgs in Bash

Überprüfen des Befehlserfolgs in Bash

Ich schreibe derzeit ein kleines Skript, um große Mengen Disketten zu sichern und sie anschließend für die spätere Verwendung zu formatieren.

Ich verwende es, ddum das Image der Festplatte und cpalle Dateien auf der Festplatte zu kopieren.

Hier sind die Befehle, die ich dazu verwende:

# Copying disk image
dd if="/dev/fd0" of="/path/to/backup/folder" &>/dev/null && sync

# Copying disk files
cp -R "/mnt/floppy/." "/path/to/backup/folder/" &>/dev/null

Nach diesem Vorgang muss das Skript die Diskette formatieren. Mein Problem ist, dass mein Skript die Diskette nur formatieren soll, wenn beide Sicherungsbefehle ( ddund cp) erfolgreich waren.

Wenn beispielsweise ddaufgrund fehlerhafter Blöcke nicht alle 1,44 MB der Diskette kopiert werden konnten, formatieren Sie die Diskette nicht.

Wie kann ich testen, ob beide Befehle erfolgreich waren (sie müssen separat getestet werden, da ich nicht immer sowohl das Image als auch die Dateien der Festplatte sichere)?

Antwort1

Da Sie Bash verwenden, fügen Sie einfach hinzu:

set -e

an den Anfang Ihres Skripts und es schlägt fehl, wenn einer der Befehle fehlschlägt.

Antwort2

Ja, würde ich:

ok=true
if dd ...; then
  sync
else
  ok=false
fi

cp ... || ok=false

if "$ok"; then
  mformat...
fi

Antwort3

Versuche es mit:

dd <command>
DD_EXIT_STATUS=$?

cp <command>
CP_EXIT_STATUS=$?

if [[ DD_EXIT_STATUS -eq 0 && CP_EXIT_STATUS -eq 0 ]]; then
    format floppy disk
else
    ... other stuff ...
fi

Antwort4

FürFehlervermeidungIhre Befehle:

execute [INVOKING-FUNCTION] [COMMAND]

execute () {
    error=$($2 2>&1 >/dev/null)

    if [ $? -ne 0 ]; then
        echo "$1: $error"
        exit 1
    fi
}

Inspiriertim Lean Manufacturing:

verwandte Informationen