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.6 Schleifen  downtop

Auch in der Shell stehen einem bei Bedarf verschiedene Schleifen zur Verfügung. Die for- und while-Schleife kennen Sie ja bereits von der Skriptsprache awk, die in Abschnitt 4.4 behandelt wurde. Neu hinzu kommt die until-Schleife, die eine Art Negation der while-Schleife darstellt, doch dazu später mehr. Zunächst werden wir uns mit der bereits bekannten while-Schleife beschäftigen, damit der Umstieg von awk- auf Shell-Schleifen möglichst einfach gelingt.


Galileo Computing

7.6.1 while  downtop

Die while-Schleife setzt sich aus einer bedingten Anweisung, wie sie bereits aus der if-Anweisung bekannt ist, und einem Anweisungsblock zusammen. Der Anweisungsblock wird durch das Schlüsselwort do eingeleitet und durch das Schlüsselwort done beendet.

while [ Bedingung ] 
do 
   Anweisung1 
   Anweisung2 
done

Listing 7.28    Aufbau der while-Anweisung

Auch hier lässt sich eine übersichtlichere Schreibweise durch ein (oder mehrere) Semikolons erreichen:

while [ Bedingung ]; do 
   Anweisung1 
   Anweisung2 
done

Listing 7.29    Mehr Übersicht

Endlosschleifen

Auch in der Shell können Endlosschleifen realisiert werden. Dazu muss nur eine ständig »wahre« Bedingung übergeben werden. Dies wäre beispielsweise »1«, »true«, »"a« < oder auch der simple Doppelpunkt:

while :; do 
   echo "test"; sleep 2; done

Listing 7.30    Ein Beispiel

Mit while lassen sich nun bereits simple Menüs für Shellskripts erstellen. <Später werden Sie die select-Anweisung kennenlernen, die speziell für das Erstellen von Auswahlmenüs in Shellskripten vorhanden ist.> Dazu lassen wir bei jedem Schleifendurchlauf erneut einen Wert durch read einlesen und vergleichen diesen mit vorgegebenen Werten.

VALUE="" 
while [ "$VALUE" != "ende" ]; do 
  clear 
  echo "Auswahlmenü:" 
  echo 
  echo "Eingabe   Auswirkung" 
  echo "benutzer: zeigt die eingeloggten Benutzer an" 
  echo "prozesse: zeigt die aktuellen Prozesse an" 
  echo "laufzeit: zeigt die Laufzeit des Systems an" 
  echo "ende:     beendet das Skript" 
  echo 
 
  echo "Ihre Auswahl: " 
  read VALUE 
 
  if [ "$VALUE" = "benutzer" ]; then 
     w 
  elif [ "$VALUE" = "prozesse" ]; then 
     ps 
  elif [ "$VALUE" = "laufzeit" ]; then 
     uptime|awk -F, '{print $1}' 
  elif [ "$VALUE" = "ende" ]; then 
     echo 'Bis bald!' 
  else 
     echo "Ihre Eingabe wird nicht unterstützt." 
  fi 
 
  echo "Drücken Sie Return, um fortzufahren." 
  read garbage 
 
done

Listing 7.31    Ein Menü mit while


Galileo Computing

7.6.2 until  downtop

Zu den bereits bekannten Schleifen kommt nun die until-Schleife hinzu. Diese neue Schleife kann als Negation der while-Schleife verstanden werden. Der Anweisungsblock der until-Schleife wird so lange ausgeführt, wie die Bedingung nicht erfüllt ist.

Man kann praktisch die until-Schleife mit einer while !-Schleife gleichsetzen:

while [ ! 1 ]; do echo Test; done 
until [ 1 ]; do echo Test; done 
# oder noch kürzer: 
until :; do echo Test; done

Listing 7.32    until und while !


Galileo Computing

7.6.3 for  downtop

Die letzte Schleife in diesem Abschnitt ist die ebenfalls in ähnlicher Form aus awk bekannte for-Schleife. Der Aufbau der Schleife gestaltet sich wie folgt:

for VAR in WERT1 WERT2 WERT3 
do 
   Anweisung1 
   Anweisung2 
done

Listing 7.33    for-Syntax

for arbeitet einen Anweisungsblock mit jedem angegebenen Wert einmal durch. Dieser Wert wird während des Durchlaufens des Anweisungsblocks an die Variable VAR zugewiesen, mit der die Anweisungen arbeiten können. Der Anweisungsblock wird, wie bei der while-Schleife, durch do eingeleitet und mit done beendet.

Auch hier werden wir das übliche Beispiel vorstellen, um Ihnen die Anwendung der Schleife möglichst leicht verständlich zu erklären.

Wir nehmen dabei als Werte alle TeX-Dateien in einem Verzeichnis an (in diesem Fall das Verzeichnis mit unserem Buch), die wir an die Variable DATEI zuweisen.

Für jede Datei soll dabei die Anzahl der darin enthaltenen Wörter ausgegeben werden. Zusätzlich soll die Gesamtzahl der Wörter summiert und nach Beendigung der Schleife ausgegeben werden.

#!/bin/bash 
 
typeset -i WORDS=0 
 
