Endestatus: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 31: | Zeile 31: | ||
1 | 1 | ||
Erkenntnis: Löschen war nicht erfolgreich | Erkenntnis: Löschen war nicht erfolgreich | ||
| + | |||
| + | = Aufgaben = | ||
| + | |||
| + | == del == | ||
| + | |||
| + | * '''rm''' löscht Dateien, ohne sie dabei in einen Papierkorb zu verschieben | ||
| + | * Lösung: Wir schreiben 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''' | ||
| + | |||
| + | <syntaxhighlight lang=bash> | ||
| + | #!/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 | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | * '''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 | ||
Version vom 31. Mai 2023, 13:55 Uhr
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: Wir schreiben 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