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.9 Funktionen  Zur nächsten ÜberschriftZur vorigen Überschrift

Funktionen sind in jeder vernünftigen Programmiersprache zu haben. Sie

  • machen Ihren Code übersichtlicher und wartungsarmer,
  • können, nachdem sie einmal geschrieben worden sind, beliebig oft mit
  • beliebig vielen Werten und
  • an beliebig vielen Stellen ausgeführt werden,
  • sparen Entwicklungszeit und
  • können rekursiv aufgerufen werden.

Das hört sich doch schon mal gut an, oder? Doch was ist eine Funktion genau? Eine Funktion besteht zunächst einmal aus einem Funktionskopf und einem Anweisungsblock. Der Funktionskopf gibt den Namen der Funktion an und wird entweder in der Form

function NAME

Listing 11.42  Variante 1

oder in der Form

NAME()

Listing 11.43  Variante 2

eingeleitet. Wir haben uns im Folgenden für die zweite Variante entschieden.


Der Anweisungsblock wird durch geschweifte Klammern begrenzt.


Funktionsname() {
Anweisung1
...
}

Listing 11.44  Syntax einer Funktion


Galileo Computing - Zum Seitenanfang

11.9.1 Eine simple Funktion  Zur nächsten ÜberschriftZur vorigen Überschrift

Zunächst werden wir eine Funktion schreiben, die die Dateien in einem Verzeichnis zählt und das Ergebnis eingebettet in einen Text ausgibt. Wir nennen diese Funktion »Zaehle«.

Zaehle()
{
echo "Dateien: `ls | wc -l`"
}

Listing 11.45  Simples Funktionsbeispiel

Eine Funktion kann im restlichen Teil des Shellskripts aufgerufen werden, indem man den Funktionsnamen als Anweisung angibt:

cd /
for DIR in `ls`
do
echo "Verzeichnis $DIR:"
cd $DIR
Zaehle
cd ..
done

Listing 11.46  Aufruf der Funktion »Zaehle()«

Führen wir dieses Skript nun aus (wobei beide Listings in einer Datei kombiniert sein müssen), so erhalten wir unter OpenBSD die folgende Ausgabe:

$ ./script.sh
Verzeichnis altroot/:
Dateien:        2
Verzeichnis bin/:
Dateien:       47
Verzeichnis boot:
bash: cd: boot: Not a directory
Dateien:       27
Verzeichnis bsd:
bash: cd: bsd: Not a directory
Dateien:       27
Verzeichnis bsd.rd:
bash: cd: bsd.rd: Not a directory
Dateien:       27
Verzeichnis bsd.rd:
bash: cd: bsd.rd: Not a directory
Dateien:       27
Verzeichnis dev/:
Dateien:     1249
Verzeichnis etc/:
Dateien:      117
...

Listing 11.47  Ausführen des Skripts


Galileo Computing - Zum Seitenanfang

11.9.2 Funktionsparameter  Zur nächsten ÜberschriftZur vorigen Überschrift

Nachdem Sie nun eine erste Funktion verstanden haben, können wir auch die restlichen Subthemen zu Funktionen behandeln. Doch keine Bange – Funktionen sind nicht nur sehr nützlich, sondern auch sehr einfach zu verstehen.

Wir werden uns nun die Funktionsparameter ansehen. Parameter ermöglichen es, eine Funktion mit verschiedenen Werten immer wieder auszuführen. Sie können sich diese Funktionsweise wie eine for-Schleife vorstellen. Die for-Schleife wird mit jedem Wert einmal ausgeführt, wobei der Anweisungsblock diesen Wert verwendet. Eine Funktion ist zwar keine Schleife, doch die ihr übergebenen Werte (also Parameter) werden auch dem Anweisungsblock zur Verfügung gestellt.

Anders als bei Programmiersprachen wie C werden die Funktionsparameter nicht zuvor festgelegt, benannt oder bekommen gar Datentypen. In der Shell ist dies nicht der Fall, weshalb auch schnell Fehlaufrufe passieren, wenn man Parameter in ihrer Reihenfolge vertauscht.

Um die Funktionsweise von Funktionsparametern auf eine einfache Weise zu verdeutlichen, werden wir eine Funktion schreiben, die das Quadrat einer Zahl bildet. Dazu multiplizieren wir die Zahl mit sich selbst, was expr für uns erledigt.

quadr()
{
expr $1 \* $1
}

Listing 11.48  Funktionsparameter

Wie Sie sehen, verwenden wir beim Aufruf von expr die Variable $1. Diese Variable ist der erste Parameter, der der Funktion übergeben wurde. Entsprechend ist der zweite Parameter $2, der dritte $3 usw. Wenn wir diese Funktion nun aufrufen, übergeben wir einfach eine Zahl als Parameter:

$ quadr()
{
expr $1 \* $1;
}
$ quadr 3
9
$ quadr –10
100
$ quadr 3490128
12180993456384

Listing 11.49  quadr() aufrufen


Galileo Computing - Zum Seitenanfang

11.9.3 Rückgabewerte  topZur vorigen Überschrift

Shellfunktionen haben noch eine weitere Eigenschaft: Sie können einen Wert zurückgeben. Man nennt diesen Wert daher den Rückgabewert.

Nutzen

Diesen Rückgabewert liefern nicht nur Funktionen (bei diesen ist er im Übrigen optional), sondern auch Programme. Mithilfe dieses Rückgabewerts kann in der Shell geprüft werden, ob die Ausführung einer Funktion oder eines Programms erfolgreich war. Dabei wird der Rückgabewert in der Variable $? gespeichert.

Fragt man diese Variable nun ab, erhält man in der Regel (denn so sollte es sein) bei erfolgreichem Ablauf den Wert »0«, bei fehlerhaftem Ablauf den Wert »1«.

$ ls
...
$ echo $?
0
$ ls /root
ls: root: Permission denied
$ echo $?
1

Listing 11.50  Die Variable $?

return

Um diese Funktion nun im eigenen Shellskript zu nutzen, baut man die Anweisung return in den Funktionscode ein. Diese Anweisung gibt den ihr übergebenen Wert zurück.

$ dols() {
>      cd $1
>      if [ "$?" = "1" ]; then return 1; fi
>      ls
>      if [ "$?" = "1" ]; then return 1; fi
>      return 0
> }
$ dols /
...
$ echo $?
0
$ dols /root
cd: /root: Permission denied
$ echo $?
1

Listing 11.51  dols()



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