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

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 7 Shellskriptprogrammierung
  gp 7.1 Das erste Shellskript
  gp 7.2 Kommentare
  gp 7.3 Rechnen in der Shell
    gp 7.3.1 Integer-Variablen
    gp 7.3.2 expr
    gp 7.3.3 Den bc nutzen
  gp 7.4 Arrays
  gp 7.5 Bedingte Anweisungen
    gp 7.5.1 if
    gp 7.5.2 case
  gp 7.6 Schleifen
    gp 7.6.1 while
    gp 7.6.2 until
    gp 7.6.3 for
    gp 7.6.4 seq – Schleifen mit Aufzählungen
  gp 7.7 Menüs mit select
  gp 7.8 break
  gp 7.9 Funktionen
    gp 7.9.1 Eine simple Funktion
    gp 7.9.2 Funktionsparameter
    gp 7.9.3 Rückgabewerte
  gp 7.10 Temporäre Dateien
  gp 7.11 Zusammenfassung
  gp 7.12 Aufgaben


Galileo Computing

7.9 Funktionen  downtop

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

  • machen Ihren Code übersichtlicher,
  • machen Ihren Code 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 7.43    Variante 1

oder in der Form

NAME()

Listing 7.44    Variante 2

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

Der Anweisungsblock wird durch geschweifte Klammern begrenzt.

Funktionsname() 
{ 
   Anweisung1 
   Anweisung2 
   ... 
}

Listing 7.45    Syntax einer Funktion


Galileo Computing

7.9.1 Eine simple Funktion  downtop

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

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 7.47    Ausführen des Skripts


Galileo Computing

7.9.2 Funktionsparameter  downtop

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

Wir werden uns nun die Funktionsparameter ansehen. Parameter ermöglichen es, eine Funktion mit verschiedenen Werten immer wieder und 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 nun 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 7.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 
466204928

Listing 7.49    quadr() aufrufen


Galileo Computing

7.9.3 Rückgabewerte  toptop

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

Nutzen

Diesen Rückgabewert geben nicht nur Funktionen (bei denen ist er im Übrigen optional), sondern auch Programme zurück.

Mithilfe dieses Rückgabewertes 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 7.50    $?

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; echo $? 
cd: /root: Permission denied 
1

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






 Linux
Jetzt bestellen


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

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




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