Endestatus
Nach der Ausführung eines Befehls wird ein Returncode (Endestatus) zurückgeliefert. Mit Hilfe des Returncodes lässt sich feststellen, ob der letzte Befehl fehlerfrei ausgeführt wurde.
Returncode = 0 Letzter Befehl wurde fehlerfrei ausgeführt. Returncode ≠ 0 Letzter Befehl wurde nicht fehlerfrei ausgeführt.
Das Kommando true liefert den Returncode 0, false liefert den Returncode 1 . Bei einigen Befehlen wird die zurückgelieferte Fehlermeldung (Returncode ≠ 0) noch weiter differenziert (z.B. man fsck). In der Systemvariablen $? ist der aktuelle Returncode abgelegt und kann vom Benutzer abgefragt werden. Bsp.:
- fsck asasas
- echo $?
16
oder
- ping www.xinux.de -w 1 -c 1 > /dev/null 2>&1
- ping 172.20.103.2 -w 1 -c 1 > /dev/null 2>&1
- echo $?
0
Erkenntnis: Rechner ist erreichbar
- ping 172.20.103.99 -w 1 -c 1 > /dev/null 2>&1
- echo $?
1
Erkenntnis: Rechner ist nicht erreichbar
- touch bohnen
- rm bohnen 2> /dev/null
- echo $?
0
Erkenntnis: Löschen war erfolgreich
- rm bohnen 2> /dev/null
- echo $?
1
Erkenntnis: Löschen war nicht erfolgreich
Aufgaben
del
- rm löscht Dateien, ohne sie dabei in einen Papierkorb zu verschieben
- Lösung: Schreiben Sie ein Skript, das
- einen Papierkorb erstellt, wenn er nicht bereits existiert
- beliebig viele angegebene Dateien dorthin verschiebt (so wie bei rm)
- Auskunft über die Verschiebungen gibt
- cd /usr/local/bin
- vim del
#!/bin/bash
papierkorb="$HOME/.trash"
ls $papierkorb > /dev/null 2>&1 || mkdir -p $papierkorb
mv $* $papierkorb
for i in $*
do
echo $i in den Papierkorb verschoben.
done
- chmod +x del
- touch test{1,2,3}.dat
- del test?.dat
test1.dat in den Papierkorb verschoben. test2.dat in den Papierkorb verschoben. test3.dat in den Papierkorb verschoben.
- ls ~/.trash
test1.dat test2.dat test3.dat