Home / LinuxUser / 2001 / 07 / Teil 6: Funktionen und Module

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Baukastensystem

Teil 6: Funktionen und Module

Modularisierung

Mit Funktionen kann man ein Programm nicht nur kürzer und besser lesbar machen, bei ähnlichen Anwendungen kann man die Funktionen auch leicht in einem anderen Programm wiederverwenden. Wenn Sie eine Reihe von Funktionen geschrieben haben, sollten Sie sie in einzelnen Modulen zusammenfassen. Ein Modul enthält eine oder mehrere Funktionen aus verwandten Aufgabenbereichen wie zum Beispiel Dateioperationen, Bildschrim-Ein-/Ausgabe oder Stringverarbeitung. Bei der Bash ist jedes Modul in einer eigenen Datei untergebracht. Im Unterschied zu Programmen sind die Module nicht ausführbar und enthalten auch nicht den bei Bash-Programmen üblichen "Kommentar" #!/bin/bash in der ersten Zeile. Die einzelnen Module werden mit dem Source-Befehl in das Programm eingebunden:

#!/bin/bash
 source dateioperationen
 source einausgabe
 . stringverarbeitung

Der Source-Befehl kann mit einem Punkt (vierte Zeile) abgekürzt werden, diese Schreibweise findet man in der Praxis sehr oft. Trifft die Bash auf eine Source-Anweisung, wird im Speicher die gesamte Datei anstelle des Source-Befehls eingefügt und komplett abgearbeitet. Auf diese Weise ist es möglich, den Source-Befehl auch in Modulen einzusetzen, ihn also zu verschachteln.

Ein weiteres Anwendungsgebiet für source ist das Einlesen von Konfigurationsdateien. Bei SuSE-Distributionen ist die Datei /etc/rc.config eine der zentralen System-Konfigurationsdateien. Sie enthält lediglich Kommentare und Variablen-Zuweisung in Bash-Schreibweise und wird einfach mittels Source-Befehl von den jeweiligen Skript-Dateien eingelesen. In Kasten 1 finden Sie ein Beispiel zum Einlesen einer Konfigurationsdatei.

Kasten 1: Einlesen einer Konfigurationsdatei

Datei: <I>.config<I>

# Zu verwendende Sprache
 LANG="de_DE"

Datei: <I>dateioperationen<I>

KonfigurationPruefen ()
 {
   # Name der Datei erforderlich (1. Parameter)
   if [ ! $# -eq 1 ]; then
     return 1
   # Datei muss lesbar sein
   elif [ ! -r $1 ]; then
     return 2
   fi
   return 0
 }

Datei: <I>konfiguration<I>

#!/bin/bash
 . dateioperationen
 KonfigurationPruefen .config && source .config
 echo $LANG

Im Hauptprogramm konfiguration finden Sie beide Verwendungsformen des Source-Befehls. In der zweiten Zeile wird zunächst das Modul dateioperationen geladen, in dem sich die Funktion KonfigurationPruefen befindet. Die dritte Zeile enthält eine Verkettung zweier Befehle: KonfigurationPruefen liefert wahr, also null, wenn die Datei .config lesbar ist. Nur dann wird sie mittels source eingebunden.

Es ist generell zu empfehlen, die Existenz jedes Moduls vor dem Einbinden zu überprüfen. Fehlt ein Modul, im folgenden Beispiel dateioperationen, gibt die Bash eine entsprechende Fehlermeldung aus, versucht das Skript aber dennoch laufen zu lassen. Im schlimmsten Fall führt das zu Folgefehlern durch fehlende Funktionen:

./konfiguration: dateioperationen: No such file or directory
 ./konfiguration: KonfigurationPruefen: command not found

Finale

Funktionen und Module sind der Schlüssel zu strukturierten, lesbaren und wiederverwendbaren Programmen. Als Nebeneffekt lässt sich damit auch eine gute Arbeitsteilung realisieren: Während sich ein Programmierer um die Dateiverwaltung kümmert, entwirft ein anderer die Benutzeroberfläche – nur auf diese Weise konnten Linux und die GNU-Programme von einer großen Gemeinde entwickelt werden. In einer endlos langen Ansammlung von Befehlen wäre längst der Überblick verloren gegangen.

Damit endet Teil sechs. Im siebten und letzten Teil des Programming Corners werden wir zum großen Finale einläuten und anhand eines Beispiel-Programms noch einmal alle Themen der vergangenen Teile ansprechen und veranschaulichen.

Glossar

globale Variablen

sind im gesamten Programm gültige Variablen, die von jeder beliebigen Stelle aus verändert werden können. Jede neue Variable ist grundsätzlich eine globale Variable, wenn sie nicht explizit zur lokalen erklärt wird.

Lokale Variablen

Lokale Variablen sind im Gegensatz zu den globalen nur in einem bestimmten Bereich oder Block gültig. Eine in einer Funktion angelegten lokale Variable kann nur innerhalb der Funktion verwendet werden, außerhalb ist sie unbekannt.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zum Autor

Mirko Dölle

Redakteur für Linux bei c't, Heise Zeitschriften Verlag; ehemals Competence Center Hardware/Linux-Magazin, Linux New Media AG


Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...