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ö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 11 Shellskriptprogrammierung mit der bash
  Pfeil 11.1 Das erste Shellskript
  Pfeil 11.2 Kommentare
  Pfeil 11.3 Rechnen in der Shell
    Pfeil 11.3.1 Integer-Variablen
    Pfeil 11.3.2 expr
    Pfeil 11.3.3 Den bc nutzen
  Pfeil 11.4 Arrays
  Pfeil 11.5 Bedingte Anweisungen
    Pfeil 11.5.1 if
    Pfeil 11.5.2 case
  Pfeil 11.6 Schleifen
    Pfeil 11.6.1 while
    Pfeil 11.6.2 until
    Pfeil 11.6.3 for
    Pfeil 11.6.4 seq – Schleifen mit Aufzählungen
  Pfeil 11.7 Menüs mit select
  Pfeil 11.8 break
  Pfeil 11.9 Funktionen
    Pfeil 11.9.1 Eine simple Funktion
    Pfeil 11.9.2 Funktionsparameter
    Pfeil 11.9.3 Rückgabewerte
  Pfeil 11.10 Temporäre Dateien
  Pfeil 11.11 Syslog-Meldungen via Shell
  Pfeil 11.12 Zusammenfassung
  Pfeil 11.13 Aufgaben


Galileo Computing - Zum Seitenanfang

11.5 Bedingte Anweisungen  Zur nächsten ÜberschriftZur vorigen Überschrift

Auch in der Shell können bedingte Anweisungen verwendet werden. Wir werden uns im Folgenden die bereits aus awk in ähnlicher Form bekannte if-Anweisung und später die case-Anweisung ansehen, die jeweils eine Möglichkeit zur Implementierung bedingter Anweisungen in Shellskripts darstellen.


Galileo Computing - Zum Seitenanfang

11.5.1 if  Zur nächsten ÜberschriftZur vorigen Überschrift

Die bedingte Anweisung, die man am häufigsten verwendet, ist die if-Anweisung. Sie hat einen einfachen Aufbau, wobei man stets darauf achten sollte, die nötigen Leerzeichen um die eckigen Klammern zu setzen. Hinter dem if-Befehl selbst folgt die in der Regel in eckigen Klammern eingeschlossene Bedingung. Darauf folgt das Schlüsselwort then, das die Anweisungen einleitet, die abgearbeitet werden sollen, sofern diese Bedingung erfüllt ist.

elif

Ist die erste Bedingung nicht erfüllt, wird – sofern vorhanden – die nächste Bedingung über elif geprüft. Ist auch diese Bedingung nicht erfüllt, werden die restlichen elif-Bedingungen so lange überprüft, bis entweder eine Bedingung erfüllt oder keine weitere elif-Bedingung mehr vorhanden ist.

else

Ist keine Bedingung erfüllt, werden – sofern vorhanden – die Anweisungen hinter dem else-Schlüsselwort ausgeführt.

fi

Die if-Anweisung wird durch das Schlüsselwort fi beendet.

if [ Bedingung ]
then
Anweisung1
Anweisung2
...
elif [ Bedingung2 ]
then
Anweisung1
Anweisung2
...
elif [ BedingungN ]
then
Anweisung1
Anweisung2
...
else
Anweisung1
Anweisung2
...
fi

Listing 11.19  Die if-Anweisung


Eine if-Anweisung muss weder eine elif- noch eine else-Anweisung beinhalten.


Es ist auch möglich, den Skriptcode für eine if-Anweisung in einer zeilensparenden und gleichzeitig übersichtlicheren Form zu schreiben, sofern man die Separierung durch Kommas verwendet. [Man kann auch die komplette if-Anweisung inklusive sämtlicher Sub-Bedingungen und Anweisungen in eine einzelne Zeile, separiert durch Kommas, schreiben. Dies ist allerdings sehr unübersichtlich und soll nur der Vollständigkeit halber erwähnt werden.] Diese Methode werden wir in den restlichen Beispielen dieses Kapitels anwenden.

if [ Bedingung ]; then
Anweisung1
Anweisung2
...
elif [ Bedingung2 ]; then
Anweisung1
Anweisung2
...
elif [ BedingungN ]; then
Anweisung1
Anweisung2
...
else
Anweisung1
Anweisung2
...
fi

Listing 11.20  if kürzer fassen

Die Klammern

