41
Betriebssysteme – WS 2013/14 – Teil A/bash I 09.10.13 1 Betriebssysteme Teil A: Einführung in den LINUX-bash-Shell I

Betriebssysteme Teil A: Einführung in den LINUX-bash-Shell Iwi.f4.htw-berlin.de/users/messer/LV/WI-GWI-RABS/Folien/CS-18/A-BS-Shell1-1.pdf · Betriebssysteme – WS 2013/14 – Teil

Embed Size (px)

Citation preview

Betriebssysteme – WS 2013/14 – Teil A/bash I 09.10.13 1

Betriebssysteme

Teil A: Einführung in den LINUX-bash-Shell I

Betriebssysteme – WS 2013/14 – Teil A/bash I 2

Literatur

[A-1] Taylor, Dave: Raffinierte Shell Scripts. mitp, 2004

[A-2] Robbins, Arnold: sed&awk. kurz&gut, O'Reilly, 2. Auflage, 2002

[A-3] Barrett, Daniel: Linux. kurz&gut, O'Reilly, 2004

[A-4] Kofler, Michael: Linux. Addison-Wesley, 6. Auflage, 2001Diese Auflage bezieht sich auf den 2.4-Kernel.

[A-5] Siever, Ellen et. al: Linux in a Nutshell. O'Reilly, 2001

[A-6] http://selflinux.org/selflinux/html/bash_basic06.html

[A-7] http://www.informatik.uni-hamburg.de/RZ/lehre/ERB/Old/intern/Unix/unix-tthse3.html

[A-8] http://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger

[A-9] http://openbook.galileocomputing.de/shell_programmierung/

Betriebssysteme – WS 2013/14 – Teil A/bash I 3

Überblick

• Globales Prinzip

• Einführung in die bash-Variablen

• Inline Kommandos

• Kontrollkonstrukte

Betriebssysteme – WS 2013/14 – Teil A/bash I 4

Prozesse

• Ein Prozess ist ein laufendes sequentielles Programm. Alle Prozesse laufen (im Konzept) parallel zueinander.

• Die Kommandoebene wird durch einen Prozess namens Shell realisiert.

• Prozessnummer = Eindeutige Nummer (als "Name") eines ProzessesDiese Prozess-IDs können sich aber wiederholen.

Shell

Anwendungs-programm

generiert

UNIX/LINUX-Kernel (Kern)

SyscallsSyscalls

Hardware

Welt d

er

Pro

zess

e

Anwendungs-programmAnwendungs-

programm

Der Kernel ist der speicherresidente Teil des Betriebssystems, der durchSystemaufrufe oder Syscalls aktiviert wird, bei deren Ausführung deraufrufende Prozess inaktiv ist.Außerhalb des Kernels gibt es nur Prozesse.

Betriebssysteme – WS 2013/14 – Teil A/bash I 5

Zum Begriff des Shells I

• Shell = Programm zur Ausführung von Kommandos durch Eingabe von ASCII-Code

• Shells erlauben die vollständige Kontrolle über ein Computer, während Fenstersysteme nur einen Teil der Möglichkeiten von Shells besitzen.

• Diesem Vorteil steht ein Nachteil gegenüber: Es ist viel mehr Wissen und Können zur Benutzung erforderlich.

• Leider haben Fenstersysteme den Nachteil nur einen kleinen Bereich der Probleme bzw. Hürden zu verdecken, was bedeutet, dass Shells in bestimmten Fällen zwingend erforderlich sind.

Betriebssysteme – WS 2013/14 – Teil A/bash I 6

Zum Begriff des Shells II

• Ein Shell ist ein Kommando-Interpreter, also ein Programm, das einen Fetch-Decode-Execute-Zyklus (wie eine CPU) hat.

• Ein paar Kommandos werden vom Shell selbst ausgeführt; dies sind die Inline-Kommandos.

• Alle anderen Kommandos werden durch Kind-Prozesse realisiert. In einem Kind-Prozess wird das Programm des Kommandos geladen und ausgeführt.

• Dies hat den Vorteil, dass Kommandos parallel ausgeführt werden können. Wenn der Shell nicht auf das Ende seines Kind-Prozesses wartet, kann parallel gearbeitet werden.

• Kind-Prozess = Child process = Prozess, der von einem anderen (Elternprozess, Parent process) erzeugt und kontrolliert wird

Betriebssysteme – WS 2013/14 – Teil A/bash I 7

Kommandointerpreter I

