PS-Trainer
Shell-Programmierung @ PS-Trainer
Wie kann man auf Betriebssystem-Ebene programmieren ?
Homepage von PS-Trainer - Betriebssysteme & Netzwerke - an PS-Trainer
PS-Trainer

Shell-Programme erlauben die Steuerung eines Betriebssystems und seiner Funktionen, zusätzlich meist auch von Programmen.

Dieser Artikel bietet eine Übersicht über das Thema, zeigt ein einfaches Beispiel und bietet Links für genauere Angaben.

Inhalt: Geschichte und Überblick
Steuerung von Programmen
WinDOS kurz oder ausführlich
Linux kurz oder ausführlich
Einfaches Beispiel

Wie sind Shell-Programme entstanden ?

Computer-Urzeit
: In der Zeit der ersten primitiven Betriebssysteme war es selbstverständlich, das System und seine Funktionen manuell zu steuern, und zwar hauptsächlich durch Eingabe von Text-Befehlen über die "Konsole"

Die ersten Programme konnten nicht wie heute gewohnt mit Menschen "kommunizieren" - man startete sie durch manuelle Eingabe von Befehls-Texten, sie liefen dann ab (oder auch nicht) und lieferten das Ergebnis als Datei (z.B. Liste, Lochkarten, Lochstreifen...)
Es war mühsam, eine ganze Reihe von Aufgaben einzeln zu starten.
Daher wurden verschiedene "batch"-Techniken entwickelt, die es erlaubten, die Bearbeitung einer Kette von Programmen zu "programmieren".

Automatisierung: Die erfolgreichste shell-Technik beruht darauf, Text-Befehle an das Betriebssystem nicht einzeln einzugeben, sondern von einer Text-Datei zu lesen. Eine derartige batch-Datei ("Stapelverarbeitung") enthielt zunächst nur eine Liste genau derselben Befehle, wie man sie manuell eingeben würde. An Stelle der vielen einzelnen Befehle erteilte man nur mehr einen Befehl, nämlich die betreffende batch-Datei zu verarbeiten.


Später wurde die batch-Technik zu einer Art richtiger Programmierung erweitert: Möglichkeiten zur Abfrage von Bedingungen, Verzweigung, Schleifen, Fehlerbehandlung, Variable, usw. wurden eingeführt. In dieser Form wird die Programmierung von Systemfunktionen noch heute angewendet, vorwiegend von AdministratorInnen, ProgrammiererInnen, und beim Betrieb von Servern. Mehrere Namen dafür sind in Gebrauch, hier wird "Shell-Programmierung" verwendet.

Fast alle gängigen Betriebssysteme bieten an, sie über die jeweilige "Konsole" mit Text-Befehlen zu steuern. Moderne Systeme stützen sich wieder in verstärktem Ausmass auf diese Technik, denn sie bietet viele Vorteile:
+ Kompatibilität: Texte werden von allen Betriebssystemen verstanden und nicht an Hersteller gebunden.
+ Flexibilität: Über Texte lassen sich alle Daten problemlos mitteilen, auch zukünftige Anforderungen lassen sich absehbar bewältigen.
+ Freier Zugang: Die Verwendung von Texten ist absolut offen, d.h. von allen AnwenderInnen mit zahlreichen einfachen Programmen (Editoren) ausführbar.

Programme:

Bei der Entwicklung von Programmen war es früher selbstverständlich, die Steuerung durch shell-Programme vorzusehen. Man startet derartige Programme auf der "Konsole" des Betriebssystems durch Angabe des Programm-Namens, gefolgt von "Parametern", die angeben, was das aufgerufene Programm zu tun hat. Das ist aktueller Stand der Technik bei allen selbständig ablaufenden "Diensten" (services, daemons). - Das sind Programme ohne user-interface (kein Fenster, etc.), die ihre Arbeit im Hintergrund erledigen. Darunter fallen z.B. fast alle Server-Programme.