Wirft man einen Blick in das Dateisystem, so wird man beispielsweise unter OpenBSD im Verzeichnis /bin den Dateinamen [ vorfinden. Dabei handelt es sich um ein ausführbares Programm namens test. Tatsächlich ist die Syntax der if-Anweisung in der folgenden Form aufgebaut:

if Testbefehl; then
Anweisungen
fi

Listing 11.21  Die if-Anweisung: korrekte Syntax

Das Programm test erlaubt uns nun, eine Bedingung zu erstellen. Ist diese Bedingung erfüllt, gibt test wahr bzw. im anderen Fall falsch an if zurück. Sie können jedoch auch jedes andere Programm in eine if-Anweisung einbauen:

$ if test 1
then
echo "Test"
fi
Test
$ if /bin/ls >/dev/null
then
echo "Test"
fi
Test
$ if /bin/gibtsnicht
then
echo "blah"
else
echo "Fehler"
fi
bash: /bin/gibtsnicht: No such file or directory
Fehler

Listing 11.22  Das Programm »test« in Verbindung mit der if-Anweisung

Zahlen-Vergleiche

Doch nun zurück zu den eigentlichen Bedingungen, die uns das Programm test bietet. Zunächst werden wir uns ansehen, wie Vergleiche zwischen Zahlenwerten programmiert werden. Dabei gibt es verschiedene Möglichkeiten, dies zu tun. Wir werden uns mit der einfachsten und unserer Meinung nach besten Möglichkeit beschäftigen. Dazu verwendet man vier runde an Stelle zweier eckiger Klammern und die bereits aus awk bekannten Vergleichsoperatoren ==, != oder =>:

if (( 17 < 20 ))
then
echo "17 ist kleiner als 20"
else
echo "hier stimmt irgendetwas nicht..."
fi

Listing 11.23  Zahlenvergleich

String-Vergleiche

Möchte man hingegen Strings vergleichen, so gilt hier, dass man bei diesen auch reguläre Ausdrücke einbauen kann. Ein String wird dabei in Anführungszeichen gesetzt, was auch für Variablen gilt.

# direkter Stringvergleich:
if [ "abc" = "abc" ]; then
echo "Bedingung ist wahr."
fi
# Variablen mit Strings
A="abc"
if [ "$A" = "abc" ]; then
echo "Bedingung ist wahr."
fi
# reguläre Ausdrücke (Achtung: Doppelklammer!)
if [[ "$A" == a?? ]]; then
echo "Bedingung ist wahr."
fi

Listing 11.24  Strings vergleichen


Galileo Computing - Zum Seitenanfang

11.5.2 case  topZur vorigen Überschrift

Mit case stellt die Shell jedoch noch eine Option zur Verfügung, mit der eine bedingte Anweisung in Skripts eingebaut werden kann. Bei case werden die möglichen »Fälle«, die eintreten können, explizit angegeben, was in folgender Form geschieht, wobei Testwert in der Regel eine Variable ist:

case Testwert in
Fall1)
Anweisung1;
Anweisung2;
;;
Fall2)
Anweisung1;
Anweisung2;
;;
esac

Listing 11.25  case

else für case

Das von der if-Anweisung bekannte else-Schlüsselwort finden wir in ähnlicher Form (nämlich durch den Fall *) auch für die case-Anweisung vor. Der Fall *) enthält dabei die Anweisungen, die ausgeführt werden sollen, wenn keiner der zuvor aufgeführten Fälle eintritt.


Ein Anweisungsblock für einen Fall ist durch zwei Semikolons abzuschließen.



Im folgenden Beispiel soll gezeigt werden, wie der *)-Fall und die Abschlusssequenz angewandt werden.


ZAHL=5
case $ZAHL in
3)
echo "Die Zahl ist 3!"
;;
4)
echo "Die Zahl ist 4!"
;;
*)
echo "Zahl ist nicht 3 oder 4!"
;;
esac

Listing 11.26  case-Beispiel

Etwas kompakter

Möchte man nun nicht für jeden Fall, für den ein ähnlicher oder gar gleicher Skriptcode ausgeführt werden soll, den Anweisungsblock neu schreiben, kann man sich Arbeit ersparen und sogar einen übersichtlicheren Code erstellen, indem man Bedingungen zusammenfasst. Dazu verwendet man die ODER-Bedingung. Ein Fall ist dabei erfüllt, wenn zumindest eine einzige der angegebenen Möglichkeiten zutrifft.

ZAHL=3
case $ZAHL in
3|4)
echo "Die Zahl ist 3 oder 4!"
;;
*)
echo "Zahl ist nicht 3 oder 4!"
;;
esac

Listing 11.27  Die kompakte Version



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