Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 12 Die C-Shell
Pfeil 12.1 Einleitende Anmerkungen
Pfeil 12.2 Die C-Shell starten
Pfeil 12.3 Kommentare in der C-Shell
Pfeil 12.4 Ausgabe- und Eingabeumlenkung
Pfeil 12.5 Pipes
Pfeil 12.6 Variablen
Pfeil 12.6.1 Arrays
Pfeil 12.6.2 Variablen löschen
Pfeil 12.6.3 Auflisten existierender Variablen
Pfeil 12.6.4 Rechnen mit Variablen
Pfeil 12.7 Funktionen gibt es nicht
Pfeil 12.8 Bedingte Anweisungen und Schleifen
Pfeil 12.8.1 if
Pfeil 12.8.2 Bedingungen formulieren
Pfeil 12.8.3 while-Schleifen
Pfeil 12.8.4 foreach-Schleifen
Pfeil 12.8.5 switch
Pfeil 12.9 Benutzereingaben
Pfeil 12.10 Zusammenfassung
Pfeil 12.11 Aufgaben

Rheinwerk Computing - Zum Seitenanfang

12.8 Bedingte Anweisungen und SchleifenZur nächsten Überschrift


Rheinwerk Computing - Zum Seitenanfang

12.8.1 ifZur nächsten ÜberschriftZur vorigen Überschrift

Selbstverständlich kennt die C-Shell bedingte Anweisungen wie if sowie Schleifen wie while. Bei der Verwendung dieser Anweisungen unterscheidet sich die Syntax erneut von jener der Bourne-Shell. Beginnen wir zunächst bei der normalen bedingten Anweisung if. Deren Syntax sieht folgendermaßen aus:

Listing 12.16 Die if-Anweisung

if (Bedingung(en)) then
Kommandos
else if (Alternative Bedingung(en))
Kommandos
else
Kommandos
endif

Auf den ersten Blick erkennen Sie als aufmerksamer Leser, dass die C-Shell runde, die Bourne-Shell hingegen eckige Klammern verwendet. Als zweites fällt auf, dass die if-Anweisung nicht mit fi, sondern mit endif abgeschlossen wird.

Geben Sie eine mehrzeilige C-Shell-Anweisung direkt ein, ist es etwas verwirrend, zwischenzeitlich den %-Prompt zu sehen, lassen Sie sich dadurch also nicht irritieren.

Listing 12.17 Anwendung der if-Anweisung (direkt eingegeben)

% set a=1
% echo $a
1
% if (${a} == "1") then
% echo "a ist 1"
a ist 1
% endif
% if (${a} == "99") then
? echo "a ist 99"
? else
% % echo "a ist nicht 99!"
a ist nicht 99!
% endif
%

Rheinwerk Computing - Zum Seitenanfang

12.8.2 Bedingungen formulierenZur nächsten ÜberschriftZur vorigen Überschrift

Wenn Sie bereits wissen, wie Bedingungen in Programmiersprachen formuliert werden, können Sie dies auch in der C-Shell – Bedingungen sind dort beispielsweise denen der

Programmiersprache C ähnlich. Ihnen stehen etwa die Operatoren && und ||, die wir im Kapitel zur C-Programmierung noch einmal näher erläutern werden, zur Verfügung.

Listing 12.18 Beispiel-Bedingungen für die if-Anweisung

if ($a == 1 && $b == 2)
...
endif

if ($a == 1 || $a == 2)
...
endif

if ($a > 1)
...
endif

if ($b >= 2)
...
endif

if ($a == 0) then
echo "a ist 0"
else if ($a == 1) then
echo "a ist 1"
else
echo "a ist nicht 0 und nicht 1"
endif

Außerdem können Sie, ähnlich wie in der Bourne-Shell, Prüfungen für verschiedene Attribute von Dateien durchführen, wie die folgende Tabelle zeigt.

Tabelle 12.1 Operatoren zur Prüfung von Datei-Attributen in der C-Shell

Operator Beschreibung

-d

Datei ist ein Verzeichnis.

-e

Datei existiert.

-f

Datei ist eine reguläre Datei

-z

Datei ist leer.

-o

Datei gehört dem Benutzer.

-r

Datei ist lesbar.

-w

Datei ist schreibbar.

-x

Datei ist ausführbar.

Listing 12.19 Einige Beispielanwendungen für Datei-Attribute

if (-d /tmp) then
echo "/tmp ist ein Verzeichnis"
endif

if (-e /gibtsnicht) then
echo "/gibtsnicht existiert"
else
echo "/gibtsnicht existiert nicht"
endif

