Logo


Kurs programowania w Bash'u

Nowości       Porady       Księga      

Pętla for

Pętla for wykonuje to samo działanie dla wielu liczb, wyrazów, plików itp.

Istnieją dwie wersje pętli for. Pierwsza jest bardzo podobna do tej spotykanej w innych językach programowania:

Składnia:

for (( zmienna = 0 ; zmienna <= 5; zmienna++ ))
# Wykonuj petle liczac od 0 do 5
do
# wykonaj
...
# jakieś instrukcje
done
# koniec pętli

Wyświetlenie liczb 1-5:

#!/bin/bash

for (( i = 0 ; i <= 5; i++ ))
do
echo "Witam $i raz"
done

wyświetli:

Witam 0 raz
Witam 1 raz
Witam 2 raz
Witam 3 raz
Witam 4 raz
Witam 5 raz

Druga wersja jest szczególnie ukierunkowana na działania na plikach

Składnia:

for zmienna in lista
# dla każdej wartości znajdującej się na liście
do
# wykonaj
...
# jakieś instrukcje
done
# koniec pętli

Wyświetlenie liczb 1-5:

#!/bin/bash
for nr in 1 2 3 4 5
do
echo $nr
# wyświetl bieżącą zmienną
done
echo "Petla zakonczona"

Jeśli chcielibyśmu odzielić liczby wynikowe spacjami (a nie znakami nowego wiersza), możemy to zrobić dopisując parametr -n do polecenia echo:

#!/bin/bash
for motor in 1 2 3 4 5
do
echo -n $nr
echo -n " "
done
echo
# wyswietlenie znaku nowego wiersza

Zmienne na liście mogą być też łańcuchami:

Wyświetlenie marek motocykli

#!/bin/bash
for motor in Honda Yamaha Suzuki Kawasaki Harley
do
echo $motor
# wyświetl bieżącą zmienną
done

Jeśli chcielibyśmy odzielić spacją wyniki, można to zrobić tak jak poniżej.

Wyświetlenie plików znajdujących się w bieżącym katalogu przy pomocy pętli for

#!/bin/bash
for plik in *
# gwiazdka oznacza wszystkie pliki w bieżącym katalogu
# mozna zapisać dowolną inną ścieżkę
do
echo $plik
done

Wyświetlenie plików znajdujących się w /etc/* przy pomocy pętli for


#!/bin/bash
for plik in /etc/*
do
echo $plik
done

Skrypt zmienia prawa dostępu plikow z rozszerzeniem *.exe znajdujących się w bieżącym katalogu przy pomocy pętli for

#!/bin/bash
for plik in *.exe
do
echo -e "Zmieniam prawa dostępu do pliku\t $plik"
chmod 755 $plik
done

Za pomocą pętli for możemy dokonać dowolnej operacji na każdym z plików:

Skrypt łączący w jedną całość pliki *.txt w bieżącym katalogu

#!/bin/bash
for plik in `ls *.txt`
# lub $(ls *.txt)
do
cat $plik >> calosc.txt
done

Wyświetlenie plików z podaniem kryteriów wyszukiwania przy pomocy pętli for

#!/bin/bash
echo "Podaj sciezkę dostępu do katalogu(np. /etc)"
read sciezka
echo "Kryteria wyswietlania(np. *, [ao]la itp.)"
read kryteria
for plik in $sciezka/$kryteria
do
echo $plik
liczba_plikow=$[ liczba_plikow+ 1]
# zliczanie wyświetlonych plików
done

echo
echo "Liczba wyświetlonych plików: $liczba_plikow"

Skrypt łączący w jedną całość pliki *.txt w bieżącym katalogu
wersja rozszerzona

#!/bin/bash

# jesli istnieje plik calosc.txt zapytaj co robic
if [ -f calosc.txt ]; then
echo "Plik calosc.txt juz istnieje. Usunac jego zawartosc? (T/N)"
while [ 1 ]
do
read usun
if [ "$usun" = "T" ] || [ "$usun" = "t" ] ;then
rm calosc.txt
break
elif [ "$usun" = "N" ] || [ "$usun" = "n" ] ;then
break
# przejdz dalej (czyli dopisze do pliku)
else
echo "Nieprawidlowy wybor. Wcisnij T lub N."
continue
# wybierz ponownie
fi
done
fi

ilosc=0

for plik in `ls *.txt`
# lub $(ls *.txt)
do
# jesli wlasnie przetawarzany plik to plik wynikowy
# bo tez ma rozszerzenie *.txt a wiec program bierze go pod uwage,
# opusc go (przejdz do nastepnego pliku w petli)
# inaczej dodalby zawartosc pliku wynikowego do jego samego

if [ "$plik" = "calosc.txt" ];then continue; fi

echo -e "\nNazwa pliku: $plik" >> calosc.txt
# dodanie nazwy pliku
echo -e "----zawartosc-------\n" >> calosc.txt
cat $plik >> calosc.txt
let ilosc=ilosc+1
# licznik plikow
done

echo -e "\nDodano zawartosc $ilosc plikow\n"

echo -n "Wyswietlic wynikowy plik? (T) "
read pokaz
if [ "$pokaz" = "T" ] || [ "$pokaz" = "t" ]
then
echo -e "\nZawartosc pliku calosc.txt:\n"
cat calosc.txt
fi

Ostatnio dodano



Prośba

Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje pisz na adres: devopsproject.pl@gmail.com

Subskrypcja

Jeśli chcesz być informowany o nowościach na stronie wpisz tu swój e-mail i kliknij Wyślij.

O mnie

O autorze
Autorem kursu jest Mariusz Majerowski
2004-2017.