Pętla for „bash like”

Pętla FOR jest najbardziej intuicyjną pętlą jaka jest używana w programowaniu, znajduje się ona niemalże w każdym języku programowania.

Podpowiedź

W Bashu pętla for występuje w dwóch wariacjach:

  1. Pętla for „bash like”
  2. Pętla for „C like”

Na tej stronie skupimy się na pętli „bash like for”.

Podpowiedź

Pętla FOR w stylu Bash jest bardzo przydatna w sytuacjach, gdy chcemy wykonać jakąś operację na wielu elementach jakiegoś zbioru (a nie wiemy ile tych elementów jest) np. chcemy wykonać coś na wszystkich plikach w danym katalogu (lub tylko na tych o określonej nazwie).

Pętla FOR w stylu Basha jest najcześciej używana, jej składnia przedstawia się następująco:

for <zmienna> in <lista> ; do
    zrób_coś
    i_jeszcze_coś
done

Podpowiedź

Człon <lista> może być łańcuchem znakowym, zmienną tablicą lub po prostu listą słów:

Przykład

Sposób #1 Sposób #2
for x in jeden dwa trzy ; do
    echo "To jest $x"
done
for x in jeden dwa trzy
do
    echo "To jest $x"
done

Ostrzeżenie

Czy zauwazyłeś, że w Sposobie #2 nie ma średnika przed słowem kluczowym do ?

Programista Basha ma do wyboru, albo umieścić średnik przed slowem do, albo zacząć słowo do od nowej linii. Nie jest to intuicyjne i jest czasem powodem występowania dziwnych błedów w skrypcie (dlatego zwracam na to uwagę).

Wynik

W obu przypadkach będzie identyczny.

To jest jeden
To jest dwa
To jest trzy

Jak to działa

  1. Zmiennej x przypisana jest lista, która składa się z trzech elementów: jeden, dwa, trzy. Wartośćią zmiennej x staje się po kolei każdy z elementów listy. Następnie na każdym z tych elementów wykonywane jest polecenie: echo "To jest $x".

Przykład z życia wzięty - zamiana nazw plików pisanych DUŻYMI literami na nazwy pisane małymi literami:

#!/bin/bash
for nazwa in * ; do
    mv "$nazwa" `echo "$nazwa" | tr '[A-Z]' '[a-z]'`
done

Za zmianę DUŻYCH liter na małe (i na odwrót) odpowiedzialne jest polecenie tr.

Podpowiedź

Czy wiesz, że zamiast uzycia polecnia tr można użyć operacji na zmiennej?