Articles

The Geek Diary

Es gibt viele Male in einem Shell-Skript, wenn Sie wiederholt eine Anweisung oder eine Gruppe von Anweisungen ausführen möchten, bis eine bestimmte Bedingung auftritt. Darüber hinaus möchten Sie möglicherweise eine Gruppe von Anweisungen für jedes Element in einer bestimmten Liste ausführen. Die Shell stellt drei Schleifenkonstrukte für diese Situationen bereit: die Konstrukte for, while und until.

Mit der for-Schleife können Sie eine Liste von Werten angeben. Für jeden Wert in der Liste wird eine Gruppe von Anweisungen ausgeführt.

Syntax der For-Schleife

Die for-Schleife in der Shell verwendet eine Liste von Wörtern (Zeichenfolgen) als Argument. Die Anzahl der Wörter in der Liste bestimmt, wie oft die Anweisungen in der for-Schleife ausgeführt werden. Die Syntax für die for-Schleife lautet:

for variable in element1 element2 element3 do commands done

wobei:

  • Variable: Es ist ein beliebiger Variablenname.
  • Elemente (argument_list): Es kann eine beliebige Liste von Wörtern, Zeichenfolgen oder Zahlen sein, und es kann literal sein oder mit einem Shell-Befehl oder Shell-Befehlszeilen-Metazeichen generiert werden.
  • Befehle: Die Befehle können beliebige Betriebssystembefehle, ein Anwenderprogramm, ein Shell-Skript oder eine Shell-Anweisung sein, die eine Liste zurückgibt (erzeugt).

Der Wert der Variablen var wird beim ersten Durchlaufen der Schleife auf das erste Wort in der Liste gesetzt. Beim zweiten Durchlaufen der Schleife wird der Wert auf das zweite Wort in der Liste usw. gesetzt. Die Schleife wird beendet, wenn var wiederum jeden der Werte aus der Argumentliste übernommen hat und keine verbleibenden Argumente vorhanden sind.

Argumentliste der for-Schleife

Die Argumentliste in einer for-Schleife kann eine beliebige Liste von Wörtern, Zeichenfolgen oder Zahlen sein. Generieren Sie die Argumentliste mit einer der folgenden Methoden (oder einer Kombination von Methoden):

  • Verwenden Sie eine explizite Liste
  • Verwenden Sie den Inhalt einer Variablen
  • Verwenden Sie Befehlszeilenargumente
  • Verwenden Sie Befehlssubstitution
  • Verwenden Sie Dateinamen in Befehlssubstitution

Beispiel 1: For-Schleife Verwenden einer expliziten Liste zum Angeben von Argumenten

Wenn Argumente für eine for-Schleife aufgeführt sind, werden sie als explizite Liste. Eine explizite Liste ist die einfachste Form einer Argumentliste. Die Schleife wird für jedes Listenelement einmal ausgeführt. Das folgende Beispiel ist eine for-Schleife, die eine explizite Liste von Elementen verwendet:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

Die Ausgabe dieser for-Schleife lautet:

Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi

Beispiel 2: For-Schleife mit variablem Inhalt zur Angabe von Argumenten

Wenn die Argumente in einer Variablen enthalten sind und die Anweisung ausgeführt wird, wird variable Inhalte werden ersetzt. Im folgenden Beispiel wird der an der Eingabeaufforderung eingegebene Text zum Wert der Variablen INPUT . Diese Variable repräsentiert die Argumentliste des for-Konstrukts. Daher wird der Text in der EINGABE basierend auf Leerzeichen in Wörter oder Token unterteilt.

$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done

$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.

Beispiel 3: For-Schleife Verwenden von Befehlszeilenargumenten zur Angabe von Argumenten

Im folgenden Beispiel wird der in der Befehlszeile eingegebene Text zur Argumentliste des for-Konstrukts. Daher wird der Befehlszeilentext basierend auf Leerzeichen in Wörter oder Token unterteilt.

$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done

$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.

Beispiel 4 : For-Schleife mit Befehlsersetzung zur Angabe von Argumenten

Die Syntax für die Befehlsersetzung in einer Bash-Shell lautet:

for var in `cmd_sub`

Im folgenden Beispiel wird die Ausgabe des Befehls cat als Argumentliste verwendet.

$ cat fruit1 apple orange banana peachkiwi

$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done

$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi

Wenn die Datei, die die Liste enthielt, das folgende Format hatte, was ist das Ergebnis der for-Schleife.

$ cat fruit3Apple Orange Banana Peach Kiwi

$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done

$ ./ex5.shApple Orange Banana Peach Kiwi

Im obigen Beispiel ändern sich die Ergebnisse nicht. Die IFS-Variable ist ein beliebiger Leerraum, sodass sowohl ein Wagenrücklauf als auch ein Leerzeichen oder Tabulator jedes Feld in der Datei trennen.

Beispiel 5: For-Schleife, die Dateinamen in der Befehlsersetzung verwendet, um Argumente anzugeben

Einige Befehle geben Dateinamen und Verzeichnisnamen als Ausgabe an. Im folgenden Beispiel ersetzt die Shell die Ausgabe des Befehls ls /etc/p*(/etc/passwd/etc/profileand so on) als Argumentliste für die for-Schleife.

$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done

# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....