REPEAT read_line(L) IF End-of-File THEN exit FI substitute_Variables(L) execute(L) IF NOT "&" specified THEN wait_for_process_Termi nation FIFOR EVER

Es wird eine Zeile in den Puffer L gelesen, überarbeitet und ausgeführt.Beim Überarbeiten werden die Shellvariablen, die mit einem $ beginnen,durch ihre Werte (meistens Zeichenketten) ersetzt.

Wird am Kommandoende ein "&" gefunden, so wartet der Shell nicht aufdie Beendigung der Kind-Prozesse, d.h. es kann parallel zu diesen Prozessenweiter gearbeitet werden.

Betriebssysteme – WS 2013/14 – Teil A/bash I 8

Sequentielles und paralleles Arbeiten

Shell

Programm P1

Shell schläft

Programme Programm P2

Shell schläft

Shell

Programme Programm P1

Programm P2

Programm P3

Betriebssysteme – WS 2013/14 – Teil A/bash I 9

Kommandointerpreter II

REPEAT read_line(L) IF End-of-File THEN exit FI substitute_Variables(L) CASE analyse_line(L) IF cmd_1: excecute (cmd_1) // Inline command IF cmd_2: excecute (cmd_2) // Inline command ..... ELSE Search_in_Directories IF found THEN execute_command ELSE Error_message("Command not found") FI FI ENDCASE IF NOT "&" specified THEN wait_for_process_Te rmination FIFOR EVER

Eingebaute Kommandos

Durchsuchen von Ordnern

Betriebssysteme – WS 2013/14 – Teil A/bash I 10

Verbreitete Shells

• Shells können von jedem implementiert werden. Daher gibt es unterschiedliche Sprachversionen, die häufig inkompatibel sind.

• Die Manual-Einträge für die Shells orientieren sich an dem Namen des Shells; die internen Shell-Kommandos werden innerhalb dieser Einträge beschrieben und lassen sich daher nicht (immer) mit "man Kommando" ansehen.

Verbreitete Shells:

• Bourne-Shell (sh) – der Klassiker

• Korn-Shell (ksh)

• C-Shell (csh) und TC-Shell (tcsh)

• Bourne again Shell (bash)

• zsh

Betriebssysteme – WS 2013/14 – Teil A/bash I 11

Prinzipien der Shell-Programmierung I

• Shells sind Kommando-Interpreter mit einer eigenen Sprache.

• Die Kommandos werden von der Tastatur gelesen oder von einer Datei, die dann Skript-Datei genannt wird.

• Shells können interaktiv arbeiten oder in einem Skript geschachtelt aufgerufen werden.

• Skript = Ausführbare Datei mit ASCII-Kommandos

• In Linux werden die Skript-Dateien wie Kommandos behandelt, so dass für den Aufrufer kein Unterschied zu "normalen" Kommandos besteht.

Betriebssysteme – WS 2013/14 – Teil A/bash I 12

Prinzipien der Shell-Programmierung II

• Sie werden mit einem einleitenden $ markiert, z.B. $index.

• Shell-Variablen werden nicht deklariert.

• Sie besitzen den Typ des Ausdrucks der letzten Zuweisung.

• Es gibt folgenden Typen für Werte:– String

– Integer

• Shell-Variablen gelten immer nur für den betreffenden Shell; aufgerufene Programme oder andere Shells haben darauf keinen Zugriff.

• String = Zeichenkette = Ein Feld von Zeichen, das keine weitere Bedeutung als die Verkettung von Zeichen hat.Z. B. "Kuno, der Killerkarpfen" oder "0xae2f"

Betriebssysteme – WS 2013/14 – Teil A/bash I 13

• Expliziter Aufruf eines Skriptes als Kommando:

[bash] Kommando [arg1] [arg2]... [argn]

Kommando: Dateiname des Skriptsarg1... argN: Parameter als Zeichenkette

• Parameter = Argument = Zeichenkette, die angibt womit oder wie etwas geschehen soll

• Die Zeichen innerhalb [] sind optional, können also weggelassen werden.

• ... zeigen mögliche Wiederholungen an.

• Beispiele:bash Beispiel a b c

Beispiel a b c

./Beispiel a b c

Syntax der Skriptsprache I

Betriebssysteme – WS 2013/14 – Teil A/bash I 14

Syntax der Skriptsprache II - Erläuterungen

• Ein Skript kann auf zwei Arten ausgeführt werden:– bash Name Parameter...

