Wir präsentieren Euch hier ausgewählte Skript-Beispiele, gesammelt aus unseren Schulungen und praktischen Projekterfahrungen. Mit Bash-Skripten lässt sich eine breite Palette an Aufgaben bewältigen, die im Alltag eines Netzwerkadministrators anfallen – von der Automatisierung der Berechtigungsvergabe für Samba-Freigaben bis hin zur Überprüfung integrierter Netzwerkressourcen.

Inhalt

  1. Skript mit Parametern aufrufen und auswerten
  2. IP-Adresse, default Gateway und DNS-Server manuell ändern
  3. IF-Beispiel mit Eingabe einer Zahl
  4. IF-Beispiel! Überprüfung ob ein Verzeichnis vorhanden ist
  5. Mehrfachselektion
  6. Einfache While-Wiederholung (Schleife)
  7. Dateien zeilenweise durchlaufen
  8. Zählerschleifen
  9. Lustiges Beispiel mit akustischem Signal
  10. Jedes Zeichen einer Zeichenkette abarbeiten
  11. Arrays in einem Bash-Skript
  12. Funktionen verwenden

1. Skript mit Parametern aufrufen und auswerten

#! /bin/bash
  # Skriptname: parameter.sh
 
  
  # lese 1. Parameter
  PARA1=$1
  # lese 2. Parameter
  PARA2=$2
  
  # Ausgabe der Parameter
  echo $PARA1 $PARA2

Wird ein Skript mit Parameter aufgerufen, so können diese Parameter mit den Variablen $1, $2, $3 usw. weiterverarbeitet werden. Ruft man also das Skript parameter.sh folgendermaßen auf:

parameter.sh wert1 wert2

so erhält man die Ausgabe:

wert1 wert2

2. IP-Adresse, default Gateway und DNS-Server manuell ändern

#! /bin/bash
  
  netzkarte=eth0
  ip=192.168.1.99
  nm=255.255.255.0
  gw=192.168.1.1
  
  # ip adresse einstellen
  ifconfig $netzkarte $ip netmask $nm
  
  # route einstellen
  route del default
  route add default gw $gw
  
  # dns eintragen
  echo "nameserver $gw" > /etc/resolv.conf

Zeile 9: Hier wird das Netzwerkgerät (eth0) manuell auf eine andere IP-Adresse eingestellt.
Zeile 11-12: Das Standardgateway wird gelöscht und anschließend auf den neuen Wert der Variablen $gw gesetzt.
Zeile 16: Schreibt den DNS-Server (in diesem Fall gleich dem Standardgateway) in die Datei /etc/resolv.conf

3. IF-Beispiel mit Eingabe einer Zahl

#! /bin/bash
  
  read -p "Gib eine Zahl ein: " antwort
  
  # prüfe ob antwort 1 ist
  if [ $antwort = 1 ] ; then
  
      echo "Die Antwort ist 1"
  
  else
  
      echo "falsch!!! looser"
  
  fi 

In diesem Beispiel wird die Variable $antwort abgefragt und mit der Testanweisung überprüft.

4. IF-Beispiel! Überprüfung, ob ein Verzeichnis vorhanden ist

#! /bin/bash
  
  CHECKDIR="/mnt/sicherung"
  
  # prüfe ob /mnt/sicherung vorhanden ist
  if [ -d $CHECKDIR ]; then
  
      echo "Ja das Verzeichnis ist da"
  
  else
  
      echo "Verzeinis nicht gefunden lege an..."
      mkdir $CHECKDIR
  fi

Eine weitere Variante ist das Überprüfen von Dateien und Verzeichnissen.
Im vorliegenden Fall wird geprüft, ob das Verzeichnis /mnt/sicherung existiert, im Nein-Fall wird das Verzeichnis angelegt.

5. Mehrfachselektion

