Fertighaus im Eigenbau

Einführung in die Bash-Programmierung

01.02.2005
Skripte sollen meist wiederkehrende oder lästige Arbeiten automatisieren. Die Standard-Shell Bash stellt Ihnen dazu eine ganze Reige von Funktionen bereit. Dieser Artikel erklärt, wie Sie ihre eigenen Shell-Skripte schreiben.

Bash-Skripte taugen nur für einfache Aufgaben, so lautet das landläufige Vorurteil. In der Version 1.x, wie man sie noch auf alten Red-Hat-Systemen findet, eignete sich die Bash tatsächlich nur wenig für komplexe Aufgaben. Wer umfangreichere Arbeiten automatisieren wollte, griff daher zur csh oder tcsh – oder bemühte gleich eine Hochsprache.

Heute installieren alle Distributionen standardmäßig die Version 2.x der Bash, die über sehr viel mehr und komplexere Funktionen verfügt als ihre Vorgänger-Versionen. Weiß der Programmierer die Leistungsfähigkeit der "Bourne Again Shell" richtig einzusetzen, benötigt er kaum noch externe Programme. Das erhöht die Geschwindigkeit: Mit jedem externen Programmaufruf startet eine neue Instanz der Bash, die nur diesen Befehl ausführt und sich anschließend beendet.

Bremsklotz externe Aufrufe

Externe Prozesse werden besonders dann zum Problem, wenn sie nur kurz aufgerufen werden. Folgendes Skript ist als "Fork-Bomb" berüchtigt. Es tut nichts anderes, als sich selbst zwei mal aufzurufen:

#!/bin/bash
$0 &
$0

Für jeden Aufruf eines externen Programms – "$0" steht hierbei für den Namen des gerade laufenden Skripts – muss der Kernel Speicher reservieren, einen Prozess anlegen, Zeitscheiben umverteilen und vieles mehr. Endet ein Programm wieder, geht es an die Aufräumarbeiten – all das verbraucht nicht unerheblich Systemressourcen. Im Fall der Fork-Bombe benutzt ein böswilliger Anwender diesen Umstand, um das ganze System lahmzulegen, in dem er das einfache Skript unendlich oft aufrufen lässt. Im Ergebnis starten zehntausende Instanzen des Skripts, bis der Speicher voll läuft und keine weiteren Prozesse mehr gestartet werden können. Der Rechner friert nach einigen Sekunden komplett ein, es hilft nur noch ein Hardware-Reset.

Das Listing der Fork-Bombe zeigt den grundlegenden Aufbau eines Bash-Skripts. In der ersten Zeile steht hinter den Zeichen "#!" der Name des Interpreters, der dieses Skript versteht – in unserem Fall /bin/bash. Sie sollten hier nicht, wie häufig zu sehen, einfach /bin/sh eintragen, weil dies je nach System nur ein symbolischer Link ist, der auch auf einen anderen Interpreter zeigen kann.

Einfache Befehlslisten

Der Rest des Programms besteht im einfachsten Fall aus einer Reihe von Befehlen, die nacheinander ausgeführt werden – genau so, wie Sie sie an der Kommandozeile eingeben würden. Dabei wartet die Bash stets, bis ein Kommando komplett ausgeführt wurde, das aufgerufene Programm sich also beendet hat – es sei denn, dem Kommando folgt ein kaufmännisches Und (&). In diesem Fall ruft die Bash das Programm nur auf und macht unmittelbar nach dem Aufruf mit dem nächsten Befehl weiter. Auf diese Weise lassen sich Hintergrundprogramme oder Daemons starten, das aufgerufene Programm läuft also parallel zum Mutterprozess.

Im Beispielprogramm wird "$0" zunächst im Hintergrund aufgerufen und dann noch einmal "$0" im Vordergrund – die Bash wartet also, bis das zweite Programm abgeschlossen ist, bevor sich das Skript selbst beendet.

Bei "$0" handelt es sich um eine Variable, genauer gesagt um eine Spezialvariable: Sie enthält den Namen des aktuell laufenden Skripts. Haben Sie das Beispielprogramm etwa mit "./forkbomb" aufgerufen, setzt die Bash an Stelle von "$0" stets "./forkbomb" ein. "$1" stünde für den ersten Parameter, den Sie beim Aufruf des Skripts angegeben haben, "$2" für den zweiten, und so weiter. Nach oben ist keine Grenze gesetzt.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Shell-Skripte mit grafischen Dialogen
    Dass sich Shell-Programmierung und grafische Oberflächen nicht ausschließen, zeigt KDialog: Nie war es leichter, Shell-Skripte um User-Interaktion zu ergänzen.
  • Teil 1: Grundlagen der BASH
    Haben Sie auch schon einmal am Computer gesessen und sich über immer wiederkehrende Arbeit geärgert, die man mit einem kleinen Programm vereinfachen könnte? Im ersten Teil unseres Programming Corners steigen wir in die Welt der Programmierung ein.
  • Portabel programmieren mit Dialog, Gdialog und Kdialog
    Bash-Skripte sind meist nur für die Verwendung auf der Kommandozeile gedacht und schrecken Nicht-Experten mit unübersichtlichen Ausgaben ab. Das muss aber nicht so sein: Die Programme Dialog, Gdialog und Kdialog verstecken die Kommandozeile vollständig vor dem Benutzer.
  • Teil 2: Grundlagen der Bash
    Nachdem wir uns in der letzten Ausgabe die Metazeichen sowie die grundlegende Verwendung von Variablen angesehen haben, stoßen wir heute in das Reich der mehrdimensionalen Variablen vor und beschäftigen uns am Ende noch mit der Verarbeitung von Zeichenketten.
  • Teil 6: Funktionen und Module
    Programmiersprachen sind dazu gedacht, Computer-Befehle in menschlich lesbarer Form aufzuschreiben. Dazu gehört mehr als nur verständliche Befehle – eine übersichtliche Strukturierung und Untergliederung tut Not.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...