wobei Name der Name einer Datei ist

– Name Parameter...wobei die Datei Name ausführbar sein muss und in der 1. Zeile eine spezielle Markierung (siehe unten) hat

• Jedes syntaktische Element wird durch ein Leerzeichen getrennt – Ausnahme: Strings in " eingeschlossen.

Dies gilt beim Aufruf, aber auch innerhalb des Skripts.Beispiele:

$abc ist ein Element (hier: eine Shell-Variable)

$ abc sind zwei Elemente

"$ abc" ist ein Element (hier: ein String)

Betriebssysteme – WS 2013/14 – Teil A/bash I 15

Parallelität zwischen Shell und Programmen I

• date &date gibt das Datum parallel zum Shell aus

• date & lsdate gibt das Datum parallel zum Listen der Dateinamen aus, der Shell wartet anschließend auf beide

• date & ls &wie oben, nur dass der Shell auf keinen der Prozesse wartet (volle Parallelität)

Wird am Ende eines Kommandos das "&" benutzt, so bedeutet dies,dass der Shell auf die Beendigung des davor stehenden Kommandosnicht wartet.Werden zwei Kommandos mit "&" verknüpft, so laufen sie parallel.

Beispiele :

Betriebssysteme – WS 2013/14 – Teil A/bash I 16

Parallelität zwischen Shell und Programmen II

• Ein Programm, das mit "&" als parallel laufend zum Shell gekennzeichnet ist, wird Hintergrund-Prozess genannt.

• Damit nicht allzu viel Chaos auf dem Bildschirm entsteht, gibt es folgende Regelung:

Wenn ein Hintergrund-Prozess etwas von der Konsole lesen oder auf die Konsole schreiben will, wird er gestoppt bis er in den Vordergrund geholt wird. Dann erst erfolgt der I/O-Vorgang.

• In früheren UNIX-Versionen liefen die Programme wirklich parallel einschließlich I/O, was besonders beim Lesen zu Problemen führte, da nicht klar war, welcher der Prozesse liest.

Betriebssysteme – WS 2013/14 – Teil A/bash I 17

Syntax der Skriptsprache III

• Beginnt der 1. Parameter mit "-" oder "--", so ist damit ein Flag oder Schalter gemeint.Aber:Das ist eine Konvention, die in der Regel eingehalten wird.

• Flag = Schalter = Option = Angabe, auf welche Weise das Kommando ausgeführt werden soll (Steuerparameter)

• Beispielels -l

ls -la

ls -l abc

Betriebssysteme – WS 2013/14 – Teil A/bash I 18

Syntax der Skriptsprache IV

• Zugriff auf Variablen innerhalb der Skript-Datei:Variablen beginnen mit $ gefolgt von folgenden Zeichen:

$0..$9 Parameter entsprechend dem Aufrufz.B. $1 steht für 1. Parameter

$* Alle Parameter von $1 beginnend zusammengesetzt

$@ Alle Parameter von $1 beginnend zusammengesetzt

$$ Prozessnummer des Shells

$Name Variable mit dem Namen Namez. B. $index

• $0 steht für den Namen des Skripts

• $0..$9, $*, $@ und $$ sind 2-buchstabige Elemente, auch wenn kein Leerzeichen folgt!Z.B. $10 sind zwei Elemente: "$1" und "0"!

• Es ist nur der Zugriff auf die ersten 9 Parameter mit $1..$9 möglich, alle anderen Parameter lassen sich nur mit dem Kommando shift oder mit $* bzw. $@ ansprechen.

Betriebssysteme – WS 2013/14 – Teil A/bash I 19

Parameterzuordnungen I

Aufruf: bash copy bla blue

ShellnameSkriptname

1. Parameter

2. Parameter

copy: cp $1 $2

Datei Zuordnungen$0 = copy$1 = bla$2 = blue$3 =....

Ersetzen (Substituieren)

Ausführen: cp bla blue

Betriebssysteme – WS 2013/14 – Teil A/bash I 20

Parameterzuordnungen II

• Auch wenn das Skript mit bash aufgerufen wird, ist der dem Namen des Skripts folgende Parameter der erste!(die Angabe des Shellprogramms selbst, z.B. bash, zählt nicht bei der Nummerierung)

• Beispiel:– bash copy von bis – copy von bis

"von" ist in beiden Fällen der 1. und "bis" immer der zweite Parameter

