Einführung in die Bash-Programmierung

Fertighaus im Eigenbau

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
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ä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 12/2017: Perfekte Videos

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

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...