if (-o $HOME) then
echo "$HOME gehoert dem Benutzer $USER"
endif

Rheinwerk Computing - Zum Seitenanfang

12.8.3 while-SchleifenZur nächsten ÜberschriftZur vorigen Überschrift

Die while-Schleife hat einen ähnlichen Aufbau wie if und führt die entsprechenden Anweisungen so oft aus, wie ihre Bedingung erfüllt ist. Sie kennen sie aus dem Kapitel zur Bourne-Shell-Programmierung.

Listing 12.20 Syntax der while-Schleife in der C-Shell

Listing 12.21 while (Bedingung(en))
Kommandos
end
Beispielanwendung der while-Schleife

% @ i = 0
% while ($i < 10)
? @ i ++
? echo $i
? end
1
2
3
4
5
6
7
8
9
10

Rheinwerk Computing - Zum Seitenanfang

12.8.4 foreach-SchleifenZur nächsten ÜberschriftZur vorigen Überschrift

Neben while kennt die C-Shell noch eine weitere Schleife zur Verarbeitung von Listen. Sie heißt foreach und hat eine ähnliche Funktion und Syntax, wie Sie Ihnen bereits von der for-Schleife der Bourne-Shell bekannt ist.

Listing 12.22 Syntax der foreach-Schleife in der C-Shell

foreach Variable (Liste)
Kommandos
end

Die einzelnen Werte von Liste werden dabei nacheinander (eine pro Schleifendurchlauf) der Variablen Variable zugewiesen. Auch für die foreach-Schleife haben wir selbstverständlich eine Beispielanwendung für Sie. Die folgende foreach-Schleife berechnet die Anzahl der Dateien im Verzeichnis /etc (ohne Dateien der Unterverzeichnisse):

Listing 12.23 Dateien in /etc zählen (Variante 1)

@ i = 0
foreach datei (/etc/*)
@ i ++
end
echo "Es gibt $i Dateien in /etc"

Auch eine Kommandosubstitution ist bei Bedingungen in der C-Shell möglich. So können wir etwa find nutzen, um alle Dateien im Verzeichnis /etc inklusive der Unterverzeichnisse zu zählen.

Listing 12.24 Dateien in /etc zählen (Variante 2)

@ i = 0
foreach datei (`find /etc`)
@ i ++
end
echo "Es gibt $i Dateien in /etc"

[»]Üblicherweise werden Sie als normaler Benutzer (also ohne Superuser-Privilegien) einige Fehlermeldungen erhalten, wenn find versucht, Verzeichnisse zu durchsuchen, auf die nur root Zugriff hat.

Rheinwerk Computing - Zum Seitenanfang

12.8.5 switchZur vorigen Überschrift

Auch die switch-Anweisung, die in der Bourne- Shell case heißt, ist Ihnen bereits bekannt. Man übergibt ihr einen Wert und verschiedene möglicherweise zutreffende Fälle sowie im entsprechenden Fall auszuführende Bedingungen.

Listing 12.25 Syntax der switch-Anweisung in der C-Shell

switch (Wert)
case Fall1:
Kommandos
breaksw
case Fall2:
Kommandos
breaksw
..
default:
Kommandos
breaksw
endsw

Die einzelnen Fälle der switch-Anweisung werden mit breaksw (break switch) abgeschlossen. Fehlt breaksw, so werden die Kommandos des nächsten case-Blocks ebenfalls mit ausgeführt. Sollte kein explizit abgefragter Fall eintreten, so werden die Kommandos im Block default ausgeführt. Beendet wird die switch-Anweisung mit endsw. Ein Beispiel soll die Anwendung der switch-Anweisung in der C-Shell verdeutlichen:

Listing 12.26 Anwendungsbeispiel für die switch-Anweisung

switch ($a)
case 0:
echo "a ist 0"
breaksw
case 1:
echo "a ist 1"
breaksw
default:
echo "a ist nicht 0 oder 1"
breaksw
endsw

Reguläre Ausdrücke und Strings

Auch Strings und reguläre Ausdrücke können für case-Fälle verwendet werden, so können Sie etwa case [cC]harlie schreiben.

Listing 12.27 switch mit regulären Ausdrücken

switch ($katze)
case [mM]auzi:
echo "Mauzi hat das schoenste Fell!"
breaksw
case [cC]harl*:
echo "Charlie frisst zu viel!"
breaksw
endsw


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux Handbuch






 Linux Handbuch


Zum Katalog: Linux Server






 Linux Server


Zum Katalog: Raspberry Pi






 Raspberry Pi


Zum Katalog: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Katalog: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de