Linux-Workshop

Shell Scripting - Tipps und Tricks für Admins

Housekeeping

Mittels "trap" können wir in unserem Skript auf Signale, wie "Abbruch durch Benutzer CTRL-C" reagieren. Für ein "sauberes" Beenden und Löschen von temporär angelegten Dateien bietet die bash die Signalnummer 0, das heißt Skript-Beendigung.

Nehmen wir exemplarisch das nachfolgende Skript, welches eine Liste aller Dateien in /bin in ein temporäres File generiert und aus dieser Liste nur die erste Datei nach "/tmp/<name>.bak" kopiert. Bei normaler oder signalbedingter Beendigung wird sowohl die Liste, als auch die kopierte Datei wieder gelöscht und somit der wünschenswerte Status-Quo vor der Skriptausführung wieder hergestellt. Bei fehlerfreier Ausführung erhalten Sie als Exit-Wert 0. Sollte das Skript durch ein Signal beendet worden sein, so wird der Exit-Wert um 128 inkrementiert.

#!/bin/bash

TMP=$(mktemp)

TMPLIST=""

clean()

{

/bin/rm -f $TMP $TMPLIST && echo "$TMP $TMPLIST removed"

}

trap 'clean; echo exit reached.' 0

### MAIN

echo "TMP file created as $TMP .."

find /bin -type f > $TMP

while read line; do

mybase=$(basename $line).bak

cp $line /tmp/$mybase && { echo "cp $line to /tmp/$mybase"; TMPLIST=/tmp/$mybase; }

break

done < $TMP

echo "our pid is $$"

sleep 10

# exit value from last commands..

Fehlerfreie Ausführung:

> clean.sh; echo $?

clean.sh

TMP file created as /home/thomas/tmp/tmp.fbu0DfjtX7 ..

cp /bin/setfont to /tmp/setfont.bak

our pid is 21883

/home/thomas/tmp/tmp.fbu0DfjtX7 /tmp/setfont.bak removed

exit reached.

0

Senden wir ein "kill <pid>" an das Skript, so zeigt der Exit-Wert 128+15=143 an:

..

exit reached.

Terminated <= Hinweis auf Signal 15 (TERM)

143

So implementierte Shell-Skripts hinterlassen keine unnötigen Dateileichen im Dateisystem.