Pętla for jest jedną z tych rzeczy, która stanowi o potędze Basha - bo nie w każdym języku można iterować po wynikach jakichś komend czy nawet po liniach w pliku.
- Iterować
- Wykonywać polecenia zawarte wewnątrz pętli, na każdym składniku listy (argumencie).
W Bashu istnieją jej dwie odmiany:
Pętla for podobna do języka C (C like for)
Składnia
for ((<inicjacja_zmiennej>; <warunek_zakonczenia>; <zwiększanie/zmniejszanie>)) ; do
...polecenia w pętli...
done
Pętla ta służy do operacji gdzie znamy ilość elementów z których musimy skorzytać lub do policzenia czegoś, wygenerowania liczb:
Przykład
#!/bin/sh
for (( i=1; $i <= 10; i++ )) ; do
echo " Iteracja nr: $i"
done
Uwaga:
Ta wersja pętli for nie jest dostępna we wszystkich implementacjach Basha można ją częściowo korzystając z polecenia seq.
Przykład
#!/bin/sh
for i in `seq 1 10`
do
echo "Iteracja nr: $i"
done
Oba skrypty wyprodukują identyczne wyjście:
Iteracja nr: 1
Iteracja nr: 2
Iteracja nr: 3
…
Iteracja nr: 10
Bardziej bashowa
Inny typ pętli for jest znacznie częściej uzywany, jego składnia przedstawia się następująco:
Składnia
for <zmienna> in <lista> ; do
zrób_coś
i_jeszcze_coś
done
<lista> może być łańcuchem znakowym, tablicą lub po prostu listą słów:
Przykład
for x in jeden dwa trzy ; do
echo "To jest $x"
done
Wynik:
To jest jeden
To jest dwa
To jest trzy
Jak to działa:
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 element listy, na wszystkich wykonywane jest polecenie:
echo "To jest $x".
Pętla for jest bardzo przydatna w sytuacjach, gdy chcemy wykonać jakąś operację na określonym zbiorze plików np na wszystkich plikach w danym katalogu (lub tylko na tych o określonej nazwie).
Przykład - 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.





