Endestatus: Unterschied zwischen den Versionen

Aus Xinux Wiki
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