GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash For Loop – Die praktischste Anleitung

Dieser Artikel setzt die Bash-Artikelserie fort und konzentriert sich auf Iterationen. Schleifen in Bash sind praktisch für jeden Systemadministrator und Programmierer. Schleifenkonstrukte in jeder Skriptsprache ermöglichen es Ihnen, mehrere Befehle auszuführen und immer wieder auszuführen, bis eine bestimmte Situation erreicht ist. Einfach ausgedrückt sind Schleifen nützlich, um sich wiederholende Aufgaben zu automatisieren. Es gibt drei Schleifenkonstrukte in einer Shell-Skriptsprache:

  • Während -Schleife.
  • Für -Schleife.
  • Bis -Schleife.

für -loop ist eine Iterationsanweisung in der Bash-Sprache, die verwendet wird, um eine Reihe von Aktionen auszuführen. Sie können es an einem Shell-Prompt oder innerhalb eines Shell-Skripts selbst verwenden. Es arbeitet mit Listen von Elementen und wiederholt eine Reihe von Befehlen für jedes Element in der Liste.

Grundlegende Syntax

Die grundlegende Syntax ist unten dargestellt:

for item in [LIST]
do
  COMMANDS
done

Wo:

  • LISTE ist eine Reihe von Zeichenfolgen oder Zahlen, die durch Leerzeichen getrennt sind.
  • BEFEHLE ist eine Reihe von Befehlen, die über eine Liste von Elementen ausgeführt werden.
  • fürintun, und fertig sind Schlüsselwörter in der Schleifensyntax.
  • Artikel ist ein Bash-Variablenname, der verwendet wird, um Zugriff auf das Element aus der Liste zu erhalten.

Iteration über Zahlen

Sie können diese Art von Schleife verwenden, um eine Reihe von Zahlen oder eine numerische Liste zu durchlaufen, bis die Liste erschöpft ist.

Im folgenden Beispiel durchlaufen wir die Zahlen 1 2 3 4 5 .

#!/bin/bash
for var in 1 2 3 4 5
do
 echo "Number is $var"
done

Sie sollten die folgende Ausgabe erhalten:

Number is 1
Number is 2
Number is 3
Number is 4
Number is 5

Im obigen Beispiel für -loop nimmt jedes Element aus der Liste und speichert es in der Variablen var , und führt die Befehle zwischen do aus und fertig .

Sie können auch einen Zahlenbereich angeben, indem Sie den Wertebereich definieren.

Im folgenden Beispiel durchlaufen wir alle Zahlen zwischen 10 und 15 .

#!/bin/bash
for var in {10..15}
do
 echo "Number is $var"
done

Sie sollten die folgende Ausgabe erhalten:

Number is 10
Number is 11
Number is 12
Number is 13
Number is 14
Number is 15

Wenn Sie einen bestimmten Bereich innerhalb der Schleife verwenden, können Sie auch ein Inkrement angeben, um jede Zahl zu erhöhen.

Im folgenden Beispiel durchlaufen wir einen Zahlenbereich ab 0 bis 10 und erhöhen Sie jede Zahl um 2 :

#!/bin/bash
for var in {0..10..2}
do
 echo "Number is $var"
done

Sie sollten die folgende Ausgabe erhalten:

Number is 0
Number is 2
Number is 4
Number is 6
Number is 8
Number is 10

Iteration über Strings

Sie können auch Schleifen verwenden, um eine Liste von Zeichenfolgen zu durchlaufen.

Im folgenden Beispiel iterieren wir nacheinander durch eine Liste von Strings:

#!/bin/bash
for month in Jan Feb Mar Apr May Jun
do
 echo "Month is $month"
done

Sie sollten die folgende Ausgabe erhalten:

Month is Jan
Month is Feb
Month is Mar
Month is Apr
Month is May
Month is Jun

Iteration über ein Array

Im folgenden Beispiel durchlaufen wir alle Elemente in CARS Array:

#!/bin/bash
CARS=('Maruti' 'Toyota' 'BMW' 'Tata' 'Datsun')
for car in "${CARS[@]}"; do
  echo "Car: $car"
done