Der Unterschied zwischen "$*" und "$@" besteht darin, dass bei "$@" dieAnzahl der Parameter immer erhalten bleibt, auch dann, wenn ein Blankzu einem Parameterwert gehört. Z.B. bei 'abc w "x y z" hat "$*"' den Wert"w x y z" (4 Werte) und "$@" den Wert 'w "x y z"' (2 Werte).Wichtig: $@ muss dazu in " eingefasst werden, also: "$@" statt $@

Betriebssysteme – WS 2013/14 – Teil A/bash I 21

Beispiele für weitere Shell-Variablen

Variable Erläuterung

$PWD Name des aktuellen Ordners (working directory)

$HOME Name des Ordners zum Login-Zeitpunkt

$PS1 Symbolische Kommando-Aufforderung in jeder Zeile

$? Returncode des letzten beendeten Programms

$USER Name des Benutzers

$PATH Liste der Ordner, in denen das zu startende Programm gesucht wird

Es gibt viele vordefinierte Shell-Variablen, z.B.:

Neben den aufgeführten Variablen werden noch weitere automatischdurch den Shell definiert.

Betriebssysteme – WS 2013/14 – Teil A/bash I 22

Shell-Variable für Prompt, z.B. $PS1

Prompt-Variable Erläuterung

\d Datum

\h Erster Teil des Rechnernamens (o. Domain)

\H Vollständiger Rechnername

\j Anzahl der Hintergrundjobs

\s Name des Shells

\t Zeit im 24h-Format

\u Benutzername

\w Aktuelles Arbeitsverzeichnis

\! Nummer des Befehls in der History

\$ Bei root #, sonst $

Es sollten nur die hier aufgeführten benutzt werdenVorsicht insbesondere bei Terminalsteuersequenzen, z. B. Farben.

Betriebssysteme – WS 2013/14 – Teil A/bash I 23

Ausgeben von Shell-Variablen (Debugging)

• Mit dem Kommando echo können Texte und damit auch Parameter ausgegeben werden.

• Beispiele:echo "Hallo World!"

echo Hallo World!

echo $0 $1 $2 $3

echo $USER $HOME

echo $bla

• Auflisten der bash-Tätigkeit: set -xDies wieder aufheben: set +xIn einer execution-trace-Zeile beginnend mit einem + wird die Zeile vor der Ausführung ausgegeben.

Betriebssysteme – WS 2013/14 – Teil A/bash I 24

Setzen von Variablen I

• Eine Shell-Variable wird nach folgendem Schema gesetzt:

Variable=Wert

Der Wert sollte, muss aber nicht in " eingeschlossen werden.

• Der Typ des Wertes bestimmt den Typ der Variable bis zur nächsten Zuweisung.

• Beispiele, wobei der Wert eine feste Zeichenkette ist:suffix=".txt"

Datei=/home/blaba/file$suffix

suffix=$suffix:$suffix

Alle Variablen und Parameter sind immer lokal innerhalb des Shells,globale Werte können nur durch Exportieren in das Environment anKindprozesse weitergegeben werden.

Betriebssysteme – WS 2013/14 – Teil A/bash I 25

• Wenn die Ausgabe eines Kommandos den Wert bilden soll, dann muss das Kommando in ` eingeschlossen werden:

Variable=`Kommando Parameter`

• BeispielListe=`cat Datei`

CMD=`ps | tail -1`

• Bitte beachten Sie, dass es drei Quotes gibt:´ ` 'Hier ist das Back-Tick genannte nach links gekippte Quote gemeint.

Setzen von Variablen II

Betriebssysteme – WS 2013/14 – Teil A/bash I 26

Inline-Shell-Kommandos (Auszug) I

Kommando Erläuterung

cd Dir Change Directory nach Dir

echo String Ausgabe einer ZeichenketteFlag -n: keinen Zeilenwechsel am Ende

exit Nr Beendigung des Shells mit Returncode Nr

wait Auf Kind-Prozess warten

exec Bash durch Programm ersetzen

shift Verschieben der Parameter

source File Einlesen von Kommandos aus Datei File

fg (foreground) Hintergrundprozess zum Vordergrundprozess machen

bg (background) Vordergrundprozess zum Hintergrundprozess machen(nach Stoppen mittels CTRL_Z)

Inline-Shell-Kommando = Kommando, das vom Shell ohne Generiereneines Prozesses direkt ausgeführt wird

Betriebssysteme – WS 2013/14 – Teil A/bash I 27

