10 przykładów Bash For Loop z objaśnieniami

Pętla for to fundament każdego języka programowania. Umożliwia ona programom wykonywanie iteracji, czyli powtarzanie danego fragmentu kodu, po określonej liczbie elementów.

Przykładowo, chcąc przeanalizować listę lub tablicę złożoną z 'n’ elementów, niezbędne jest wykorzystanie pętli for. Rozważmy prosty przykład:

1 Fioletowy 2 Indygo 3 Niebieski 4 Zielony Tęczowy Stół

Aby móc operować na elementach przedstawionych w powyższej tabeli, czyli przejrzeć je lub wykonać na nich jakieś operacje, konieczne jest zastosowanie pętli for.

Pętla For w Bash

W skryptach bash składnia pętli for prezentuje się następująco:

#!/bin/bash

for ZMIENNA in 1 2 3 4 5.....N

do

 AKCJA 1

 AKCJA 2

 .....

done

Pętla for w Bash jest dość intuicyjna. Pierwsza linia, czyli #!/bin/bash, informuje, że mamy do czynienia ze skryptem bash. ZMIENNA reprezentuje tymczasową zmienną używaną w procesie iteracji. N oznacza maksymalną liczbę powtórzeń pętli. Słowa kluczowe 'do’ i 'done’ odpowiednio inicjują i kończą działanie pętli. Akcje to polecenia, które są wykonywane w obrębie pętli.

Pętlę for w Bash możemy stosować z różnymi rodzajami danych, takimi jak listy, łańcuchy znaków, liczby całkowite i tablice. W dalszej części tego artykułu przedstawimy kilka typowych przykładów użycia pętli for w Bash.

Przykłady te można uruchomić bezpośrednio w terminalu bash, lub zapisać je w pliku, a następnie wywołać za pomocą polecenia 'bash nazwa_pliku.sh’.

Odczytywanie listy statycznej

Weźmy pod uwagę następującą listę: rainbowColorList = Fioletowy, Indygo, Niebieski, Zielony, Żółty, Pomarańczowy, Czerwony

Aby wypisać powyższą listę łańcuchów znaków za pomocą pętli for w Bash, możemy zrobić to w następujący sposób:

#! /bin/sh

# Definicja listy

rainbowColorList=Fioletowy,Indygo,Niebieski,Zielony,Żółty,Pomarańczowy,Czerwony

# Separator przecinkowy za pomocą //,/

