Anpassen oder Schreiben einfacher Scripts
Wichtung: 3
Beschreibung: Die Kandidaten sollen in der Lage sein, existierende Scripts anzupassen oder einfache neue BASH-Scripts zu schreiben.
Wichtigste Wissensgebiete:
Standard-Syntax der sh gebrauchen (Schleifen, Tests).
Befehlssubstitution benutzen.
Auswertung der Rückgabewerte (Erfolg, Fehler) oder anderen Informationen eines aufgerufenen Befehls.
Bedingter E-Mail-Versand an den Administrator.
Richtige Wahl des Script-Interpreters durch die Shebang-Zeile (#!).
Verwalten von Speicherort, Besitz- und Ausführungs- und suid-Rechte von Scripten.
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
for
while
test
chmod
Grundlagen der Shellprogrammierung
Eigentlich kann man alle Anweisungen, sie man manuell in der Shell ausführt, als Skript in einer Datei schreiben. Somit kann man Routine-Aufgaben, die bei der täglichen Administration vorkommen, bequem in einer Skript-Datei niedergeschrieben werden. Die Shell arbeitet dann die Anweisungen nach und nach ab. Einfaches Beispiel:
# Auszug bck.sh
cd /home/peter/bilder
cp * /mnt/backup
tar xvzf /mnt/backup -C /home/peter/backup.tar.gz
In dieser Datei wurden einfach mehrere Befehle nacheinander aufgeschrieben. Somit ist ein Shellscript nichts anderes als eine Textdatei, die einzelne Befehlszeilen enthält, die von der Shell nacheinander abgearbeitet werden. Ausnahmen sind die Zeilen, die mit einer Raute (#) beginnen. Die Raute steht für eine Kommentarzeile.
In dem jeweiligen Skript muss noch festgelegt werden, von welcher Shell es ausgeführt werden soll. Dazu geben wir folgende Information an den Anfang des Skripts:
#!/bin/bash
Jetzt ist bekannt, in welcher Shell das Skript abgearbeitet werden soll. Das ist eine optionale, aber wichtige Angabe, beispielsweise wenn man Bash-Spezifische Anweisungen geschrieben hat.
Shell-Script ausführbar machen
Damit man ein Skript wie ein Programm starten kann, so muss man diese ausführbar machen:
chmod +x bck.sh
./bck.sh
Parameter-Übergabe - Kommandozeilenparameter
Es ist möglich, Shellfunktionen Werte zu übergeben, die dann weiterverarbeitet werden. Folgendes Beispiel: man ruft die Funktion nameAusgabe Peter Mustermann auf. nameAusgabe ist die Funktion, Peter der erste und Mustermann der zweite Parameter. Dann könnte die Funktion wiefolgt aussehen:
nameAusgabe ()
{
Mein Name ist $2, $1
}
Die Ausgabe wäre "Mein Name ist Mustermann, Peter". $1 ist der erste Paramater, $2 der zweite. Es gibt folgende Kommandozeilenparameter:
$0 = Name des Scripts
$1 = 1. Parameter
$2 = 2. Parameter
$3 = 3. Parameter
$4 = 4. Parameter
...
$9 = 5. Parameter
$@ = Alle angegebenen Parameter
$* = Alle angegebenen Parameter
$# = Anzahl aller angegebenen Parameter
if-Anweisung
Die "Wenn-Bedingung" wird in der Programmierung sehr oft genutzt. Das Prinzip ist einfach: "Wenn eine Bedingung war ist, so führe den Inhalt der If-Anweisung aus. Ansonsten ignoriere den Inhalt". Die Syntax lautet:
if Bedingung
then
Anweisungen
fi
Die If-Bedingung kann man noch mit "else" erweitern. Man kann sich das so vorstellen: "Wenn die Bedingung wahr ist, dann tue das, ansonsten (else) tue das".
if Bedingung
then
Anweisung A
else
Anweisung B
fi
Case - Mehrfache-Auswahl
Oftmals kommt es vor, dass man Variablen auswerten und dann speziell darauf reagieren muss. Es wäre aber sehr unpraktisch, darauf mit einer langen If-Else-Kette drauf zureagieren. Hier bietet sich case an:
case $m in
Jan*|jan*) m=1 ;;
Feb*|feb*) m=2 ;;
Mar*|mar*) m=3 ;;
Apr*|apr*) m=4 ;;
Mai*|mai*) m=5 ;;
Jun*|jun*) m=6 ;;
Jul*|jul*) m=7 ;;
Aug*|aug*) m=8 ;;
Sep*|sep*) m=9 ;;
Okt*|okt*) m=10 ;;
Nov*|nov*) m=11 ;;
Dez*|dez*) m=12 ;;
esac
Dieses Beispiel prüft den Monat und setzt entsprechend die Variable m.
While-Schleife
Die kopfgesteuerte Schleife überprüft vor jedem Schleifendurchgang die Bedingung, die festlegt, ob die Schleife tatsächlich nochmal durchlaufen werden soll. Die Syntax ist:
while Bedingung
do
Anweisungen
done
Der Inhalt der While-Schleife wird solange durchgeführt, solange die Bedingung wahr, also gleich Null, ist. Beispiel:
while [ $zahl -gt 1 ]; do
fakultaet=$fakultaet*$zahl
zahl=$zahl-1
done
For-Schleife
Eine for-Schleife erhält eine Liste von Werten und führt die Kommandos mit jedem dieser Werte in der Laufvariablen aus.
for var in liste
do
kommandos
done
Beispiel: Die Argumente werden einzeln ausgegeben:
for argument in $*
do
echo $argument
done
Beispiel: Die for-Schleife gibt nur 1 und 3 aus:
for b in 1 2 3 4 5
do
if [ $b -eq 2 ]
then
continue
fi
if [ $b -eq 4 ]
then
break
fi
echo $b
done
test - Bedingungsüberprüfung
Das Programm test wird dazu genutzt, sinnvolle Bedingungen zu überprüfen.
test -f [pfad] = prüft, ob es sich um eine Datei handelt
test -d [pfad] = prüft, ob es sich um ein Verzeichnis handelt
test -e [pfad] = prüft, ob <pfad> existiert
test -r [pfad] = prüft, ob <pfad> existiert und lesbar ist
test -x [pfad] = prüft, ob <pfad> eine ausführbare Datei ist
test -w [pfad] = prüft, ob <pfad> für den Benutzer eine schreibbare Datei ist
test $A -lt $B = prüft, ob $A kleiner $B ist (less then)
test $A -gt $B = prüft, ob $A größer $B ist (greater then)
test $A -le $B = prüft, ob $A kleiner/gleich $B ist (less or equal)
test $A -ge $B = prüft, ob $A größer/gleich $B ist (greater or equal)
test $A -eq $B = prüft, ob $A = $B ist (equal)
shift-Befehl - Verschieben von Parametern
Mit dem Befehl shift kann man den Inhalt der Parameter verschieben. Das bedeutet, dass beispielsweise der Inhalt des Parameters 3 auf den Parameter 2, der Inhalt des Parameters 2 auf den Parameter 1 verschoben wird. Optional kann man angeben, wie oft verschoben werden soll.
// Syntax
shift [n]
// Beispiel:
shift 5
Weitere Quellen
http://www.linux-services.org/shell/
http://www.linuxfibel.de/bashprog.htm