Sie sollten die folgende Ausgabe erhalten:

Car: Maruti
Car: Toyota
Car: BMW
Car: Tata
Car: Datsun

Im folgenden Beispiel für -loops iteriert alle Elemente in einem Wochentags-Array.

#!/bin/bash
i=1
weekdays="Mon Tue Wed Thu Fri"
for day in $weekdays
do
 echo "Weekday $((i++)): $day"
done

Sie sollten die folgende Ausgabe erhalten:

Weekday 1: Mon
Weekday 2: Tue
Weekday 3: Wed
Weekday 4: Thu
Weekday 5: Fri

Endlosschleifen

Mit den leeren Ausdrücken können Sie eine Endlosschleife erstellen.

#!/bin/bash
for (( ; ; ))
do
   echo "Infinite Loops [ press CTRL+C to stop]"
done

Sie sollten die folgende Ausgabe erhalten:

Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]
Infinite Loops [ press CTRL+C to stop]

Sie können STRG+C drücken um die Endlosschleife zu stoppen.

Break-Anweisung

Sie können die Unterbrechung verwenden Anweisung, die Schleife früher zu verlassen.

Im folgenden Beispiel durchlaufen wir Zahlen zwischen 20 bis 30 . Wir verwenden if -Anweisung zum Verlassen der Schleife, sobald das aktuelle iterierte Element gleich 27 ist .

#!/bin/bash
for var in {20..30}
do
  if [[ "$var" == '27' ]]; then
    break
  fi
  echo "Number is: $var"
done

Sie sollten die folgende Ausgabe erhalten:

Number is: 20
Number is: 21
Number is: 22
Number is: 23
Number is: 24
Number is: 25
Number is: 26

Continue-Anweisung

Die Continue-Anweisung wird innerhalb von Schleifen verwendet. Wenn innerhalb einer Schleife auf eine Continue-Anweisung gestoßen wird, springt die Ablaufsteuerung zum Anfang der Schleife für die nächste Iteration und überspringt die Ausführung von Anweisungen innerhalb des Hauptteils der Schleife für die aktuelle Iteration.

Im folgenden Beispiel durchlaufen wir Zahlen zwischen 10 bis 15 . Wenn das aktuelle iterierte Element gleich 13 ist , beendet die Continue-Anweisung die Ausführung, kehrt zum Anfang der Schleife zurück und fährt mit der nächsten Iteration fort:

#!/bin/bash
for var in {10..15}
do
  if [[ "$var" == '13' ]]; then
    continue
  fi
  echo "Number is: $var"
done

Sie sollten die folgende Ausgabe erhalten:

Number is: 10
Number is: 11
Number is: 12
Number is: 14
Number is: 15

Erweiterte Beispiele

Dateierweiterung umbenennen

Dieser Abschnitt zeigt Ihnen, wie Sie die Erweiterung aller Dateien im Verzeichnis ändern.

Das folgende Beispiel ändert die Erweiterung aller Dateien im aktuellen Verzeichnis von .php zu .html .

#!/bin/bash
for file in *.php; do
  mv "$file" "${file%.php}.html"
  echo $file is renamed to "${file%.php}.html"
done

Sie sollten die folgende Ausgabe erhalten:

admin.php is converted to admin.html
ajax.php is converted to ajax.html
composer.php is converted to composer.html
index.php is converted to index.html
login.php is converted to login.html

Zeige die Anzahl der Male hintereinander an

In diesem Beispiel zeigen wir alle 2 Sekunden die aktuelle Systemzeit an.

#!/bin/bash
for now in {1..5}
do
  date
  sleep 2
done

Sie sollten die folgende Ausgabe erhalten:

Fri Dec  4 12:19:10 IST 2020
Fri Dec  4 12:19:12 IST 2020
Fri Dec  4 12:19:14 IST 2020
Fri Dec  4 12:19:16 IST 2020
Fri Dec  4 12:19:18 IST 2020

Mehrere Tar-Dateien entpacken

Sie können dieselbe Aktion für alle Dateien mit derselben Erweiterung ausführen. Lassen Sie uns zum Beispiel mehrere Dateien im Verzeichnis entpacken.

