Pętla Bash „For”: samouczek i przykłady

Bash (Bourne Again Shell) to wiersz poleceń powłoki i język skryptowy w systemach operacyjnych GNU/Linux. Jest to domyślna powłoka dla większości dystrybucji Linuksa.

Podobnie jak większość języków skryptowych, Bash zapewnia składnię pętli do wielokrotnego powtarzania podobnych zadań. W tym artykule dowiemy się, jak korzystać z dla pętla w Bash.

Wstęp

Typowy skrypt Bash zawiera szereg poleceń, które należy wykonać jedno po drugim. Zmienne mogą służyć do przechowywania ciągów znaków, wartości indeksu liczb całkowitych, wyników polecenia itp. Pętle są wymagane, gdy użytkownik chce wielokrotnie wykonać określone polecenie. Jest to szczególnie przydatne, gdy dane wyjściowe jednego polecenia mają postać listy, a po każdym wyniku na liście ma zostać uruchomione drugie polecenie.

Ogólna składnia

Ogólna składnia dla dla pętla w Bash to:

bo w zrobić ... ... gotowe

Tutaj jest zmienną Bash, która musi być poprawną nazwą zmiennej powłoki systemu Linux, tj. nazwa zawiera kombinację liter (az, AZ), cyfr (0-9) i podkreślenia (_) i musi zaczynać się od litery lub podkreślenie.

ten jest albo niestandardowym zakresem indeksów całkowitych, które będą zapętlone, albo niestandardową listą liczb całkowitych lub łańcuchów. Może równieżzawieraćinne polecenie Linuksa, jednak dane wyjściowe takiego polecenia musząbyćoddzielone spacjami lub znakami nowej linii tzn. przetworzone przez Basha na listę (Lista w Bashu jest w zasadzie zbiorem wartości oddzielonych spacją lub znakiem nowej linii ).

Każde polecenie (polecenia), które ma zostać wykonane, musi być umieszczone wewnątrz zrobić..gotowe blok.

Zobaczmy kilka prostych przykładów.

Pętla na zakresie wartości całkowitych: Poniższy kod tworzy katalogi o nazwach dir1, dir2, dir3 aż do dir10.

for i in {1..10} wykonaj mkdir dir$i done

Zapętlenie na liście stałych wartości: Poniższy kod drukuje każdy ciąg lub liczbę całkowitą z podanej stałej listy.

dla mnie w Cześć 1 2 3 Pa! wykonaj echo $i gotowe

Pętla na wyjściu polecenia: Poniższy kod zapętla się na wyjściu ls i wypisuje nazwę każdego pliku w podanym formacie.

for i w `ls` wykonaj echo "Nazwa pliku to $i" gotowe

Składnia oparta na wyrażeniach

Składnia oparta na wyrażeniach podobna do języka programowania C jest również możliwa w Bash:

for ((Wyrażenie 1; Wyrażenie 2; Wyrażenie 3)) wykonaj ... ... gotowe

Tutaj, Wyrażenie 1 jest inicjalizacją zmiennych indeksujących. Wyrażenie 2 jest warunkiem wyjścia z pętli; warunek ten jest sprawdzany w każdej iteracji. Wyrażenie 3 określa przyrost/zmniejszenie/modyfikację wartości zmiennej (zmiennych) indeksu

Poniższy przykład po prostu wyświetla wartości od 0 do 4:

for ((i=0;i<5;i++)) wykonaj echo $i gotowe

Poniższy przykład tworzy nieskończoną pętlę, ponieważ nie określono żadnych wyrażeń:

for (( ; ; )) wykonaj echo "Naciśnij Ctrl-C, aby zatrzymać" gotowe

Przerwij i kontynuuj

Instrukcja przerwania dla warunkowego wyjścia

Możemy również użyć instrukcji warunkowej Jeśli wewnątrz pętli. ten Jeśli oświadczenie może być używane z złamać instrukcja, dla warunkowego wyjścia z pętli.

for ((i=0;i<10;i++)) wykonaj if [[ $i -eq 5 ]] to przerwij else echo $i; gotowe!

Powyższa pętla wypisze liczby od 0 do 4. Następnie, gdy wartość i wynosi 5, wyrwie się z pętli. Jest to szczególnie przydatne, gdy pętla ma zostać zakończona, gdy polecenie daje określone wyjście. Na przykład poniższa pętla przerywa, jeśli i kiedy znajdzie pusty plik.

dla pliku w `ls` do flen=`wc -c $plik` if [[ "$flen" = "0 $plik" ]] then echo "$plik jest pusty" break else echo $flen fi gotowe 

Komenda wc-c wypisuje liczbę wierszy w pliku . Drukuje to w formacie , na przykład, 10 test.txt. Wyrywamy się z pętli, gdy liczba wierszy wynosi 0, czyli pusty plik.

Kontynuuj instrukcję, aby warunkowo pominąć iterację

Podobnie jak C i wiele innych języków programowania, bash ma również kontyntynuj instrukcji, aby pominąć pozostałą część iteracji w pętli, jeśli spełniony jest określony warunek.

for ((i=0;i<10;i++)) wykonaj if [[ $i -eq 5 ]] to kontynuuj fi echo $i; Gotowe

Powyższa pętla wypisze liczby od 0 do 10, z wyjątkiem 5, ponieważ podczas iteracji i=5 istnieje instrukcja continue, która pominie resztę kodu w pętli na początku z iteracją i=6.

W poniższym przykładzie wypisujemy liczbę wierszy w pliku, a konkretna iteracja będzie kontyntynuj jeśli jest to katalog, a nie plik.

dla pliku w `ls` wykonaj if [[ -d $plik ]], a następnie kontynuuj fi wc -c "$plik" gotowe

[[ -d $plik ]] sprawdza, czy plik jest katalogiem. Jeśli tak, to przechodzimy do następnego pliku, czyli kolejnej iteracji. Jeśli nie jest to katalog, wypisujemy liczbę wierszy w pliku za pomocą toaleta polecenie, jak pokazano wcześniej.

Korzystanie z pętli: skrypty i wiersz poleceń

Składnia pętli może być używana bezpośrednio w powłoce Bash lub z pliku skryptu powłoki. Raz dla Składnia pętli jest wprowadzana w powłoce, powłoka kontynuuje monit, aby umożliwić użytkownikowi kontynuowanie zapętlonych poleceń.

Albo użytkownik może zapisać to w pliku skryptu i wykonać plik skryptu.

ten #!/kosz/bash na początku określa interpreter, który ma być użyty podczas wykonywania pliku. Chociaż Bash jest obecnie najczęściej używaną powłoką, niektórzy użytkownicy wolą powłoki takie jak zsh, który należy podać w miejscu bash na początku tego pliku.

Aby nadać uprawnienia do wykonywania dla tego pliku uruchom:

chmod +x test.sh

Wreszcie, uruchomić plik, uruchomić:

./test.sh

Wniosek

ten dla pętla w Bash jest dość prostą funkcją, ale ma zastosowanie w prawie każdym złożonym scenariuszu skryptowym. Nauka tego ma długą drogę, niezależnie od tego, czy jesteś zwykłym lub zaawansowanym użytkownikiem Linuksa, czy też zaczynasz uczyć się automatyzacji zadań administracji systemu i DevOps.