ubuntuusers.de

Bash: Fehlgeschlagenes Kommando im Script finden.

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

cpt.hawk

Anmeldungsdatum:
12. Februar 2007

Beiträge: Zähle...

Hallo,

ich hab ein Backupscript geschrieben, um die Daten aus meinem Home Verzeichniss zu sichern. Dieses Script schreibt, wenn das Backup ohne Fehler gelaufen ist, einen entsprechen Eintrag in einem Logfile machen. Um festzustellen ob alle Kommandos korrekt gelaufen sind, habe ich die Bedingung so miteinander Verknüpft, dass ein Kommando nur ausgeführt wird wenn das voherige erfolgreich war.

Syntax: (sollte bekannt sein) cmd1 && cmd 2 && cmd3 && ....

Wenn alles durchläuft gibt das letzte Kommadno den Exit-Wert 0 zurück.

Ich hab mich jetzt dazu entschlossen auch Fehler in den Logfile zu schreiben. Dazu fang ich halt den Exit-Wert 1 ab. So weit so gut. Ich will aber auch gerne reinschreiben bei welchem Kommando der Fehler aufgetreten ist.

Dazu meine Frage: Wie kann ich im Script das letzte ausgeführte Kommando feststellen.

Mfg cpt.hawk

PS: Sollte jemand eine Idee haben wie man es anders und/oder besser machen könnte, kann er auch das gern sagen. Cih bin für alles offen.

MrDoubtfire

Anmeldungsdatum:
18. Oktober 2005

Beiträge: 210

Hallo cpt.hawk,

suchst Du sowas:

cmd1 || echo "Fehler bei cmd1" >> logfile && cmd2 || echo "Fehler bei cmd2" >> logfile && cmd3 || echo "Fehler bei cmd3" >> logfile

Allerdings ist das nicht sehr les- und wartbar...
Besser:

#!/bin/bash

cmd1
if [ $? -eq 0 ]
then
  cmd2
  if [ $? -eq 0 ]
  then
    cmd3
    if [ ! $? -eq 0 ]
    then
      echo "Fehler bei cmd3" >> logfile
    fi
  else
    echo "Fehler bei cmd2" >> logfile
  fi
else
  echo "Fehler bei cmd1" >> logfile
fi

MrDoubtfire

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

#!/bin/bash

cmd1
if [ $? -eq 0 ]
then
  cmd2
  if [ $? -eq 0 ]
  then
    cmd3
    if [ ! $? -eq 0 ]
    then
      echo "Fehler bei cmd3" >> logfile
    fi
  else
    echo "Fehler bei cmd2" >> logfile
  fi
else
  echo "Fehler bei cmd1" >> logfile
fi 


Bitte nicht... 🙄
Wenn schon, dann so:

#!/bin/bash
if cmd1
then
    if cmd2
    then
        if ! cmd3
        then
            echo "Fehler bei cm3" >> logfile
        fi
    else
        echo "Fehler bei cmd2" >> logfile
    fi
else
    echo "Fehler bei cmd1" >> logfile
fi


Das test Kommando wäre hier völlig überflüssig 😉

Gruß Martin

cpt.hawk

(Themenstarter)

Anmeldungsdatum:
12. Februar 2007

Beiträge: 97

Vielen Dank. Damit komm ich weiter.

Antworten |