Fenster und Maus-Programme: Heutige Anwendungs-Programme lassen sich nur mehr teilweise shell-steuern, denn sie können ohne user-Interaktion kaum mehr laufen.
In manchen Fällen ist es trotzdem möglich, dann kann man diese Programme als "programmierbares Werkzeug" einsetzen. Ein gutes Programm zur Bildverarbeitung lässt sich z.B. so programmieren, dass bestimmte grafische Operationen (Kontrast einstellen, Format ändern,...) auf eine ganze Reihe von Bild-Dateien (z.B. innerhalb eines Ordners) angewendet wird - das erfolgt sinnvollerweise vor-programmiert, ohne AnwenderInnen-Aufsicht.


Programm-Kommunikation: Unter dieses Thema fallen auch alle Versuche, eine Kommunikation verschiedener Programme mit den Mitteln des Betriebssystems zu ermöglichen. Man geht hier zwei unterschiedliche Wege:

(1) Das Betriebssystem bietet standardisierte Möglichkeiten, Objekte und Informationen darüber auszutauschen, bzw. Nachrichten an andere Programme zu senden. Diese Methoden sind elegant, jedoch vom jeweiligen Betriebssystem (Hersteller) abhängig, der Veränderung (Versionen) unterworfen, und meist nur von Profis bzw. mit speziellen Programmen anwendbar. Windows und MacOS bieten z.B. diese Möglichkeit.

(2) Man benutzt einfache Text-Dateien zur Verständigung.
Linux stützt sich vorwiegend auf diese Technik. Das System selbst und fast alle seine Programme werden durch Text-Dateien gesteuert. BenutzerInnen haben mit jedem beliebigen Text-Programm (Editor) einfachen Zugang zu diesen Daten.
Mittlerweile gibt es zahlreiche moderne Programme (Fenster, Maus...), die beim Erstellen, Lesen und Ändern dieser Text-Dateien behilflich sind.
Auch Windows nutzt diese Technik teilweise.

Windows:

Die Oberfläche des Vorgängers DOS bestand ausschliesslich aus einer einzigen "Konsole", und war dementsprechend mit Text-Befehlen bedienbar.
Zur batch-Programmierung verwendete man *.bat-Dateien.

Neuere Win-Versionen bieten das Konsolen-Fenster ebenfalls an. Die Konsole läuft auf einem "virtuellen DOS-PC", mehrere Instanzen (unabhängige Fenster) können gestartet werden. Diese Emulation (PC-Simulation) bietet Zugriff auf alle Dateien und viele Resourcen des Win-Systems.
Der neue commandline-processor (Programm zur Verarbeitung von manueller Konsolen-Eingabe und batch-Programmen) verwendet sowohl *.bat als auch *.cmd-Dateien
Linux:

Stützt sich grundlegend auf die Verarbeitung von Text-Befehlen. Mehrere AnwenderInnen (echtes MultiUser System) können eine beliebige Anzahl unabhängiger Konsolen ("shell"s) betreiben.

Die hochentwickelte und ausgefeilte shell-Technik ist nach Linux-Art frei zugänglich (OpenSource), man kann unter mehreren Programmen (shells) wählen.
Sowohl das Betriebssystem selbst als auch alle Dienste (daemons) und die meisten Programme lassen sich mit shell-Methoden steuern und benutzen diese auch selbst zur gegenseitigen Steuerung.
Linux erkennt shell-script-Dateien an den führenden Zeichen #! Meist fügt man noch einen Hinweis auf das shell-Programm an (s.u.).

Beispiel:
Hier wird gezeigt, wie man eine kurze Befehlskette manuell an der Konsole eingibt (gelb) oder als shell-script-datei (blau) ausführt.
Der einfache Auftrag: Datensicherung aller Dateien von einem Verzeichnis (Ordner, directory):
  + Erzeuge eine Liste aller Dateien und lege sie in einer Text-Datei ab.
  + Kopiere alle Dateien an einen Sicherungs-Platz
Hier wird angenommen, dass die beiden Verzeichnisse "Quelle" und "Ziel" bereits existieren, und dass sich in "Quelle" einige Dateien befinden. Diese Voraussetzungen müssen sie herstellen, wenn sie die Beispiele real testen wollen.
Windows-Beispiel:
Manuelle Eingabe der einzelnen Befehle:
C:\> dir C:\Quelle\*.* >F:\Ziel\liste.txt
C:\> copy C:\Quelle\*.* F:\Ziel\*.*
Inhalt der batch-Datei C:\testjob.bat:
dir C:\Quelle\*.* >F:\Ziel\liste.txt
copy C:\Quelle\*.* F:\Ziel\*.*
Manuelle Eingabe des batch-Befehls:
C:\> testjob oder C:\> C:\testjob.bat
Der Inhalt der Dateiliste wird so angezeigt:
C:\> type F:\Ziel\liste.txt

