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

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

Download:
- ZIP, ca. 15,7 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Pl&ouml;tner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
geb., mit 2 DVDs
1302 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1704-0
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 Ausgabeumlenkung 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 Die if-Anweisung
    Pfeil 12.8.2 Bedingungen formulieren
    Pfeil 12.8.3 Die while-Schleife
    Pfeil 12.8.4 Die foreach-Schleife
    Pfeil 12.8.5 Die switch-Anweisung
  Pfeil 12.9 Benutzereingaben
  Pfeil 12.10 Zusammenfassung
  Pfeil 12.11 Aufgaben


Galileo Computing - Zum Seitenanfang

12.8 Bedingte Anweisungen und Schleifen  Zur nächsten ÜberschriftZur vorigen Überschrift


Galileo Computing - Zum Seitenanfang

12.8.1 Die if-Anweisung  Zur 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 der C-Shell erneut von der Syntax der Bourne-Shell. Beginnen wir zunächst bei der normalen bedingten Anweisung if. Die Syntax von if sieht folgendermaßen aus:

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

Listing 12.16  Die if-Anweisung

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

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

% 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
%

Listing 12.17  Anwendung der if-Anweisung (direkt eingegeben)


Galileo Computing - Zum Seitenanfang

12.8.2 Bedingungen formulieren  Zur nächsten ÜberschriftZur vorigen Überschrift

Wenn Sie bereits wissen, wie Bedingungen in Programmiersprachen formuliert werden, können Sie auch Bedingungen in der C-Shell formulieren – sie sind beispielsweise 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.

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

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

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

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.


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

Listing 12.19  Einige Beispielanwendungen für Datei-Attribute


Galileo Computing - Zum Seitenanfang

12.8.3 Die while-Schleife  Zur nächsten ÜberschriftZur vorigen Überschrift

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

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

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


Galileo Computing - Zum Seitenanfang

12.8.4 Die foreach-Schleife  Zur nächsten ÜberschriftZur vorigen Überschrift

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

foreach Variable (Liste)
Kommandos
end

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

Die einzelnen Werte der Liste 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 for- each-Schleife berechnet die Anzahl der Einträge in der Datei /etc/passwd (ohne Dateien der Unterverzeichnisse):

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

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

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

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

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


Ü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.



Galileo Computing - Zum Seitenanfang

12.8.5 Die switch-Anweisung  topZur vorigen Überschrift

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

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

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

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:

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

Listing 12.25  Anwendungsbeispiel für die switch-Anweisung

Reguläre Ausdrücke und Strings

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

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

Listing 12.26  switch mit regulären Ausdrücken



Ihr Kommentar

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






 <<   zurück
  Zum Katalog
Zum Katalog: Linux, Ausgabe 2011






Linux, Ausgabe 2011
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Linux Hochverfügbarkeit






 Linux Hoch-
 verfügbarkeit


Zum Katalog: LPIC-1






 LPIC-1


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: openSUSE 11.2






 openSUSE 11.2


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2011
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de