Pętla Bash „Dopóki”: samouczek i przykłady

Używanie pętli „do” w skrypcie Bash do zapętlania 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 do wielokrotnego powtarzania podobnych zadań. 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ły, dopóki polecenie warunku nie zawiedzie (tj. Zwróci stan niezerowy. Każde polecenie w Linuksie zwraca 0 dla sukcesu i niezerową liczbę całkowitą dla niepowodzenia). To jest dokładnie przeciwieństwo dopóki pętla, w której wykonywane polecenia działają aż do pomyślnego wykonania polecenia warunku.

Jeśli istnieje wiele poleceń warunkujących, instrukcja uwzględnia tylko stan ostatniego polecenia na liście, tj. pętla będzie działać, dopóki ostatnie polecenie na liście nie będzie zawodzić.

Ogólna składnia

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

dopóki nie skończysz

Lista poleceń wykonywania będzie działać, dopóki ostatnie polecenie na liście poleceń warunku nie powiedzie się. Po pomyślnym wykonaniu ostatniego polecenia pętla kończy działanie.

Użytkownicy mogą 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 jest 10.

x=0 dopóki [[ $x -eq 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).

Następnie wewnątrz zrób... gotowe bloku, po prostu wypisujemy wartość x i zwiększamy ją. Pętla kończy się po pomyślnym wykonaniu polecenia warunku, tj. Kiedy $x jest równe 10.

Notatka: Zmienna indeksu, która ma być używana w pętli „do czasu”, ma być inicjowana przed pętlą „do” 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 dopóki echo "Cześć" echo "Do widzenia" [[ $z -eq 5 ]] wykonaj echo "Tworzenie dir$z..." mkdir dir$z ((z++)) gotowe

Pierwsze polecenia echo „Hi” i echo „Bye” zostaną wykonane raz całkowicie; 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 ta komenda nie zadziała, tj. dopóki wartość z nie wyniesie 5, komendy warunkowe i wykonywane komendy działają w kolejności. Tutaj, dla każdej iteracji, najpierw uruchomi 2 polecenia echa 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 dopóki [[ $x -eq 10 ]] wykonaj jeśli [[ $x -eq 5 ]] przerwij fi echo $x ((x++)) gotowe

Powyżej dopóki 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.

Kontynuuj instrukcję, aby warunkowo pominąć iterację

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

x=0 dopóki [[ $x -eq 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 to kolejna ważna funkcja w skryptach Bash. Ma to szczególne znaczenie w złożonych skryptach, gdy oczekuje się, że pewien zestaw programów zwróci stan niepowodzenia, a niektóre inne polecenia mają zostać wykonane w celu zarejestrowania awarii, szczegółowego wyświetlenia błędu lub po prostu wykonania niektórych alternatywnych programów.