Linux-Beispiel:
Manuelle Eingabe der einzelnen Befehle:
ich@tux:> ls /home/ich/quelle/ > /home/ich/ziel/liste.txt
ich@tux:> cp /home/ich/quelle/* /home/ich/ziel/*
Inhalt der batch-Datei /home/ich/testjob:
#!/bin/sh
ls /home/ich/quelle/ > /home/ich/ziel/liste.txt
cp /home/ich/quelle/* /home/ich/ziel/*
Manuelle Eingabe des batch-Befehls:
ich@tux:> sh testjob oder ich@tux:> sh /home/ich/testjob
Der Inhalt der Dateiliste wird so angezeigt:
ich@tux:> cat /home/topadmin/ziel/dateiliste.txt
Prompt: In blauer Schrift der "Prompt" des Systems. So gibt ihnen das System bekannt, dass die Konsole auf Eingabe "wartet". DOS zeigt normalerweise Volume (z.B. Festplatte, hier C) und aktuelles Verzeichnis an. Linux zeigt den PC (hier: tux), @ und den eigenen Namen (hier: ich), ihren persönliches Arbeits-Verzeichnis, bezeichnet durch home und ihren Namen. Beide Prompts sind einstellbar.
Befehle und Parameter: Als Syntax ("Grammatik") für Konsolen-Befehle hat sich folgende Regel durchgesetzt:
Zuerst der Name des Befehls (bzw.Programms), dann die Liste der Parameter, getrennt durch Leerzeichen. Der Zeilen-Abschluss am Ende leitet den Befehl an das Betriebssystem weiter, genauer an ein Programm, das meist "command line interpreter" o.ä. genannt wird.
Parameter sind genauere Angaben zu einem Befehl. Anzahl und Möglichkeiten sind unterschiedlich.
Dateiliste anlegen: Die Liste erhält man in DOS mit dir, in Linux mit ls. Die Ausgabe wird in beiden Fällen nicht angezeigt, sondern mit > an die angegebene Datei liste.txt weitergeleitet. Linux benötigt keine Datei-Erweiterung (txt). - Es ist jedoch praktisch, da sich dann die Text-Datei sowohl in Linux als auch in DOS, Win und MacOS verwenden lässt.
Batch-Befehl: Kann in beiden Fällen nur dann "direkt" (mit dem Dateinamen) eingegeben werden, wenn sich die batch-Datei im Suchpfad (path) des Systems befindet. Im Zweifel den vollen Dateinamen der batch-Datei angeben: in DOS volume\Pfad\Dateiname. In Linux gibt man das auszuführende Programm an (sh für shell), dazu den Dateinamen, im Zweifel inklusive Pfad.
Textdatei (Dateiliste) auf der Konsole ausgeben: In DOS mit type, in Linux mit cat. Verwechseln sie das nicht mit demjenigen Befehl, der zur Erzeugung der Dateiliste verwendet wurde - naturgemäss sieht die Ausgabe auf der Konsole genau (!) gleich aus. Der Unterschied wird klar, wenn sie die im Ordner "Quelle" enthaltenen Dateien entfernen: Die Befehle dir bzw. ls zeigen dann das leere Verzeichnis, die Dateiliste bleibt unverändert. Wie jede andere Text-Datei können sie die Dateiliste mit jedem Text-Editor-Programm öffnen und nach Belieben ändern.
Anmerkung: Falls ihr Bildschirmfenster nicht breit genug ist, werden die Zeilen der Beispiele "umgebrochen", d.h. auf mehrere Zeilen verteilt. Sie dürfen diese Zeilen jedoch bei der Eingabe an eine Konsole nicht unterbrechen - Das System versteht sonst jede Zeile als eigenen Befehl !

 

Homepage von PS-Trainer - Betriebssysteme & Netzwerke - an PS-Trainer

Aktuelle Daten dieser Seite Letzte Änderung:
  Geocities