Bash, aż pętle

Bash, aż pętle
Istnieje kilka rodzajów pętli, które można zastosować w skryptach bash. W przypadku pętli, podczas gdy pętle i do pętli.

Koncepcyjnie pętla powinna być używana do pętli przez serię elementów, takich jak pętla za pośrednictwem każdego elementu w tablicy lub każdego pliku w katalogu itp. While Pętla powinna być używana tak długo, jak określony warunek jest prawdziwy, na przykład licznik A jest mniejszy niż wartość maksymalna lub czas pingu na serwerze jest niższy niż próg lub na zawsze, jeśli pętasz, gdy jest prawdziwa lub 1.

Pętla aż do pętli While, ale z odwrotną logiką. Zamiast zapętlania, gdy stan jest prawdziwy, zakładasz, że warunek jest fałszywy i zapętlony, aż stanie. Są odwrotne w logicznym wyrażeniu. Wybór prawidłowej pętli między pewną pętlą i dopóki pętla pozwala Twojemu programowi być bardziej czytelne i zrozumiałe dla innych lub siebie, gdy wrócisz do kodu później.

Niektóre typowe przykłady lub powody korzystania z pętli do momentu, gdy może być pętla, pętla, dopóki użytkownik nie weźmie „wyjścia”; pętla, dopóki wygenerowane dane będą większe niż żądany wolumin danych lub do momentu znalezienia liczby plików pasujących do wyszukiwania.

Podstawowa składnia, dopóki pętla wygląda tak:

aż do [warunku]; Do
Linie kodu
Więcej linii kodu
zrobione

Teraz weźmy kilka przykładów. Pierwszy przykład będzie wieloma współczynnikami dwóch, aż osiągnie próg wielkości 1000:

#!/bin/bash
Num = 1
do [„$ num” -GT 1000]; Do
Echo $ num
Niech num = num*2
zrobione

Drugi przykład będzie nadal pingować adres URL, aż czas odpowiedzi wyniesie większy niż 100 milisekund:

#!/bin/bash
Milisekund = 0
# Będziemy pingować, aż stanie się to wolniejsze niż 1000 milisekund
do [$ miliseconds -GT 1000]
Do
# Uruchom ping i wyodrębnij linię, która ma czas ping, który kończy się w czasie = xxxx ms
Wyjście = 'ping -c 1 Google.com | Grep Time | awk -f = 'print $ nf' '
Echo „Czas ping: $ wyjście”
# Wyodrębnij liczbę młyniseocnds z ciągów jako liczby całkowitej
MiliseConds = 'echo $ wyjściowe | awk 'drukuj 1 $' | Awk -f. „drukuj 1 $”
Echo „Liczba ms = $ milisekund”
sen 1
zrobione
Echo „Czas pingu przekroczył 1000 milisekund”

Trzeci przykład przyjmie plik i połączy plik ze sobą, aż osiągnie rozmiar 1 kilobyte:

#!/bin/bash
Filename = 'basename "$ 0"'
Echo $ nazwa pliku
Tmp_file = "./tmp1 "
Target_file = "./cel"
cat $ fileName> $ tarme_file
Filesize = 0
# Zwiększ rozmiar pliku do 1 kb
do [$ filesize -GT 1024]
Do
# Dodaj ten plik do docelowej zawartości pliku
cp $ tarme_file $ tmp_file
cat $ tmp_file >> $ tarme_file
Filesize = 'du $ tarc_file | awk 'drukuj 1 $' '
echo „Plikizuj: $ filesize”
sen 1
zrobione
echo „Nowe pliki osiągnęły cel 1 kB”

Czwarty przykład poprosi użytkownika o wprowadzenie ich nazwy, dopóki nie wpisz się wyjścia, aby zrezygnować z programu:

#!/bin/bash
Response = "foo"
# Zwiększ rozmiar pliku do 1 kb
aż [„$ response” = „exit”]
Do
echo -n „Wprowadź swoje imię lub„ wyjdź ”, aby zrezygnować z tego programu:”
Przeczytaj odpowiedź
Jeśli [„$ odpowiedź” != „Exit”]; Następnie
echo „Hello $ odpowiedź”
fi
zrobione
Echo „Dziękuję za granie w tę grę”

WNIOSEK

Kluczową kwestią jest użycie DOPÓKI pętla, aby twój kod był bardziej jasny, gdy oczekuje się, że warunek będzie zawsze fałszywy, a następnie chcesz zatrzymać działanie w pętli, gdy warunek stanie się prawdziwy. Innymi słowy, kontynuuj zapętlanie DOPÓKI w pewnym momencie. Z tej perspektywy mam nadzieję, że twoje skrypty bash mogą być bardziej jasne i nauczyłeś się czegoś z tym artykułem. Dziękuję.