Bash Scripting Grundlagen

Skriptbeispiele.
Hier findet Ihr einige Skriptbeispiele aus unseren Trainings und Projekterfahrungen.
Mit Bash-Skripten kann man fast alles realisieren, was ein Netzwerkadministrator für den Hausgebrauch benötigt, sei es das automatische Setzen von Berechtigungen für Samba-Freigaben oder das Prüfen einer eingebundene Netzwerkressource.

 

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="abcdefg123456789"; 
n=0;

while [ $n -lt ${#S} ]; 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


 

 

Über uns

Wir sind ein agiles Team von Programmierern und haben uns auf Erweiterungen (extensions) für eine Vielzahl von Systemen spezialisiert. Unsere besondere Stärke ist das entwickeln von Erweiterungen für Shop-Systeme basierend auf dem Magento Framework oder die Entwicklung an Web-Anwendungen mit dem Symfony Framework. Eine weitere Stärke ist die Erweiterung von Content Management Systemen wie beispielsweise Wordpress, Typo3, Drupal und Joomla. Das entwickeln von Apps für Android, Windows und Apple OS Systemen ist selbstverständlich!