for kolory in ${rainbowColorList//,/ }

do

   echo $kolory

done

Efektem działania powyższego kodu będzie wyświetlenie listy, gdzie każdy element będzie znajdował się w nowej linii.

#Wynik

Fioletowy
Indygo
Niebieski
Zielony
Żółty
Pomarańczowy
Czerwony

Odczytywanie tablicy

Składnia deklarowania tablicy jest odmienna. Należy użyć nawiasów dla każdego z elementów (łańcucha znaków).

rainbowArray=("Fioletowy" "Indygo" "Niebieski" "Zielony" "Żółty" "Pomarańczowy" "Czerwony")

for kolory in "${rainbowArray[@]}"; do

     echo "Lubię $kolory"

done

Znak „@” jest wykorzystywany do iteracji po wszystkich elementach tablicy.

#Wynik

Lubię Fioletowy
Lubię Indygo
Lubię Niebieski
Lubię Zielony
Lubię Żółty
Lubię Pomarańczowy
Lubię Czerwony

Możemy również użyć pętli for, aby wyświetlić zarówno indeksy, jak i elementy tablicy.

#Drukowanie z indeksem

rainbowArray=("Fioletowy" "Indygo" "Niebieski" "Zielony" "Żółty" "Pomarańczowy" "Czerwony")

for i in "${!rainbowArray[@]}";

do

  echo "Kolor na indeksie " $i " : " "${rainbowArray[$i]}"

  i=$((i+1));

done
#Wynik

Kolor na indeksie 0 : Fioletowy
Kolor na indeksie 1 : Indygo
Kolor na indeksie 2 : Niebieski
Kolor na indeksie 3 : Zielony
Kolor na indeksie 4 : Żółty
Kolor na indeksie 5 : Pomarańczowy
Kolor na indeksie 6 : Czerwony

Zauważmy, że używamy ’!’ w pętli, aby uzyskać indeks elementu.

Iterowanie po zakresie liczb

Pętlę for w Bash możemy również wykorzystać do iterowania po określonym zakresie liczb.

#Iterowanie po zakresie liczb

echo "Odliczanie rozpoczyna się..."

for N in {10..0}

do

    echo "$N"

done

’..’ oznacza zakres liczb.

#Wynik

10
9
8
7
6
5
4
3
2
1
0

Możemy także pominąć niektóre liczby z danego zakresu, definiując krok.

W poniższym przykładzie pomijamy liczenie co 3.

#Iterowanie z pomijaniem liczb

echo "Odliczanie rozpoczyna się..."

for N in {30..0..3}

do

    echo "$N"

done

Powyższy program zaczyna od 30 jako pierwszej liczby i odlicza do 0. Ostatni parametr w pętli for, czyli „3”, określa o ile liczb ma być pomijane w każdym kroku.

#Wynik

30
27
24
21
18
15
12
9
6
3
0

Łańcuchy znaków i pojedyncze znaki

Za pomocą pętli for w Bash możemy wykonywać różnorodne interesujące operacje na łańcuchach znaków.

Przykładowo, możemy odczytać każdy znak łańcucha za pomocą operatora 'seq’ wewnątrz pętli for:

#Odczyt znaków łańcucha

mojslowo="witaj"

for i in $(seq 1 ${#mojslowo})

do

 echo "${mojslowo:i-1:1}"

done

Należy zauważyć, że 'seq’ powinno zaczynać się od 1, aby najpierw otrzymać pierwszy znak.

#Wynik

w
i
t
a
j

Możemy również wypisać słowa, które są oddzielone spacjami, jedno po drugim:

#Odczyt każdego słowa z zdania

mojezdanie="Witamy na newsblog.pl. Centrum dla wszystkich techies"

for slowo in $mojezdanie; do

    echo $slowo

done
#Wynik

Witamy
na
newsblog.pl.
Centrum
dla
wszystkich
techies

Wyrażenia

Podobnie jak w innych językach programowania, na przykład Java, możemy umieszczać wyrażenia wewnątrz pętli for w Bash.

for (( zmienna=10; zmienna>=0; zmienna-- ))

do 

  echo "Odliczanie...$zmienna"

done
#Wynik

Odliczanie...10
Odliczanie...9
Odliczanie...8
Odliczanie...7
Odliczanie...6
Odliczanie...5
Odliczanie...4
Odliczanie...3
Odliczanie...2
Odliczanie...1
Odliczanie...0

Odczytywanie argumentów z linii poleceń

Aby odczytać argumenty z linii poleceń, wykorzystujemy polecenie 'read’. W poniższym przykładzie pobierzemy od użytkownika kilka liczb, a następnie wypiszemy ich sumę, używając do tego pętli for w Bash. Do przechowywania sumy użyjemy zmiennej 'suma’.

read -a tablica -p "Wprowadź liczby, które chcesz dodać:"

suma=0

for i in ${tablica[@]}; do

  let suma+=$i

done

echo "Suma liczb wynosi: $suma"

Oto przykładowy wynik:

#Wynik

Wprowadź liczby, które chcesz dodać: 3 4 66
Suma liczb wynosi: 73

Znajdowanie liczb nieparzystych i parzystych

Aby znaleźć liczby nieparzyste i parzyste w zakresie od 1 do 10 (lub dowolnej liczby N), powinniśmy użyć warunku if w połączeniu z pętlą for w Bash. Aby określić, czy liczba jest parzysta, podzielimy ją przez 2, a jeśli reszta z dzielenia wynosi 0, zaklasyfikujemy ją jako parzystą, w przeciwnym wypadku – jako nieparzystą.

#Deklaracja list, w których zostaną umieszczone liczby parzyste i nieparzyste

parzyste=""

nieparzyste=""

for (( i=1; i<=10; i++ ))

do

reszta=$(( $i % 2 ))

if [ $reszta -eq 0 ]; then

 parzyste="$parzyste $i "

else

 nieparzyste="$nieparzyste $i "

fi

done

echo "Liczby parzyste to: "$parzyste

echo "Liczby nieparzyste to: "$nieparzyste

Zauważmy, że w powyższym przykładzie podajemy zakres jako 10. Możemy zmienić tę liczbę, aby uzyskać liczby parzyste i nieparzyste z dowolnego zakresu. Możemy także spróbować odczytać liczbę od użytkownika za pomocą polecenia „read”, które poznaliśmy w poprzedniej sekcji.

#Wynik

Liczby parzyste to: 2 4 6 8 10
Liczby nieparzyste to: 1 3 5 7 9

Pętla nieskończona

Pętla nieskończona, czyli taka która nigdy się nie kończy, wymaga zatrzymania programu za pomocą Ctrl+C. Taką pętlę możemy łatwo stworzyć, używając ’; ;’ operatora wewnątrz pętli for:

for (( ; ; ))

do

  echo "Witamy na newsblog.pl"

done
#Wynik

Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
Witamy na newsblog.pl
^C
$

Instrukcja przerywająca (break)

Instrukcja break służy do natychmiastowego zakończenia pętli, gdy spełniony jest określony warunek.

for kolor in Fioletowy Indygo Niebieski Zielony Żółty Pomarańczowy Czerwony

do

  if [[ "$kolor" == 'Zielony' ]]; then

    break

  fi

  echo "Szukam koloru Zielony, aktualny kolor to $kolor"

done

echo "Znalazłem mój kolor $kolor"

W tym przykładzie szukamy koloru zielonego. Pętla for przegląda kolejne kolory i po napotkaniu koloru zielonego program wychodzi z pętli dzięki instrukcji break.

#Wynik

Szukam koloru Zielony, aktualny kolor to Fioletowy
Szukam koloru Zielony, aktualny kolor to Indygo
Szukam koloru Zielony, aktualny kolor to Niebieski
Znalazłem mój kolor Zielony

Instrukcja kontynuująca (continue)

Instrukcja continue służy do pominięcia aktualnej iteracji pętli i przejścia do następnej, na podstawie zdefiniowanego warunku. Przykładowo, jeśli nie chcemy drukować koloru 'Zielony’ z naszego poprzedniego programu, możemy użyć instrukcji continue, a wszystkie inne kolory, z wyjątkiem zielonego, zostaną wyświetlone.

for kolor in Fioletowy Indygo Niebieski Zielony Żółty Pomarańczowy Czerwony

do

  if [[ "$kolor" == 'Zielony' ]]; then

    continue

  fi

  echo "$kolor"

done
#Wynik

Fioletowy
Indygo
Niebieski
Żółty
Pomarańczowy
Czerwony

Podsumowanie

Omówiliśmy najczęstsze zastosowania pętli for w Bash, wykorzystując łańcuchy znaków, liczby całkowite, tablice i listy. Jeśli uczysz się systemu Linux, a posiadasz komputer z systemem Windows 10, możesz skorzystać z funkcji WSL i zainstalować system Linux na komputerze z systemem Windows.

Następnie możesz używać terminala Linux w sposób zbliżony do CMD.

Dodatkowo, możesz sprawdzić, jak uruchamiać skrypty bash za pomocą Pythona.


newsblog.pl