Aufgabensammlung IT 4131 Shellprogrammierung Teil I Fragen: I.1 Was ist eine Shell? Skript 1.1.2, S. 4 a) aus der Sicht des Betriebssystems b) aus der Sicht des Anwenders I.2 Was ist ein Shell-Skript? Skript 1.1.3, S. 5 Geben Sie 3 wichtige Merkmale an. I.3 Welche Vorteile gegenüber anderen Skriptsprachen ergeben sich für die Shell? I.4 Übernehmen Sie die richtige Antwort aus den zwei Vorgaben: 1. Ein Shell-Skript muss zum Ausführen nicht erst übersetzt werden. X 2. Ein Shell-Skript kann nur gestartet werden, wenn es übersetzt vorliegt. I.5 Ein Shell-Skript liegt in Ihrem Home-Directory (~) und kann nicht gestartet werden. Geben Sie 3 mögliche Ursachen dafür an und schlagen Sie jeweils vor, wie Sie das Problem beheben können. Skript 2.1.1, S. 10 I.6 Wie werden Kommentare innerhalb eines Shell-Skriptes eingebunden? Skizzieren Sie ein Beispiel dazu. Skript 2.1.1, S. 11 I.7 Kann ein Kommentar in einem Shell-Skript wie bei vielen anderen Sprachen innerhalb von Code-Zeilen stehen? I.8 Welche Angaben sollte man immer in den Header (erste x Zeilen) eines Shell-Skriptes schreiben? Machen Sie mindestens 4 Angaben und skizzieren Sie den Header. I.9 Was versteht man unter der magischen ersten Zeile eines Shell-Skripts? Begründen Sie ihre Bedeutung. Skript 2.1.2, S. 12 I.10 Wie wird die magische erste Zeile eines Shell-Skriptes auch bezeichnet. Geben Sie beide Bezeichnungen an. Hier eine kleine Esels -Brücke. Die Turmuhr in London schlägt den Big-Bang. Skript 2.1.2, S. 12 I.11 Was sind Metazeichen? Nennen Sie 4 wichtige Metazeichen. Skript 2.2, S. 14/15 I.12 Was kennzeichnet den Begriff Befehl bei Unix? I.13 Was kennzeichnet den Begriff externes Programm bei Unix? I.14 Was kennzeichnet den Begriff Kommando bei Unix? I.15 Die Begriffe Befehl und Kommando werden fälschlicherweise oft gleichgesetzt. Arbeiten Sie den wesentlichen Unterschied heraus. I.16 Was kennzeichnet den Begriff Shellbefehl bei Unix? I.17 Was kennzeichnet den Begriff Unixtool bei Unix? Seite 1
I.18 Beschreiben Sie die Interpretation einer Befehlszeile oder Anweisung durch die Shell am Beispiel von: ~> cd<leertaste>/etc Skript 2.3.1, S. 15 I.19 Warum sind die Befehlszeilen ~> cd<leertaste>/etc und ~> cd<tabulator>/etc gleichbedeutend? Skript 2.3.1, S. 16 I.20 Was ist unter dem Rückgabewert eines Programms zu verstehen? Skript 2.3.2, S. 17 I.21 Wie kann man sich den Rückgabewert eines Programms anzeigen lassen? I.22 Wie lässt sich der Rückgabewert innerhalb eines Shell-Skripts beeinflussen? I.23 Bei Unix (Linux) lassen sich mehrere Anweisungen in eine Zeile schreiben. Wie lautet die Syntax dazu? Geben Sie ein Beispiel. Skript 2.3.3, S. 18 I.24 Mit Hilfe von logischen Verknüpfungen lassen sich auftretende Fehler abfangen. Das Beispiel ~> cd /tmp; rm -fr * hätte verheerende Folgen, wenn die erste Anweisung cd /tmp einen Exitstatus 1, also FALSE, liefern würde, weil z.b. das Verzeichnis /tmp nicht vorhanden ist. Schreiben Sie das Beispiel unter Verwendung einer logischen Verknüpfung so um, dass ein solcher Fehler ausgeschlossen wird. Skript 2.3.3, S. 19 I.25 Erklären Sie den Unterschied bei der Zusammenfassung von Anweisungen zwischen den beiden Methoden Klammerung in runden und geschweiften Klammern: ( <anweisung1>; <anweisung2>; [ ] ) und { <anweisung1>; <anweisung2>; [ ]; }. Skript 2.3.4, S. 20 I.26 Legen Sie eine einfach Funktion innerhalb der Shell an. Die Funktion c soll den aktuellen Bildschirm (Terminal-Fenster) löschen und den Cursor auf die Home- Position setzen. Skript 2.4, S. 21 ff. Shellprogrammierung Teil II II.1 II.2 II.3 II.4 II.5 Erläutern Sie das prinzipielle Konzept der Umlenkungen bei Unix. Nennen Sie die drei Geräte, ihre Dateideskriptoren, ihre Funktion und die zugehörigen realen Standardgeräte. Skript 3.1, S. 24 und geben Sie ein Beispiel an: kommando > datei Skript 3.2, S. 26 und geben Sie ein Beispiel an: kommando >> datei Skript 3.2, S. 27 Wie kann ein Überschreiben einer bereits vorhandenen Datei verhindert werden? Skript 3.2, S. 26 unten Mitunter besteht der Wunsch, eine Standardausgabe gleich in mehrere Dateien umzuleiten. Die folgende Anweisung leistet das leider nicht: ls sort > index1 > index2 > index3 Machen Sie eine Vorschlag, wie das Problem mit einem in Unix vorhandenen Tool recht einfach gelöst werden kann. Skript 3.4.1, S. 33 Seite 2
II.6 II.7 II.8 II.9 II.10 II.11 II.12 II.13 und geben Sie ein Beispiel an: kommando &> datei Skript 3.2, S. 28 und geben Sie ein Beispiel an: kommando < datei Skript 3.2, S. 29 und geben Sie ein Beispiel an: kommando [dateideskriptor]>&[dateideskriptor] Skript 3.2, S. 28 unten Erläutern Sie das Konzept der Pipelines bei Unix und geben Sie ein Beispiel mit mindestens zwei Pipes an. Skript 3.3, S. 32 Was versteht man unter einer Kommandosubstitution? Unterstützen Sie Ihre Erläuterung durch ein Beispiel. Skript 3.5, S. 35 ff. Wie muss vorgegangen werden, wenn innerhalb einer Kommandosubstitution eine weitere Kommandosubstitution erfolgt? Ändern Sie dazu das hier gegebene Beispiel so, dass es fehlerfrei ist: echo Das Verzeichnis enthält `ls `pwd` wc -l` Dateien. Skript 3.5.2, S. 39 Was ist Dateinamenexpandierung? Erklären Sie kurz, worum es dabei geht und zeigen Sie je eines Beispiels zu den Dateinamenexpandierungen *,? und [ ]. Skript 4.1, S. 43 ff. Was bezeichnet die Tilde-Expandierung? Erklären Sie die vier Varianten (Ausdrücke). Skript 4.6, S. 53/54 Shellprogrammierung Teil III III.1 III.2 III.3 III.4 Zeigen Sie die einfache Art einer Variablendeklaration mit gleichzeitiger Wertzuweisung. Skript 5.2, S. 57 ff. Eine Variable soll die Zeichenkette Die Politik ist enthalten. Was ist an der folgenden Deklaration falsch und wie lautet sie richtig: variable=die Politik ist? Variablen werden an jeder Stelle in einer Zeile ersetzt. So lassen sich auch Programmaufrufe mit Variablen realisieren. Die folgende Anweisung soll durch die Variable ux ersetzt werden: chmod u+x skript1. Skript 5.2, S. 59 Geben Sie die Variablendeklaration für die Variable ux und die neue Anweisung an. Folgendes Beispiel funktioniert nicht wie gewollt. Erklären Sie, woran das liegt und geben Sie die richtige Schreibweise an. x=topf echo Blumen$xerde Ausgabe Blumen (erwartete Ausgabe: Blumentopferde) III.5 Wie lässt sich eine deklarierte Variable entfernen? Skript 5.2, S. 58 Seite 3
III.6 Mit Hilfe von Variablen können auch Tastaturabfragen innerhalb von Shell-Skripten behandelt werden. Dafür steht read zur Verfügung. In der Standardvariable IFS sind die erlaubten Trennungszeichen definiert: [Leertaste] [Tabulator] [Neue Zeile]. Geben Sie die möglichen drei Varianten der Eingabe von vier Variablen mit nur einem read-aufruf an. Skript 5.3, S. 60 ff. III.7 Was sind Positionsvariablen? Skript 5.4, S. 64 ff. III.8 III.8 III.9 Mit Positionsvariablen kann man bis zu neun Parameter eines Programmaufrufs auf sehr einfache Weise übernehmen. Welche beiden Möglichkeiten gibt es, wenn mehr als neun Parameter übernommen werden sollen? Nennen Sie beide Möglichkeiten und zeigen Sie die Funktion anhand je eines kleinen Beispiels. Skript 5.4.2, S. 66 Skript 5.4.3, S. 67 ff Zeigen Sie die automatischen Positionsvariablen und erklären Sie Ihre Funktion. Skript 5.4.4, S. 69 Wie können Positionsvariablen gesetzt werden? 1=neuer_wert funktioniert nur in der Z Shell. Skript 5.4.5, S. 72 III.10 Was lässt sich über den Gültigkeitsbereich einer Variablen sagen? Skript 5.5, S. 74 ff. III.11 Wie können Variablen in die Betriebssystemumgebung gespeichert werden, um auch für einen weiteren Aufruf einer Shell oder Sub-Shell gültig zu sein? Zeigen Sie das anhand eines Beispiels. III.12 Funktionen werden dazu verwendet, häufig in Anspruch genommen, eventuell sogar rekursiv aufgerufen zu werden. Variablen innerhalb von Funktionen müssen deshalb eine auf die Funktion beschränkte Gültigkeit haben. Skript 5.5.4, S. 79 Zeigen Sie anhand eines Beispiels, wie das realisiert werden kann. Wie werden diese Variablen bezüglich ihres Gültigkeitsbereiches genannt? III.13 Shell-Variablen werden häufig typenfrei deklariert. Gibt es die Möglichkeit, einer Variablen einen Typ (z.b. Integer) zuzuweisen? Bitte begründen Sie Ihre Antwort. Skript 5.6.1, S. 81 ff III.14 Erläutern Sie kurz und prägnant, was das Quoting bedeutet. Illustrieren Sie Ihre Darstellung mit passenden Beispielen. Skript 6, S. 90 ff III.15 Für die Ausgabe auf Papier oder auf einem Terminal werden eine Reihe von Steuerzeichen verwendet, wie z.b. Newline und Formfeed, die ganz einfach in den auszugebenden Text eingefügt werden. Wir nennen das auch ANSI-C-Quoting. Schreiben Sie eine echo-zeile, die folgende Ausgabe ermöglicht: Ausgabe Das ist die erste Zeile:<Tabulator> 1. Zeile<Enter><Neue Zeile> Das ist die zweite Zeile: <Tabulator>2. Zeile<Enter><Neue Zeile> Textende! Skript 6.4, S. 94 III.16 Nennen Sie zwei klassische Programme bzw. Unix-Tools (/bin/sh, /bin/ksh), mit denen arithmetische und logische Aufgaben gelöst werden können. Zeigen Sie je eine Beispiel-Anweisung für eine arithmetische und logische Aufgabe. Skript 7, S. 96 ff. III.17 Bei Ablaufsteuerungen sind Bedingungen sehr wichtig. Erläutern Sie die Philosophie, die Unix in dieser Frage eigen ist. Nennen Sie alle Ihnen bekannten Unix-Tools und Shell-Befehle, die für die Abfrage Seite 4
der Bedingung verwendet werden können (5). Skript 8.1, S. 116 ff III.18 Schreiben Sie unter Anwendung des Konstrukts if-then-else ein effizienten Shell- Skript, das eine Datei kopiert und je nach Ergebnis die Erfolgsmeldung Datei erfolgreich kopiert oder die Mißerfolgsmeldung Datei konnte nicht kopiert werden ausgibt. Basis ist die Anweisung: cp datei/wurzel/verz/unterverzeichnis. Skript 8.2.1, S. 129 ff. III.19 Wie wird in Unix eine mehrfache Verzweigung größer zwei Ziele, also case realisiert? Skizzieren Sie eine Verzweigung mit mindestens 3 Zielen. Skript 8.2.2, S. 134 ff. III.20 Nennen Sie die drei Schleifen-Konstrukte bei Unix. Erläutern Sie while [ until, for ] anhand eines kleinen Beispiels. Skript 8.3, S. 136 ff. Seite 5