Inline-Shell-Kommandos (Auszug) II

Kommando Erläuterung

pushd Dir Wechsel nach Dir wie cd, Arbeitsordner auf Stack

popd Arbeitsordner vom Stack holen und dort hingehen

kill -x PID Senden des Signals x an Prozess PID

read Var Var... Einlesen einer Zeile von Standard-Input und Schreiben in Variablen Var, wobei das Eingegebene syntaktisch parsiert und auf die Variablen aufgeteilt wird

Betriebssysteme – WS 2013/14 – Teil A/bash I 28

Destruktives Abbrechen von Kommandos

• Im Vordergrund laufendes Programm: CNTRL_c

• Im Hintergrund laufendes Programm:– Mit fg in den Vordergrund holen und dann CNTRL_c

– Mit ps/top die Prozess-ID (PID) heraus finden und mit "kill -9 PID" bearbeiten

Ein im Vordergrund laufendes Programm kann mit CNTRL_zgestoppt werden.Dies ist dann erforderlich, wenn es anschließend mit bg inden Hintergrund geschickt werden soll.

Betriebssysteme – WS 2013/14 – Teil A/bash I 29

Möglichkeiten verschiedener Shells I

• History-MechanismusDie letzten N Kommandos werden vermerkt. Diese werden auch von einer Shell-Sitzung in die nächste gerettet.Der N Wert liegt zwischen 20 und 100.

• Editieren der KommandozeileMit Cursor up bzw. down lassen sich die letzten eingegebenen Zeilen (History) hervorholen und mit Cursor left bzw. right sowie DEL bearbeiten.

• Filenamen-ExpansionEs braucht nur der eindeutige Teil eines Kommandos oder einer Datei geschrieben zu werden, der dann durch Eingabe von TAB expandiert wird. Ist die Eingabe nicht eindeutig, wird gepiept bzw. es werden so viele Zeichen angezeigt, wie sie gemeinsam von mehreren Alternativen sind.

Betriebssysteme – WS 2013/14 – Teil A/bash I 30

History-Mechanismus (Auszug)

Syntax Bedeutung

!! Letztes Kommando ausführen

!$ Letzter Parameter des letzten Kommandos einsetzen

!cmd Letztes Kommando, das mit cmd anfängt, ausführen

Dieser Mechanismus zum Zugriff auf die History wird sinnvoller-weise nur im interaktiven Modus benutzt, also nicht bei derShell-Programmierung.Trotzdem hat bei der Programmierung das ! diese Sonderbedeutung,so dass es eventuell mit einem \! ausgeschaltet werden muss.

Das Abspeichern der History in einer Datei enthält das Sicherheitsloch,bei dem auch Passwörter in Kommandos später erfahren werden können.

Doch Vorsicht: !cmd führt das letzte Kommando mit dessenParametern unmittelbar aus – eine Prüf- oder Editiermöglichkeitgibt es nicht!

Betriebssysteme – WS 2013/14 – Teil A/bash I 31

Möglichkeiten verschiedener Shells II

• Einfacher Makromechanismus, teilweise mit Parameter

alias Makroname=Makrokörper

alias ..="cd .." Durch Eingabe von .. wird ein Ordner höher gegangen

alias .="echo \$PWD"Durch Eingabe von . wird der Name des Arbeitsordners ausgegebenDer \ schaltet die Expansion bei der Definition aus.

unalias Name

Verwerfen des alias Name

Betriebssysteme – WS 2013/14 – Teil A/bash I 32

Möglichkeiten verschiedener Shells III

• Tilde-Mechanismus ("~")– "~XYZ” bedeutet die Home-Directory des Benutzers XYZ– Beispiel:

� "echo ~willie" gibt Namen des Home-Ordners aus� "cd ~willie" geht zum Home-Ordner von willie

(cd ohne Parameter macht dasselbe, wenn es von willie aufgerufen wird)

• Spezielle Kommentarzeile zur Shell-Definition– "#!XYZ”

in der 1. Zeile bedeutet: Starte Programm XYZ mit dieser Datei als 1. Parameter

– "#!/bin/bash” erzwingt also die Benutzung von bash

Es wird empfohlen mit diesem Mechanismus zu arbeiten, um sicher zu stellen, dass wirklich nur der bash benutzt wird.

Betriebssysteme – WS 2013/14 – Teil A/bash I 33

Kontrollkonstrukte I - Syntax

• IF-Konstruktion

if Condition ;

then

.....

fi

