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.