for: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 29: Zeile 29:
   done
   done


Verarbeitung einer Liste von Dateien mit Leerzeichen im namen (z. B. "Guter Film 1.mp4").
Verarbeitung einer Liste von Dateien mit Leerzeichen im Namen (z. B. "Guter Film 1.mp4").
* https://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
* https://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html



Version vom 31. Januar 2024, 19:39 Uhr

Der Shell-Befehl for bewirkt eine Schleife, welche die Anzahl auszuführender Schleifendurchläufe einer am Anfang stehenden Wortliste entnimmt.

Syntax

for Name in Wortliste
  do
    Befehlsliste
  done

Verwendung

for i in 1 2 3 4 5
  do
    echo "Das ist Nr. ${i}"
  done

Die mit dem Wert 1 initialisierte Variable i wird mit jedem Schleifendurchlauf um eins erhöht, solange ihr Wert kleiner oder gleich zehn bleibt.

for ((i=1; ${i}<=10; i++))
  do
    echo ${i}
  done

Hinter dem Schlüsselwort "for" steht der Name der Variablen, der ein Element zugeweisen werden soll. Hinter "in" steht die Liste der zu durchlaufenden Elemente, durch Leerzeichen bzw. Tabulatoren oder Zeilenumbrüche getrennt.

for d in $(ls -1 /etc)
  do
    echo ${d}
  done

Verarbeitung einer Liste von Dateien mit Leerzeichen im Namen (z. B. "Guter Film 1.mp4").

$ SAVEIFS=$IFS
$ IFS=$(echo -en "\n\b")
$ for datei in *mp4
    do
    #echo "${datei}"
    ffmpeg -i "${datei}" "${datei}"-NEU.mp4
    done
$ IFS=$SAVEIFS



Folgende Schleife ordnet der Reihe nach Variable die Argumente zu mit denen das Shellskript aufgerufen wurde (also "$1" bis "$n") und führt daraufhin Befehlsliste1 mit Variable als Schleifenparameter aus. Die Anzahl Schleifendurchläufe entsprcht hier der Anzahl übergebener Parameter ("$#").

for Variable
  do
    Befehlsliste1
  done

Beispiel 1

# vi usersearch
#!/bin/sh
# i ist hier der Name der Variablen, die nacheinander
# den Wert der Parameter $1 bis $n übernimmt
for i
  do
    grep $i /etc/passwd
  done
# ./usersearch dummy ftp
dummy:x:500:100:dummy dummy:/home/dummy:/bin/bash
ftp:x:40:2:FTP account:/usr/local/ftp:/bin/bash

Folgende Schleife ordnet der Reihe nach Variable die Elemente von Liste zu und führt daraufhin Befehlsliste1 mit Variable als Schleifenparameter aus. Die Anzahl Schleifendurchläufe entspricht also der Anzahl Elemente von Liste.

for Variable in Liste
  do
    Befehlsliste1
  done

Beispiel 2

Verschieben aller Dateien und Verzeichnisse im aktuellen Verzeichnis nach "~/bin" und gleichzeitiges Anhängen der Endung ".org" an jeden Datei- bzw. Verzeichnisnamen.

$ for i in *; do mv $i ~/bin/$i.org; done

Beispiel 3

Folgende Schleife macht nicht viel anderes als das, was der Befehl "ls /etc/*.conf" ausgeben würde. Der Stern wird durch die Shell zu den einzelnen mit ".conf" endenden Dateinamen expandiert. Dann läuft die Schleife darüber, speichert den Namen in der Laufvariablen und gibt ihn mittels echo aus.

$ for i in /etc/*.conf; do echo $i; done

Beispiel 4

# vi varisvar
#!/bin/sh
for var in ABC BCD CDE
  do
    echo "var is $var"
  done
# ./varisvar
var is ABC
var is BCD
var is CDE

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger For-Schleifewbm Enzyklopädischer Artikel