Einführung in die Bash-Programmierung

veröffentlicht am 21. März 2011

Da ich immer mal wieder ein Bashscript schreibe, habe ich mir gedacht, dass ich heute mal eine kleine Einführung in die Bash-Programmierung gebe. Die Grundbefehle eines Linux-Systems sind nach dem Motto „Schreibe ein Programm, das nur eine Aufgabe macht – diese aber perfekt“ konstruiert, sodass sich aus den vielen einzelnen Befehlen auch mächtige Programme „zusammenbauen“ lassen. Nicht umsonst werden die Grundbefehle in vielen Büchern als „Baukasten“ bezeichnet.

Variablen

Die Benutzung von Variablen ist unter Linux sehr einfach. Verwende einfach folgende Syntax, um Variablen zu deklarieren:

Variable=Wert

Die Variable kann danach über

$Variable

im Script angesprochen werden.

Parameter

Häufig ist es sinnvoll, Parameter an ein Bashscript übergeben zu können. Diese werden fortlaufend duchnummeriert:

$1 (Erster Parameter)
$2 (Zweiter Parameter)

In diesem Zusammenhang ist auch nicht ganz uninteressant zu wissen, dass es die Variable $# gibt, mit der man die Anzahl der übergebenen Parameter auslesen kann.

$# (Anzahl der Parameter)

Bedingungen

Diese folgenden Bedingungen benötigst du für die darauf folgenden Abfragen.

Ausdruck Erklärung Beispiel
-d <Verzeichnis> wahr, wenn das Verzeichnis existiert -d /backup
-f <Datei> wahr, wenn die Datei existiert -f /var/log/mail.info
-n <Zeichenkette> wahr, wenn die Zeichenkette nicht leer ist -n „$variable“
„<Zeichenkette1>“ = „<Zeichenkette2>“ wahr, wenn Zeichenketten übereinstimmen „$variable“ = „Beispiel“
„<Zeichenkette2>“ != „<Zeichenkette2>“ wahr, wenn beide Zeichenketten unterschiedlich sind „$variable“ != „Beispiel“
<Zahl1> -eq <Zahl2> wahr, wenn beide Zahlen gleich (equal) sind $zahl -eq 5
<Zahl1> -ne <Zahl2> wahr, wenn beide Zahlen ungleich (not equal) sind $zahl -ne 6
<Zahl1> -lt <Zahl2> wahr, wenn die erste Zahl kleiner (lower than) als die Zweite ist $zahl -lt 7
<Zahl1> -gt <Zahl2> wahr, wenn die erste Zahl größer (greater than) als die Zweite ist $zahl -gt 8
! Bedingung Negierung der Bedingung ! -f datei.txt

Neben diesen Bedingungen gibt es noch eine Vielzahl weiterer Bedingungen. Eine schöne Liste findet man bei der TU Chemnitz.

if-Abfrage

if [ Ausdruck ]
then
   # Anweisungen
fi

Beispiel:

if [ "$stadt" = "Kiel" ]
then
   echo "Schleswig-Holstein"
fi

if-else-Abfrage

if [ Ausdruck ]
then
   # Anweisungen
else
   # Anweisungen
fi

Beispiel:

if [ "$stadt" = "Kiel" ]
then
   echo "Schleswig-Holstein"
else
   echo "Woanders"
fi

case-Abfrage (switch)

case "Variable" in
   "Wert 1")
      # Anweisungen
      ;;
   "Wert 2")
      # Anweisungen
      ;;
   *)
      # Anweisungen
      ;;
esac

Beispiel:

case "$promi" in
   "Atze Schröder")
      echo "Komiker"
      ;;
   "Tux")
      echo "Das Linux Maskottchen"
      ;;
   *)
      echo "Irgend ein anderer Promi"
      ;;
esac

while-Schleife

while [ Bedingung ]
do
   # Anweisungen
done

Beispiel:

zaehler=0
while [ $zaehler -lt 10 ]
do
   echo "Durchlauf $zaehler"
   zaehler=$(($zaehler+1))
done

for-Schleife

for <Variable> in <mehrere Zeichenketen>
do
   # Anweisungen
done

Beispiel:

for buchstabe in alpha beta gamma delta
do
   echo $buchstabe
done

Abschlussbemerkung

Durch Kombination der hier vorgestellten Abfragen und Schleifen zusammen mit den zur Verfügung stehenden Anwendungen können sehr mächtige Programme mit den Bordmitteln der Bash geschrieben werden.

Quellen und weiterführende Links

Kommentare

Hallo Patrick. Vielen Dank für die Übersicht. Zur Inkrementierung der Variable „zaehler“ habe ich eine Frage.

Welche Shell setzt Du denn ein. Bei mir funktioniert der Ausdruck zaehler++ nämlich nicht. Ich muss das auf zaehler=$(($zaehler+1)) ändern damit das Beispiel auch das macht, was es soll.

Kommentar #1 von Hampa am 23. März 2011


Auweia, da war ich wohl neben der Spur, du hast Recht :D
Wird gleich geändert. Wie der Artikel-Name schon sagt, setze ich die Bash ein ;)

Kommentar #2 von Patrick am 23. März 2011


Jetzt wo Du’s erwähnst. ;-)

Kommentar #3 von Hampa am 23. März 2011


Hinterlasse einen Kommentar