Einführung in die Bash-Programmierung

    • Official Post

    Hallo,


    heute möchte ich euch gerne einen kleinen Crash-Kurs zum Thema "Shell-Programmierung" im speziellen zur "Bash" geben. Ihr werdet hier erfahren und lernen, was die Bash überhaupt ist, was man damit alles anstellen kann und vorallem wie man überhaupt ein Shell-Programm erstellt/programmiert.


    Inhaltsverzeichnis

    • Shell-Programmierung - Was bedeutet das?
    • Bash - Was ist das?
    • Warum Bash und nicht "Sh"?
    • Hinweise / Tipps & Tricks zur Shell-Programmierung
    • Beispiel Programmierung


    Gut, dann fangen wir mal von vorne an. ;)

    • Shell-Programmierung - Was bedeutet das?
      Unter Linux/Unix gibt es mehrere verschiedene Shells, wie zum Beispiel die sh, bash, dash, zsh und ksh. Alle Shells unterscheiden sich prinzipiell nur in den vorhandenen Funktionen, dem Speicherplatzverbrauch auf der Festplatte und der Herkunft. So kann die sh beispielsweise weniger als die bash und die zsh wiederum kann mehr als die sh und bash. ;)


      sh, zsh und ksh kann man übrigens wie folgt aussprechen, um nicht immer so abgehakte Wörter sagen zu müssen: shell, zshell, kshell


      Je nach Shell kann man also verschiedene Befehle und Funktionen der Shell nutzen. Wie PHP, Python und VBA zählt auch die Shell-Programmierung zum Oberbegriff "Skript". Die Shell-Programmierung wird hauptsächlich zur Automatisierung oder Vereinfachung von Prozessen benutzt. So kann man Beispielsweise ein kleines Shell-Skript schreiben, dass die Webserver Logs auswertet und entsprechend ausgibt. Ein weiteres Beispiel wäre zum Beispiel die Automatisierung von Backups. :)


      So... Und je nachdem welche Shell man eben für das Skript verwendet, heißt das entsprechend "Bash-Skript" bzw. "Bash-Programmierung" oder z.B. "KSH-Skript" bzw. "KSH-Programmierung". Wem die Namen jedoch nicht gefallen, kann es auch einfach bei dem Namen "Shell-Programmierung" bzw. "Shell-Skript" belassen. ;)


    • Bash - Was ist das?
      Wie eben erklärt, gibt es unter Linux/Unix mehrere verschiedene Shells mit mehr oder weniger Funktionen - die Bash ist so eine Shell. Die Bash ist eine Shell, die auf der sh basiert und einige nützliche Funktionen der ksh und csh implementiert, also benutzt.


    • Warum Bash und nicht "Sh"?
      Die bash deckt meiner Meinung nach die meist genutzten Funktionen, die gebraucht werden, ab und dadurch hat man weniger bzw. keine Probleme mit "unbekannter Befehl". ;)
    • Hinweise / Tipps & Tricks zur Shell-Programmierung
      Vom Prinzip ist die Shell-Programmierung ganz einfach. Man muss hierfür nur folgende Punkte beachten:

      • Shell-Skripte enden normalerweise mit der Extension/Datei-Endung "sh", wie "shell"
        Beispiel: skript.sh
        Aufbau: <DATEINAME>.sh
      • In die aller erste Zeile muss der Shebang rein (siehe auch hier: Shebang (Unix) - Wikipedia, the free encyclopedia)
        Sieht für die "bash" zum Beispiel so aus: #!/bin/bash
        Aufbau: #!<PFAD_ZUR_SHELL>
      • Variablen werden ohne führendes Dollar-Zeichen definiert
        Beispiel: TEXT="Hallo Welt!"
        Aufbau: <VARIABLEN_NAME>=<WERT>

        Hinweis:
        Variablen können während des Skriptes wahllos und einfach vom Datentyp geändert werden, indem man einfach den Inhalt der Variable ändert:
        TEXT="Hallo Welt!" (jetzt ist der Datentyp der Variable ein String)
        TEXT=123 (jetzt ist der Datentyp der Variable ein Integer)


      • Benutzung von Variablen erfolgen wie gewöhnt mit einem führenden Dollar-Zeichen
        Beispiel: $TEXT
        Aufbau: $<VARIABLEN_NAME>


      • Befehle, die auf der Shell funktionieren, funktionieren auch im Shell-Skript
        Beispiel: free -mt (gibt Auskunft über freien und genutzten RAM vom System)
        Aufbau: <Shell_BEFEHL>
      • IF-Abfragen sind ähnlich aufgebaut wie in anderen Sprachen:
        Beispiel: if [[ $(ping example.com -c1) ]]; then echo 'example.com ist erreichbar!'; else echo 'example.com ist NICHT erreichbar!'; fi
        Aufbau: if [[ <ÜBERPRÜFUNG> ]]; then <WENN ERFOLGREICH TUE...> fi
        Erklärung: "if" startet eine IF-Abfrage | "THEN" sagt "wenn erfolgreich, dann mache..." | "ELSE" sagt "wenn nicht erfolgreich, dann mache..." | "FI" beendet die IF-Abfrage


        Das Beispiel überprüft übrigens per PING, also ICMP-Paket, ob der Host "example.com" erreichbar ist und falls ja gibt es "example.com ist erreichbar!" aus - falls nicht "example.com ist NICHT erreichbar!". ^^


      • Sollte was nicht funktionieren gibt es mehrere Debug-Modes, die man in die zweite Zeile des Shell-Skriptes reinschreiben muss. Ich empfehle hier die ausführlichere Version: set -x
      • Damit das Shell-Skript auch funktioniert, muss es nach dem Anlegen/Speichern auch ausführbar sein. Dazu kann man das "execute" Bit (= x) setzen: chmod +x skript.sh
      • Ausführen/Starten des Shell-Skriptes, wenn es ausführbar ist: ./skript.sh


    • Beispiel Programmierung
      Als kleines Beispiel möchte ich hier zum Verständnis noch ein paar kleine Skripte zeigen:


      Beispiel 1)
      Dateiinhalt: cat ./beispiel_skript.sh

      Bash
      #!/bin/bash# Dies ist eine Kommentarzeile# Und noch eine Kommentarzeile, die vom Skript ignoriert wird# PS: Kommentarzeilen mit einem Ausrufezeichen werden als Shebang angesehen und NICHT ignoriert! (also die erste Zeile z.B. ;))# Überprüfe, ob example.com erreichbar istDOMAIN="example.com"if [[ $(ping $DOMAIN -c1) ]]; then    # Domain ist erreichbar :)    echo "$DOMAIN ist erreichbar!";else     # Domain ist nicht erreichbar :(    echo "$DOMAIN ist NICHT erreichbar!";fi


      Ausführbar machen:

      Code
      chmod +x beispiel_skript.sh


      Skript ausführen:

      Code
      ./beispiel_skript.sh


      Quote from Ausgabe

      example.com ist erreichbar!


      Beispiel 2)
      Dateiinhalt: cat ./beispiel_skript.sh

      Bash
      #!/bin/bash# Rechnen wir etwas ;)# Man kann die Variablen schreiben wie man möchte: klein, groß, klein und groß# Werte einer Variable zuweisenWERT_1=5WERT_2=10WERT_3=20#Gebe die Werte nacheinander ausecho $WERT_1echo $WERT_2echo $WERT_3echo# Der Variable "SUMME" die Summe der Werte 1 und 2 zuweisenlet "SUMME = WERT_1 + WERT_2"echo "$WERT_1 + $WERT_2 = $SUMME"echo "Wert 3 = $WERT_3"let "Summe_Neu = $SUMME - $WERT_3"echo "$SUMME - $WERT_3 = $Summe_Neu"


      Skript ausführen:

      Code
      ./beispiel_skript.sh


      Quote from Ausgabe

      5
      10
      20


      5 + 10 = 15
      Wert 3 = 20
      15 - 20 = -5


    Das war's dann auch schon wieder. Ich hoffe, ich konnte euch die Shell-Programmierung etwas näher bringen. Sollte es Fragen geben, könnt ihr diese gerne hier unten als Antwort/Kommentar erstellen. :)


    Hier geht es zum nächsten Teil: [Bash-Programmierung] Umleitungen, grep und Co.