Istnieje dobrze znana while condition; do ...; done
pętla, ale czy istnieje do... while
pętla stylu, która gwarantuje co najmniej jedno wykonanie bloku?
shell
control-flow
Shawn J. Goff
źródło
źródło
Odpowiedzi:
Bardzo wszechstronna wersja
do ... while
ma tę strukturę:Przykładem jest:
W tej chwili (bez ustawionej wartości
i
) pętla wykonuje się 20 razy.Komentując linię ustawioną
i
na 16i=16
, pętla jest wykonywana 4 razy.Na
i=16
,i=17
,i=18
ii=19
.Jeśli i jest ustawione na (powiedzmy 26) w tym samym punkcie (na początku), polecenia będą nadal wykonywane po raz pierwszy (do momentu przetestowania polecenia przerwania pętli).
Test na chwilę powinien być prawdziwy (kod wyjścia 0).
Test powinien zostać odwrócony dla pętli kasowania, tj .: bądź fałszywy (status wyjścia inny niż 0).
Wersja POSIX wymaga zmiany kilku elementów do działania:
źródło
set -e
czegoś, co zawiedzie w czasie, blok warunków nie zatrzyma wykonywania: np.set -e; while nonexistentcmd; true; do echo "SHiiiiit"; exit 3; done
- dzieje się gówno. Tak więc, jeśli go użyjesz, musisz być bardzo ostrożny z obsługą błędów, tj. Połączyć wszystkie polecenia za pomocą&&
!Nie ma do zrobienia ... podczas lub robienia ... do pętli, ale to samo można osiągnąć w następujący sposób:
do czasu:
źródło