Das folgende Beispiel extrahiert alle TAR-Dateien, die sich im aktuellen Verzeichnis befinden:

#!/bin/bash
for var in *.tar
do
  echo "Processing $var..."
  tar -xf "$var"
done

Mehrere Server anpingen

Sie können einen Schleifenausdruck verwenden, um mehrere Server aus der Liste anzupingen.

Erstellen Sie zuerst eine Datei namens domain.txt und fügen Sie alle Server zu dieser Datei hinzu, wie unten gezeigt:

cat domain.txt

Fügen Sie die folgenden Zeilen hinzu:

google.com
facebook.com
yahoo.com
wordpress.com

Lassen Sie uns nun alle in der Datei domain.txt aufgelisteten Server wie unten gezeigt anpingen:

#!/bin/bash
for var in $(cat domain.txt)
do
  ping -c 1 "$var"
done

Sie sollten die folgende Ausgabe erhalten:

PING google.com (216.58.203.14) 56(84) bytes of data.
64 bytes from hkg12s09-in-f14.1e100.net (216.58.203.14): icmp_seq=1 ttl=117 time=119 ms
 
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 119.469/119.469/119.469/0.000 ms
PING facebook.com (69.171.250.35) 56(84) bytes of data.
64 bytes from edge-star-mini-shv-01-any2.facebook.com (69.171.250.35): icmp_seq=1 ttl=56 time=43.9 ms
 
--- facebook.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 43.994/43.994/43.994/0.000 ms
PING yahoo.com (74.6.231.21) 56(84) bytes of data.
64 bytes from media-router-fp74.prod.media.vip.ne1.yahoo.com (74.6.231.21): icmp_seq=1 ttl=51 time=371 ms
 
--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 371.135/371.135/371.135/0.000 ms
PING wordpress.com (192.0.78.9) 56(84) bytes of data.
64 bytes from 192.0.78.9: icmp_seq=1 ttl=56 time=40.1 ms
 
--- wordpress.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 40.162/40.162/40.162/0.000 ms

Dateien mit Bedingungen auflisten

Hier ist ein Beispiel, das zeigt, wie alle Dateien in einem bestimmten Verzeichnis aufgelistet werden, die bestimmte Bedingungen erfüllen.

Listen Sie beispielsweise alle .conf auf Dateien in /etc Verzeichnis, das entweder mit a beginnt , bc oder d Buchstaben:

#!/bin/bash
i=1
for file in /etc/[abcd]*.conf
do
  echo "File $((i++)) : $file"
done

Sie sollten die Liste aller Dateien in der folgenden Ausgabe erhalten:

File 1 : /etc/adduser.conf
File 2 : /etc/apg.conf
File 3 : /etc/blkid.conf
File 4 : /etc/brltty.conf
File 5 : /etc/ca-certificates.conf
File 6 : /etc/colord.conf
File 7 : /etc/debconf.conf
File 8 : /etc/deluser.conf

Zusammenfassung

In diesem Artikel haben wir verschiedene Beispiele für die Verwendung von Bash für behandelt -Schleifen. Wir hoffen, dass Sie jetzt eine Vorstellung davon haben, wie Sie Ihre eigenen täglichen Aufgaben automatisieren können. Wenn der Artikel hilfreich war, helfen Sie uns bitte, ihn in der Welt zu verbreiten.


Linux
  1. Eine Anleitung zum Linux-Terminal für Anfänger

  2. Bash For Loop Guide und Beispiele

  3. Bleiben Sie auf dem Laufenden – Beispiele für Bash-For-, While- und Until-Loops

  4. Bash für Schleifenbeispiele

  5. So erhalten Sie den Exit-Status in einer Bash-Schleife

Die Liste nützlicher Bash-Tastaturkürzel

Bash-Scripting – For-Schleife mit Beispielen erklärt

Ein praktischer Leitfaden für den Chroot-Befehl unter Linux

Die for-Schleife in Shell-Skripten verstehen

Der apt-Befehl – ​​Ein praktischer Gebrauchsleitfaden

Die Bash FOR-Schleife erklärt und vereinfacht