#! /bin/bash
  
  read -p "Soll ich weitermachen? (j/n) " antwort
  
  case $antwort in
      j|J)
          echo "Weiter "
          ;;
      n|N)
          echo "ich stoppe "
          ;;
      *)
          echo "falsch Eingabe"
  esac

Mehrfachselektionen können mit case abgehandelt werden. Die Besonderheit ist das doppelte Semikolon welches die break-Anweisung sendet. Hier wird eine Variable $antwort eingelesen und auf die Buchstaben „j, J“ oder „n, N“ hin geprüft.

6. Einfache While-Wiederholung (Schleife)

#! /bin/bash
  
  weiter="j"
  
  while [ $weiter = "j" ] ; do
  
      echo "Die schleife läuft"
      read -p "Nochmal? (j/n) " weiter
  
  done

Im gezeigten Beispiel läuft eine Schleife solange die Variable $weiter den Wert „j“ besitzt.
Pro Schleifendurchlauf wird die Variable $weiter mit dem read Kommando wieder neu eingelesen!

7. Dateien zeilenweise durchlaufen

Die Beispieldatei liste1.txt enthält folgende Werte:

liste1.txt

Apfel
Birne
Banane
alles Obst
ende Gelände

Mit dem nachfolgenden Shellskript wird diese Datei zeilenweise durchlaufen. Jeder Wert steht somit in der Variable $daten und kann entsprechend weiterverarbeitet werden.

#! /bin/bash
  
  for daten in $(cat liste1.txt); do
  
      echo "$daten"
  
  done

8. Zählerschleifen

Zählerschleifen wie man sie von anderen Programmiersprachen kennt, sind bei Bash Scripting natürlich auch möglich

#! /bin/bash
 
for (( i=10; i > 0; i-- )) ; do
 
      echo $i;
 
done

9. Lustiges Beispiel mit akustischem Signal

#! /bin/bash
  
  echo "A C H T U N G ..."
  let volume=10000
  
  for (( i=10; i > 0; i-- )) ; do
  
         let volume=($volume+500)
    echo "Lautstaerke: $volume"
    paplay /usr/share/sounds/freedesktop/stereo/bell.oga --volume $volume
  
    sleep 0.2
  
  done
  
  paplay /usr/share/sounds/freedesktop/stereo/complete.oga
  echo "E N D E !!!"

10. Jedes Zeichen einer Zeichenkette abarbeiten

#! /bin/bash
 
#
# Diese Schleife durchläuft den String
# Zeichenweise. n = Zähler
 
s="abcdefg1234567890";
n=0;
stringCount=${#s};
 
while [ $n -lt ${stringCount} ]; do
 
           echo ${s:n:1}
           n=$(( $n + 1 ))
 
done;

Zeile 8: Ein String wird in der Variable $S angelegt.
Zeile 11: Mit der Anweisung ${#S} wird die Anzahl Zeichen von $S ermittelt.
Die Schleife läuft solange $n kleiner als die Anzahl Zeichen in $S. Zeile 13: Mit der Anweisung ${S:n:1} wird an Stelle n ein Zeichen mit Länge 1 ausgelesen.
Zeile 14: Erhöht den Zähler n pro Schleifendurchlauf um 1.

11. Arrays in einem Bash Skript

Dieses Beispiel zeigt, wie man indexbasierte Arrays abarbeitet.

#! /bin/bash
 
# Array Variable mit Werten füllen
arrayVariable[0]="birne"
arrayVariable[1]="apfel"
arrayVariable[2]="banane"
 
 
# Array durchlaufen
for werte in "${arrayVariable[@]}"; do
 
        echo $werte;
 
done

12. Funktionen verwenden

Das nachfolgende Beispiel zeigt wie ein Skript mit genau 2 Parameter aufgerufen wurde.

#! /bin/sh
 printUsage () {
    echo "Usage file <infile> <outfile>"
    exit 1
}
 
if [ $# -ne 2 ]; then
     printUsage
fi