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

Używanie pętli „while” w skryptach Bash do iteracji poleceń.

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, aby wielokrotnie powtarzać podobne zadanie. W tym artykule dowiemy się, jak korzystać z dopóki pętla w Bash.

Wstęp

ten dopóki pętla w Bash służy do wielokrotnego wykonywania poleceń (wykonywanych poleceń) na podstawie wyników innego polecenia (polecenia warunkowego). Wykonywane polecenia będą działać, dopóki polecenie warunku nie zostanie pomyślnie wykonane (tj. Zwróci stan 0. Każde polecenie w systemie Linux zwraca 0 w przypadku sukcesu i niezerową liczbę całkowitą w przypadku niepowodzenia).

Jeśli istnieje wiele poleceń warunkowych, instrukcja uwzględnia tylko stan ostatniego polecenia na liście, tj. pętla jest wykonywana, dopóki ostatnie polecenie na liście nie zostanie pomyślnie wykonane.

Ogólna składnia

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

kiedy gotowe

Lista poleceń wykonywania będzie działać, dopóki ostatnie polecenie na liście poleceń warunku nie zostanie pomyślnie wykonane i zakończy się ze statusem 0. W iteracji, gdy ostatnie polecenie warunku zawiedzie, pętla zostanie zakończona.

Użytkownik może określić dowolny plik wykonywalny na listach poleceń. Mogą to być standardowe programy linuksowe lub niestandardowe programy lub skrypty użytkownika. Każde polecenie powinno znajdować się w nowym wierszu lub oddzielone średnikiem w tym samym wierszu.

Zobaczmy kilka przykładów.

Zapętlanie, aż zmienna ma określoną wartość: Poniższa pętla jest wykonywana do wartości zmiennej x nie jest równa 10.

x=0 while [[ $x -ne 10 ]] wykonaj echo $x ((x++)) gotowe

W każdej iteracji sprawdzamy, czy wartość x wynosi 10. Wartość jest sprawdzana za pomocą test Komenda. [[ Wyrażenie ]] jest składnią polecenia testowego (Patrz człowiek test). Tutaj, ponieważ używamy -ne operatora (co oznacza „nie równe”), polecenie test zwraca 0, tj. sukces, jeśli wartość x nie jest równa 10, i zwraca wartość niezerową, tj. niepowodzenie, jeśli wartość x wynosi 10.

Następnie wewnątrz zrób... gotowe bloku, wypisujemy wartość x i zwiększamy ją. Gdy wartość x wynosi 10, polecenie test zwraca stan niezerowy i pętla wychodzi.

Notatka: Zmienna indeksu używana w pętli while ma być inicjowana przed pętlą while lub w poleceniach warunkowych, w przeciwieństwie do pętli for, która umożliwia niejawne zainicjowanie zmiennej.

Z wieloma poleceniami warunku: Poniższa pętla tworzy 5 katalogów o nazwie dir0, dir1, ... dir4.

z=0 while echo "Lista plików:" ls -l [[ $z -ne 5 ]] do echo "Tworzenie dir$z..." mkdir dir$z ((z++)) done

Pierwsze polecenia echo "Lista plików:" oraz ls-l wykona raz w całości; ich sukces lub porażka nie ma żadnego wpływu na to, jak długo będzie działać pętla.

Następnie zostanie wykonane polecenie testowe sprawdzające wartość zmiennej z. Dopóki wartość z nie wynosi 5, polecenie test zwraca status powodzenia, a zatem pętla działa dalej. Polecenia warunkowe i wykonywane polecenia działają w porządku. Tutaj, dla każdej iteracji, najpierw uruchomi polecenie echo i polecenie ls w warunku, a następnie trzecie polecenie warunku sprawdzi wartość z. Jeśli nie jest 5, wchodzi do pętli i wykonuje podane polecenia.

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.

x=0 while [[ $x -ne 10 ]] wykonaj jeśli [[ $x -eq 5 ]] przerwij fi echo $x ((x++)) gotowe

Powyższa pętla while 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.

Kontynuuj instrukcję, aby warunkowo pominąć iterację

Bash ma również kontyntynuj instrukcji, aby pominąć pozostałą część iteracji w pętli, jeśli spełniony jest określony warunek.

x=0 while [[ $x -ne 10 ]] wykonaj jeśli [[ $x -eq 5 ]] kontynuuj fi echo $x ((x++)) gotowe

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

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 wykonywalnego skryptu powłoki. Podobny do dla oraz dopóki pętle, raz i dopóki 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 dopóki pętla, podobna do dla oraz dopóki pętle są ważną funkcją skryptów Bash. Chociaż pętla ma podobne zastosowanie jak pętla until, z wyjątkiem tego, że służy do uruchamiania alternatywnych poleceń/programów, gdy konkretny program się powiedzie. Często znajduje to swoją przydatność w zaawansowanych skryptach sieciowych, skryptach konserwacji systemu itp.