for DATEI in *.tex 
do 
   NWORDS=`wc -w $DATEI| awk '{print $1}'` 
   echo "Datei $DATEI beinhaltet $NWORDS Woerter." 
 
   WORDS=WORDS+NWORDS 
done 
 
echo 
echo "Woerter gesamt: $WORDS"

Listing 7.34    Beispiel: for-Schleife

Wenn wir dieses Skript nun ausführen, erhalten wir die folgende Ausgabe: <Wobei das Buch zu diesem Zeitpunkt noch nicht ganz fertig geschrieben war.>

$ ./wordcount 
Datei anhg_dvd.tex beinhaltet 329 Woerter. 
Datei anhg_install.tex beinhaltet 4009 Woerter. 
Datei anhg_komref.tex beinhaltet 5448 Woerter. 
Datei anhg_loesungen.tex beinhaltet 3950 Woerter. 
Datei anhg_misc.tex beinhaltet 695 Woerter. 
Datei buch.tex beinhaltet 152 Woerter. 
Datei glossar.tex beinhaltet 834 Woerter. 
Datei kap01_kernel.tex beinhaltet 17796 Woerter. 
Datei kap03_einstieg.tex beinhaltet 8760 Woerter. 
Datei kap04_2_regex.tex beinhaltet 9593 Woerter. 
Datei kap04_3_tools.tex beinhaltet 3879 Woerter. 
Datei kap04_4_skripting.tex beinhaltet 5230 Woerter. 
Datei kap04_editoren.tex beinhaltet 3967 Woerter. 
Datei kap04_shell.tex beinhaltet 10463 Woerter. 
Datei kap05_2.tex beinhaltet 24593 Woerter. 
Datei kap05_sysadmin.tex beinhaltet 9606 Woerter. 
Datei kap07_dienste_dns.tex beinhaltet 2514 Woerter. 
Datei kap10_kdegnomewm.tex beinhaltet 3499 Woerter. 
Datei kap13_spiele.tex beinhaltet 6729 Woerter. 
Datei kap_boot.tex beinhaltet 8159 Woerter. 
Datei kapinterna_filesystem.tex beinhaltet 8343 Woerter. 
Datei kapinterna_prozesse.tex beinhaltet 8769 Woerter. 
Datei kap_lamp.tex beinhaltet 4163 Woerter. 
Datei kap_mailserver.tex beinhaltet 4725 Woerter. 
Datei kap_netz_clients.tex beinhaltet 5524 Woerter. 
Datei kap_netz_dienste.tex beinhaltet 7095 Woerter. 
Datei kap_netzwerk.tex beinhaltet 10929 Woerter. 
Datei kap_progsprachen.tex beinhaltet 17428 Woerter. 
Datei kap_sicherheit.tex beinhaltet 16904 Woerter. 
Datei kap_ssh.tex beinhaltet 3504 Woerter. 
Datei kap_virtualmach.tex beinhaltet 1602 Woerter. 
Datei kap_x11apps.tex beinhaltet 4655 Woerter. 
Datei kap_x11.tex beinhaltet 7001 Woerter. 
Datei kapxx_software.tex beinhaltet 13393 Woerter. 
Datei k_vorwort.tex beinhaltet 7841 Woerter. 
Datei literatur.tex beinhaltet 753 Woerter. 
Datei newIcons.tex beinhaltet 174 Woerter. 
Datei new-macros.tex beinhaltet 110 Woerter. 
Datei trennung.tex beinhaltet 118 Woerter. 
Datei using-icons.tex beinhaltet 511 Woerter. 
 
Woerter gesamt: 253747

Listing 7.35    Wörter unseres Buches

Sie können die Wertliste für for auch durch eine Kommandosubstitution übergeben. Sucht ein Skript beispielsweise alle Codedump-Dateien des Systems, kann ein find-Aufruf für die Kommandosubstitution verwendet werden:\end{gpHinweis}

for DATEI in `find / -name *core 2>/dev/null` 
do 
   echo "Lösche Datei $DATEI..." 
   rm $DATEI 
done

Listing 7.36    for mit Kommandosubstitution


Galileo Computing

7.6.4 seq – Schleifen mit Aufzählungen  toptop

Manchmal kommt es vor, dass man eine Schleife mit einer Ziffernfolge durchlaufen möchte oder aus irgendeinem anderen Grund eine Ziffernfolge benötigt. Für diesen Zweck wurde das Programm seq geschrieben, das hier nur kurz angesprochen werden soll. Eine Parameterliste für seq finden Sie in der Kommandoreferenz.

Soll seq beispielsweise alle Zahlen von 1 bis 10 auflisten, dann ist dies ganz einfach. Man übergibt den Start- und Endwert:

$ seq 1 10 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10

Listing 7.37    seq in Aktion

for und seq

Möchte man seq nun in eine Schleife packen, wird am besten die Kommandosubstitution verwendet.

Möchte man etwa einen bestimmten Satz Dateien löschen, dann wäre dies eine Möglichkeit dazu:

$ for i in `seq 1 10`; do 
    rm "file$i" 
done

Listing 7.38    seq in einer for-Schleife



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