Środowisko programisty/Bash - skrypty złożone: Różnice pomiędzy wersjami
→for: Pierwsza wersja |
m →for |
||
Linia 34: | Linia 34: | ||
Pętla '''for''' ma dwie formy. Pierwsza forma służy wykonywania bloku instrukcji dla każdej wartości argumentów z listy, a druga forma ma bardziej złożoną składnię i jest zapożyczona języka C. | Pętla '''for''' ma dwie formy. Pierwsza forma służy wykonywania bloku instrukcji dla każdej wartości argumentów z listy, a druga forma ma bardziej złożoną składnię i jest zapożyczona języka C. | ||
==== for dla list === | ==== for dla list ==== | ||
Ta wersja ma postać: | Ta wersja ma postać: |
Wersja z 13:41, 15 sie 2006
Instrukcja wyboru
Pętle
while
Pętla while ma składnię
while warunek; do instrukcje done
Interpreter tak długo wykonuje instrukcje jak długo jest spełniony warunek. Podobnie jak przy instrukcji if, warunek jest poleceniem, które jest uruchamiane przy każdym obrocie pętli. Jeśli status wyjścia jest równy zero, to wykonywane są instrukcje podane w bloku pętli.
Przykład.
zm="" while [ "$zm" != koniec ]; do echo -n "Wpisz coś (słowo 'koniec' aby zakończyć): " read zm echo "Wpisałeś '$zm'" done
until
Pętla until jest bardzo podobna do pętli while:
until warunek; do instrukcje done
Różnica polega na tym, ze pętla jest wykonywana tak długo, jak warunek jest nieprawdziwy (przeciwnie do tego jak ma się to w pętli while). Na przykład pętla z poprzedniego przykładu mogła by wyglądać tak:
until [ "$zm" == koniec ]; do ... done
for
Pętla for ma dwie formy. Pierwsza forma służy wykonywania bloku instrukcji dla każdej wartości argumentów z listy, a druga forma ma bardziej złożoną składnię i jest zapożyczona języka C.
for dla list
Ta wersja ma postać:
for zm in lista; do instrukcje done
gdzie lista jest listą wartości. Listę podajemy w analogiczny sposób jak argumenty poleceniu, czyli na przykład możemy uzywać wzorce nazw plików do podania wielu nazw plików naraz. Instrukcję w bloku są wykonywane dla każdej wartości znajdujące się na liście. W danym obrocie wartość z listy przypisywana jest na zmienną zm.
Przykład:
for f in *; do # * rozwija się do listy wszystkich plików/katalogów znajdujących się w bieżącym katalogu if [ -d "$f" ]; then echo "Katalog '$f'" elif [ -f "$f" ]; then echo "Plik '$f'" else echo "Inny typ '$f'" fi done
Listą może być też ciąg wartości. Na przykład, aby wyświetlić kwadraty wybranych liczb możemy te liczby umieścić na liście:
for i in 1 5 100 99; do echo "Kwadrat $i = $((i * i))" done
Listą może też być wynik innego polecenia:
# Wyszukanie wszystkich tych plików o rozszerzeniu txt, # dla których ostatnia linia zawiera napis "Autor: Jan Kowalski" for f in `find . -name "*.txt" -type f`; do if [ "`tail -1 $f`" == "Autor: Jan Kowalski" ]; then echo "Plik '$f' posiada już podpis" fi done
Można także w liście umieścić argumenty skryptu:
# Wypisywanie argumentów skryptu n=1 for arg in "$@"; do echo "Argument $n: '$arg'" let "n++" done
Listę można utworzyć przez połączenie dwóch innych list, na przykład 0 "$@" jest listą skłądającą się z elementu 0 oraz z wszystkich argumentów skryptu.