Shell Programmierung

Unter Linux werden Befehle klassischerweise über eine Shell gestartet. Die Syntax der Shell erlaubt es einfache Befehle so miteinander zu kombinieren, dass sich damit auch komplexe Aufgaben lösen lassen. Tatsächlich bieten die Shells nahezu alle Elemente, die aus anderen Programmiersprachen bekannt sind. Allerdings birgt die Programmierung mit einer Shell etliche Tücken, so dass sorgsam evaluiert werden sollte, ob sie die richtige Sprache für den geplanten Einsatz ist.

Wir gehen in diesem Kurs auf alle wichtigen Funktionen der Shell und deren Syntax ein. Die Teilnehmer lernen sowohl vorhandene, gerne nach Rücksprache auch von den Teilnehmern mitgebrachte Skripte zu verstehen und zu warten als auch eigene, stabile Programme zu erstellen, um so Aufgaben zu automatisieren.

In diesem Kurs werden wir mit der unter Linux am weitest verbreitetsten Shell, der bash, arbeiten. Diese ist auch unter den meisten anderen Unixen (und sogar unter Windows 10) verfügbar, und fast alle Sprachelemente, die wir kennenlernen werden, sind auch in anderen modernen Shells verfügbar. Sollte eine andere Shell für Ihre Arbeit relevant sein, kontaktieren Sie uns bitte sicherheitshalber vor Kursbeginn.

Trainer und Dozenten

Martin Schulte entwickelt seit über 30 Jahren unter Unix, wenn angemessen, selbstverständlich mit Shells.

Er ist Hauptautor des Buchs "bash - Einstieg in die Shell-Programmierung".

Für das Linuxhotel hält er auch die Linux Grundlagen-Schulung.

Voraussetzungen

Sie sollten Linux über die Kommandozeile bedienen können und darin auch etwas Übung haben. Oder anders gesagt: die Inhalte unserer Schulung Linux Grundlagen sollten Ihnen größtenteils vertraut sein.

Die Teilnehmer müssen einen unter Debian Linux verfügbaren Text-Editor, der günstigerweise Syntax-Highlighting für die bash unterstützt, einigermaßen sicher beherrschen.

Inhalt

Am ersten Tag arbeiten wir interaktiv mit der Shell und wiederholen beziehungsweise vertiefen wichtige Begriffe, Konzepte und Sonderzeichen. Mit dem Erlernten lassen sich schon einige Routineaufgaben automatisieren:

  • Kommando, Argumente, Optionen
  • IO-Redirection und einfache Programme aus der Unix-Toolbox
  • Wildcards
  • Brace-Expansion
  • Quoting
  • (e)grep und (erweiterte) reguläre Ausdrücke
  • Variable
  • Exit-Status
  • Command substitution
  • find

Am Dienstag steigen wir in die (klassische) Programmierung ein:

  • Eigene Scripte erstellen
  • if
  • test, [
  • klassische Arithmetik (expr und bc)
  • while
  • for
  • case
  • getopts
  • Startvorgang der Shell konfigurieren

Am Vormittag des dritten Tages vertiefen das bisher Gelernte mit praktischen Beispielen. Am Nachmittag gehen wir dann zu modernen Konstrukten über.

  • Gruppierung von Kommandos
  • Funktionen
  • Manipulation von Variableninhalten
  • Tests mit [[ ]]
  • Arithmetik mit (( )) und $(( ))
  • Process substitution

Am Donnerstagvormittag lernen wir Arrays kennen, am Nachmittag sehen wir uns realistische Scripten an – gerne solche, die die Teilnehmer mitbringen.

  • Arrays
  • assoziative Arrays
  • awk

Am letzten Tag vertiefen wir das bisher Gelernte, befassen uns mit Anwendungsfällen und Grenzen der Shell-Programmierung, der Wichtigkeit eines Coding-Style sowie ein paar kleineren Themen.

  • Shell-Programmierung: Einordnung, Anwendungsfälle und Grenzen
  • Coding style
  • Here-Dokumente (<<) und Here-String (<<<)
  • Hintergrund-Prozesse und Signal-Handling
  • lokale Variable, scope
  • nameref-Variable
  • sed
  • Debugging mit xtrace
  • xargs

Kurszeiten

Wer möchte, reist bis 22 Uhr am Vortag an und nutzt den Abend bereits zum Fachsimpeln am Kamin oder im Park.

An den Kurstagen dann von 9-18 Uhr (mit 2 Kaffee- und 1 Mittagspause) etwa 60% Schulungen und 40% Übungen. Selbstverständlich arbeitet jeder Teilnehmer am von uns gestellten Notebook oft parallel zum Referenten mit.

Anschließend Abendessen und Angebote für Fachsimpeln, Ausflüge uvm. Wir schaffen eine Atmosphäre, in der Fachleute sich ungezwungen austauschen. Wer das nicht will, wird zu nichts gezwungen und findet auch jederzeit Ruhe.