Logo


Kurs programowania w Bash'u

Nowości       Porady       Księga      

Pętle

Pętla wykonuje jakieś działanie wiele razy. Może to być wyświetlanie, zliczanie bądź numeracja wielu plików, pytanie o hasło dopóki użytkownik nie poda właściwego czy dodawanie do siebie wielu kolejnych liczb.

While

Pętla while wykonuje działanie tylko wtedy gdy warunek jest spełniony.


Składnia:

while warunek_jest_prawdziwy
do
instrukcje
done

czyli:

dopóki warunek_jest_prawdziwy
wykonuj
instrukcje
zakończ

Poniżej przedstawiam prosty skrypt wyświetlający liczby do 1 do 10.

#!/bin/bash

a=1
while [ $a -le 10 ]
# dopoki $a <= 10
do
echo "Biezaca liczba: $a"
# wyswietlenie biezacej zmiennej
a=$[a+1]
# zwiekszenie licznika o 1
done

Instrukcje break i continue służą do sterowania przebiegiem pętli.

- break - powoduje natychmiastowe wyjście poza pętlę
- continue - powoduje natychmiastowe wykonanie następnego przejścia pętli, bez wykonywania dalszych instrukcji

Instrukcja exit powoduje natychmiastowe wyjście ze skryptu.

Pętla nieskończona

Jeśli napiszemy:

while [ 1 ]
do
instrukcje
done

to pętla ta będzie wykonywać się bez końca. Jednak dzięki wstawieniu instrukcji break możemy bez żadnego problemu wyjśc z pętli kiedy jest to potrzebne np:


while [ 1 ]
do
echo "Wpisz koniec aby zakonczyc"
read kod
if [ "$kod" = "koniec" ]
then
break
fi
done

echo "Jestem poza petla !"

Jeśli w przypadku wpisania "wyjscie" chcielibyśmy opuścić całkowicie skrypt - używamy instrukcji exit:


while [ 1 ]
do
echo "Wpisz koniec aby zakonczyc"
read kod
if [ "$kod" = "koniec" ]
then
exit
fi
done

echo "To sie nigdy nie wyswietli"

Jeśli chcemy aby po wpisaniu nieprawidłowego hasła komputer zapytał nas o to jeszcze raz (a nawet więcej) to najwygodniej użyć pętli:

Skrypt pyta o hasło i sprawdza czy jest poprawne
wersja z uzyciem petli while
Aby wyjsc nie podajac hasla trzeba nacisnac klawisze CTRL+C

#!/bin/bash

while [ 1 ]
do
echo -n "Podaj haslo: "
read haslo
if [ "$haslo" = "tajne" ]
then
echo "Prawidlowe haslo"
break
# wyjscie z petli
else
echo "Dostep zabroniony"
continue
# kolejne przejscie petli
fi
done


Jeśli mamy więcej pasujących haseł zamiast:

if [ "$haslo" = "tajne" ]

możemy napisać następująco:

if [ "$haslo" = "tajne" ] || [ "$haslo" = "inne" ]

Znak: || oznacza tzw. sumę logiczną czyli "lub"


Elegancko byłoby dodać opcję wyjścia gdy nie znamy hasła
Użyjemy do tego instrukcji case, służącej do porównywania ze wzorcem

Skrypt MENU
wersja korzystająca z instrukcji case oraz działająca w pętli while

#!/bin/bash
while [ 1 ]
do
clear
# Czysci ekran
echo "Wybierz edytor który chcesz uruchomić"
echo "1 - vi"
echo "2 - mcedit"
echo "3 - pico"
echo "4 - wyjscie"

read nr
case $nr in
"1") vi ; break ;;
"2") mcedit ; break ;;
"3") pico ; break ;;
"4") echo "Wyjscie" ; exit ;;
*) continue ;;
esac
done


Skrypt WYBIERZ EDYTOR
wersja korzystająca z instrukcji select case oraz działająca w pętli while

#!/bin/bash
while [ 1 ]
do
select nr in vi mcedit pico wyjscie
do
case $nr in
"vi") vi ; break ;;
"mcedit") mcedit ; break ;;
"pico") pico ; break ;;
"wyjscie") echo "wyjscie" ; exit ;;
*) continue ;;
esac
break
done
done

Ostatnio dodano

O stronie

Stronę najlepiej oglądać w rozdzielczości 1024x768. Strona optymalizowana dla przeglądarki Mozilla.

Prośba

Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje pisz. Odpiszę na każdy list.

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
Ostatnia aktualizacja: 23 VI 2004.