• IF-Konstruktion

if Condition ;

then

.....

else

.....

fi

• Condition (2 Formen)test Bedingung

[ Bedingung ]

Bedingung kann u.a. sein:

Dateiabfragen� -e Datei

Frage, ob Datei existiert� -d Datei

Frage, ob Datei Ordner ist� -f Datei

Frage, ob Datei normal ist� -r Datei

Frage, ob Datei lesbar ist

Zeichenketten� String1 = String2

� String1 != String2

Das sind echte []Keine Option

Betriebssysteme – WS 2013/14 – Teil A/bash I 34

Kontrollkonstrukte II - Beispiele für IF

if test "abc" == "$param" ; then echo Parameter hat den Wert abcelse echo Parameter hat den Wert: $paramfi

if [ "abc" == "$param" ] ; then echo Parameter hat den Wert abcelse echo Parameter hat den Wert: $paramfi

Beide Beispielesind gleichwertig.

Es wird abgefragt, ob die Shell-Variable $param den Wert "abc" hat.

Betriebssysteme – WS 2013/14 – Teil A/bash I 35

Kontrollkonstrukte III - Beispiele für IF

if test -e /bin/ls ; then echo es gibt ein ls-Kommandofi

if [ -e $2 ] ; then echo der 2. Parameter enthaelt einen Filenamenfi

In diesem Beispiel wird abgefragt, ob die Datei /bin/ls zugreifbarist (e wie exist, siehe http://www.tldp.org/LDP/abs/html/fto.html).

Hier wird ähnlich geprüft, ob der 2. Parameter ($2) einen Nameneiner zugreifbaren Datei enthält.

Betriebssysteme – WS 2013/14 – Teil A/bash I 36

Hinweise I

• Der bash ist in einigen Fällen etwas launisch, was die Syntax betrifft; hierzu ein paar Tipps:– Vor und hinter den [] sollte jeweils ein Blank stehen, danach ein

Semikolon

– Alle Schlüsselworte (Key words) werden klein geschrieben.

– Die then/else-Blöcke sollten mit mindestens einem Blank nach rechts eingerückt werden.

• Bitte beachten, dass "!" neben der Negation auch die Bedeutung des Zugriffs auf die History hat, so dass bei negierten Bedingungen mit "\" gearbeitet werden muss, z. B.

"if [ \! -e Datei ] ; then "statt "if [ ! -e Datei ] ; then "

Betriebssysteme – WS 2013/14 – Teil A/bash I 37

Hinweise II

• Leere Parameter werden zu nichts expandiert, was Syntax-probleme bei Abfragen schaffen kann. Daher sollte mit " gearbeitet werden, z. B. Abfrage auf leeren Parameter:

if [ "$1" = "" ] ; then

Besser ist jedoch:if [ "a$1" = "a" ] ; then

Betriebssysteme – WS 2013/14 – Teil A/bash I 38

Kontrollkonstrukte IV - For-Schleife

• FOR-Schleife

for Index in Listedo .. $ Index ..done

Wobei Index der Name einer Variablen ohne $ und Liste eine durch Blanks getrennte Liste von Zeichenketten ist. Die Schleife wird mit gesetzter Variablen $Index (jetzt mit $) für jedes Element in der Liste in der angegebenen Reihenfolge von links nach rechts durchlaufen.

Betriebssysteme – WS 2013/14 – Teil A/bash I 39

Beispiele für for I

for Laufvar in a b c do echo $Laufvar done

Schleifenkopf

Schleifenkörper

Der Schleifenkopf gibt den Namen der Laufvariablen sowiedie Werte der Laufvariablen an.

Der Laufvariablen wird für jeden Lauf eine Zeichenkette aus derListe zugewiesen - es wird weder addiert noch subtrahiert.

Die Deklaration der Laufvariable im Kopf muss ohne $ erfolgen,da sie sonst zum Beginn durch nichts ersetzt wird (vor derAusführung werden ja alle $-Variablen ersetzt).

Betriebssysteme – WS 2013/14 – Teil A/bash I 40

Beispiele für for II

for Laufvar in $1 $2 $3 $4 do echo $Laufvar done

Wie häufig werdendie Schleifen mit welchen Wertendurchlaufen?

for Laufvar in "$@" do echo $Laufvar done

for Laufvar in "$*" do echo $Laufvar done

Betriebssysteme – WS 2013/14 – Teil A/bash I 41

Nach dieser Anstrengung etwas Entspannung....