trzy typy pętli są używane w bash do różnych celów. Są to pętle for, while I until. Różne zastosowania tych pętli są wyjaśnione za pomocą 30 różnych przykładów w tym artykule.
wykorzystanie pętli Bash:
- użycie pętli for do odczytu pozycji na liście
- użycie pętli for do odczytu tablicy
- użycie pętli for do odczytu listy wartości łańcuchów ze spacjami
- użycie pętli for w {START..Koniec..INCREMENT} range
- Using for loop in {START..Koniec..
- Korzystanie z pętli for z 3 częściami i licznikiem warunków
- Korzystanie z pętli for z 3 częściami i wieloma warunkami i działaniami z przecinkiem
- Korzystanie z nieskończonej pętli for
- Korzystanie z pętli for z przerwaniem warunkowym i kontynuowanie
- Korzystanie z pętli for do odczytu nazw plików przez globbing
- Korzystanie z pętla do odczytu danych wyjściowych z polecenia find
- używanie pętli For do odczytu nazw plików katalogu rekurencyjnie
- używanie pętli For do odczytu nazw plików katalogu rekurencyjnie z warunkiem
- plik istnieje
- użycie pętli for na podstawie wyniku polecenia listy pakietów
- użycie pętli for do odczytu każdej linii pliku
- użycie pętli for do odczytu każdej linii Pliku na podstawie warunkowego dopasowania
- użycie pętli while z licznikiem
- użycie pętli while z wejściem użytkownika i zakończ przy wybraniu wyjścia z menu
- łączenie pętli while z getopts
- używanie pętli until z licznikiem
- zakończenie pętli until na podstawie danych wejściowych użytkownika
- używanie zagnieżdżonych pętli while
- używanie pętli until do uśpienia/oczekiwania na zadanie w tle rozpoczęte w skrypcie
- używanie pętli while do odczytu pid z wyjścia ps, które nie zostało zakończone
- wyszukiwanie dowolnego ciągu znaków w pliku za pomocą pętli i wyjście
- łączenie bash z curl do oceny danych z URL
- odczyt danych z portu wysłanego przez netcat za pomocą pętli while
- ping URL za pomocą pętli
- uruchamianie top w trybie wsadowym używając pętli i rekordu
- używając pętli For do odczytu pozycji na liście
- używanie pętli for do odczytu tablicy
- używanie pętli for do odczytu listy wartości łańcuchów ze spacjami
- Using for loop in {START..Koniec..Przyrost} zakres
- Using for loop in {START..Koniec..Przyrost} zakres idący wstecz
- używanie pętli for z 3 częściami i licznika stanu
- używanie pętli for z 3 częściami i wieloma warunkami i działaniami z przecinkiem
- używanie nieskończonej pętli for
- użycie pętli for z przerwaniem warunkowym I continue
- używanie pętli for do odczytu nazw plików przez globbing
- używanie pętli for do odczytu danych wyjściowych z polecenia find
- używanie pętli for do odczytu nazw plików katalogu rekurencyjnie
- używanie pętli for do odczytywania nazw plików katalogu rekurencyjnie za pomocą warunku
- uruchamianie pętli do momentu istnienia pliku
- użycie pętli for na podstawie wyniku polecenia lista pakietów
- używanie pętli for do odczytu linii pliku
- używanie pętli for do odczytu linii pliku z warunkowym dopasowaniem
- używanie pętli while z licznikiem
- używanie pętli while z wejściem użytkownika i zakończ po wybraniu opcji exit z menu
- łączenie pętli while Z getopts
- używanie pętli until z licznikiem
- Zakończ pętlę until na podstawie danych wejściowych użytkownika
- używanie zagnieżdżonych pętli while
- Używanie funkcji until loop to sleep/wait for background task started in script
- używanie pętli while do odczytu pid z nie zakończonego wyjścia ps
- wyszukując dowolny ciąg znaków w pliku za pomocą pętli i zakończ
- Połącz bash z curl, aby ocenić dane z URL
- odczyt danych z portu wysyłanego przez netcat przy użyciu pętli while
- ping URL używając pętli
- uruchamianie w trybie wsadowym przy użyciu pętli i Rekordu
- podsumowanie
używając pętli For do odczytu pozycji na liście
najprostszym użyciem pętli 'for’ jest odczyt listy ciągów lub danych liczbowych. Lista danych liczbowych jest iterowana przy użyciu pętli for-in w poniższym przykładzie. Tutaj cztery liczby zostaną odczytane w zmiennej, $n w każdym kroku pętli i wydrukowane. Utwórz plik bash za pomocą następującego skryptu i uruchom go z terminala.
# pętla for-in do odczytu listy liczb
dla N w 10 11 17 25
do
# Drukuj każdą liczbę
echo „liczba jest $n”
gotowe
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli for do odczytu tablicy
każda zmienna tablicy zawiera listę danych, które można bardzo łatwo iterować za pomocą pętli for-in. Poniższy przykład pokazuje użycie pętli for-in do odczytu tablicy ciągów danych. Tutaj każda wartość tablicy zostanie pobrana w zmiennej $language i wydrukowana wiadomość w oparciu o język w każdej iteracji.
do
if
then
echo”$language is a web programming language”
else
echo „$language is a scripting language”
fi
done
wyjście:
uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli for do odczytu listy wartości łańcuchów ze spacjami
gdy lista łańcuchów jest odczytywana przez pętlę for-in, a dowolna wartość łańcuchów zawiera spację, wtedy wartości są dzielone na słowa na podstawie spacji, jeśli wartość łańcuchów nie jest cytowana z pojedynczym lub podwójnym cudzysłowem. Poniższy przykład pokazuje, w jaki sposób Lista wartości łańcuchowych ze spacją może być odczytywana przez pętlę for-in. Tutaj jedna wartość listy zawiera spację i jest drukowana ze spacją na wyjściu.
#pętla for-in do odczytu listy ciągów ze spacją
dla systemu operacyjnego w „Ubuntu” „Linux Mint” „Fedora””CentOS”
do
#Drukuj każdy ciąg
echo „System Operacyjny – $os”
gotowe
wyjście:
Uruchom skrypt.
tutaj wartość ciągu, 'Linux Mint’ jest poprawnie wydrukowana.
Go to Top
Using for loop in {START..Koniec..Przyrost} zakres
kolejnym zastosowaniem pętli for-in jest odczyt tablicy zakresu. W poniższym przykładzie pętla for jest używana do odczytu zakresu danych od 10 do 30, który jest zwiększany o 5 w każdym kroku. Następnie skrypt wyświetli te liczby w zakresie, który jest podzielny przez 10.
# odczyt zakresu za pomocą pętli for
dla num w {10..30..5}
do
# sprawdź, czy liczba jest podzielna przez 10 lub nie
jeśli (($num%10==0 ))
następnie
echo „$num jest podzielne przez 10 ”
fi
gotowe
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
Go to Top
Using for loop in {START..Koniec..Przyrost} zakres idący wstecz
zakres danych można odczytać wstecz przy pomocy pętli for-in, w której wartość początkowa zakresu jest większa niż wartość końcowa zakresu. W poniższym przykładzie zakres zaczyna się od 50 i kończy na 30. Wartość $num zostanie zmniejszona o 10 w każdym kroku pętli. Skrypt wyświetli te liczby z zakresu, które są podzielne przez 5 i 10.
echo „poniższe liczby są podzielne przez 5 i 10”
# odczytaj zakres używając pętli for
dla num w {50..30..10}
do
# sprawdź liczbę podzielną przez 5 i 10 lub nie
jeśli (($num%5==0 && $num%10==0 ))
następnie
echo-n „$num „
fi
gotowe
echo „gotowe”
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli for z 3 częściami i licznika stanu
Bash obsługuje pętlę for z 3 częściami, podobnie jak inne Standardowe języki programowania. Pierwsza część zawiera inicjalizację, druga część zawiera warunek zakończenia, a trzecia część zawiera operację inkrementacji lub dekrementacji. Pętla ta jest używana głównie wtedy, gdy liczba iteracji jest wcześniej zdefiniowana. W poniższym przykładzie pętla for powtórzy się 50 razy i obliczy sumę od 1 do 50. Wynik podsumowania zostanie wydrukowany jako wyjście.
# Zainicjalizuj zmienną
sum=0
# pętla będzie iterować 50 razy
for (( n=1; n<=50; N++ ))
do
# Dodaj wartość sumy z następną wartością N
((sum=$sum+$n))
done
# Wydrukuj wynik
Echo „suma od 1 do 50 to $sum”
wyjście:
Uruchom skrypt.
suma od 1 do 50 jest pokazana na wyjściu.
do góry
używanie pętli for z 3 częściami i wieloma warunkami i działaniami z przecinkiem
pętla For z 3 częściami może być zdefiniowana z wieloma inicjalizacjami, warunkami zakończenia i działaniami. Poniższy przykład pokazuje użycie tego typu pętli. Tutaj zmienne $x i $y są inicjowane przez 5 i 25. Pętla będzie kontynuowana, dopóki wartość $x nie będzie mniejsza lub równa 20, a wartość $y będzie większa niż 5. Wartość $x zwiększy się o 5, a wartość $y zmniejszy się o 5 w każdej iteracji pętli. Bieżąca wartość $x i $y w każdym kroku zostanie wydrukowana jako wyjście.
# Loop będzie iterował na podstawie dwóch warunków
for ((x = 5, y = 25; x<=20 && y>5; x + =5, y – =5))
do
echo „bieżąca wartość X=$X i y=$y”
gotowe
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie nieskończonej pętli for
gdy dowolna pętla jest zdefiniowana bez żadnego warunku zakończenia, pętla działa jako nieskończona pętla. Poniższy przykład pokazuje użycie nieskończonej pętli for, która nie zawiera żadnych części inicjalizacji, zakończenia i akcji. Ten typ pętli for jest zdefiniowany podwójnym średnikiem (; ;). Następujący skrypt będzie kontynuował pętlę, dopóki użytkownik nie wpisze 'quit’ jako wejścia. Skrypt wydrukuje dowolną liczbę od 1 do 20, która zostanie wprowadzona w przeciwnym razie wydrukuje „liczba jest poza zakresem”
# Declare infinite loop
for (( ; ; ))
do
# Take a input
echo „Enter a number between 1 to 20”
read n
# Set the termination condition of the loop
if
then
echo „Program zakończony”
exit 0
fi
# Check the number range
if (( $n < 1 || $n > 20 ))
następnie
Echo „liczba jest poza zakresem”
else
Echo „liczba jest $N”
Fi
gotowe
wyjście:
uruchom skrypt.
tutaj, 6 jest brane jako pierwsze wejście, które jest poprawną liczbą, 22 jest brane jako drugie wejście, które jest nieprawidłową liczbą, a quit jest brane jako trzecie wejście, które zakończyło skrypt.
do góry
użycie pętli for z przerwaniem warunkowym I continue
Instrukcja’continue’ jest używana do pominięcia niektórych części pętli na podstawie dowolnego warunku, a instrukcja 'break’ jest używana do zakończenia pętli na podstawie dowolnego warunku. Poniższy przykład pokazuje zastosowania tych instrukcji w pętli for. Tutaj pętla służy do odczytu listy danych łańcuchowych i każda wartość na liście jest zapisana w zmiennej $food. Gdy wartością $food jest 'Soup’, pętla będzie kontynuowana bez drukowania wartości. Gdy wartością $food jest 'makaron’, to zakończy ona pętlę. Jeśli $food zawiera wartość inną niż 'Soup’ i 'Pasta’, to wyświetli wartość. Tak więc skrypt wyświetli dwie wartości z listy jako wyjście.
# Zadeklaruj pętlę z listą
dla jedzenia w zupie pizzy Burger makaron makaron
do
# Ustaw warunek dla kontynuowania
jeśli
następnie
Kontynuuj
# Ustaw warunek dla przerwy
elif
następnie
przerwa
else
echo „$food is my favorite”
fi
gotowe
wyjście:
Uruchom skrypt.
tutaj dwie wartości są pomijane z listy. „Zupa” nie jest drukowana dla instrukcji continue, a „makaron” nie jest drukowana dla instrukcji break.
do góry
używanie pętli for do odczytu nazw plików przez globbing
nazwy plików lub konkretną zawartość pliku można przeszukiwać za pomocą globbing. Używa różnych typów znaków wieloznacznych do dopasowania dowolnej nazwy pliku lub wyszukiwania zawartości w pliku. Wszystkie pliki z rozszerzeniem txt bieżącej lokalizacji są przeszukiwane w poniższym przykładzie. Po uruchomieniu skryptu wszystkie pasujące nazwy plików zostaną wydrukowane bez nowej linii jako wyjście.
# Loop przeszukuje wszystkie pliki tekstowe i zapisuje każdą nazwę pliku w $file
w poszukiwaniu pliku w „*.txt”;
do
# Print the filename
echo $file;
done
Output:
Run The script.
do góry
używanie pętli for do odczytu danych wyjściowych z polecenia find
polecenie’find’ jest używane do różnych celów w bash. W poniższym przykładzie Komenda 'find’ jest używana do odczytu wszystkich nazw plików tekstowych z bieżącej lokalizacji. Tutaj opcja ’- name’, której można użyć do wyszukiwania z uwzględnieniem wielkości liter. Tak więc skrypt wyświetli te nazwy plików bieżącej lokalizacji, które mają’.rozszerzenie txt o dowolnej nazwie. Zmienna IFS służy do zdefiniowania nowej linii jako separatora pól i wypisania wartości $file w każdej linii.
# Ustaw separator pola
IFS=$’\n’;
# odczytaj pliki katalogu
dla pliku w $(find-name”*.txt”); do
echo $file
done
# uunset field separator
unset IFS;
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli for do odczytu nazw plików katalogu rekurencyjnie
polecenie’find’ może być użyte do odczytu wszystkich plików i podfolderów danego katalogu. Poniższy przykład pokazuje użycie polecenia ’ find 'do odczytu wszystkich nazw plików i katalogów w katalogu’ mydir’. Tutaj zmienna IFS jest używana do wypisania wartości $filename z 'newline’, jak w poprzednim przykładzie.
# Ustaw separator pola
IFS = $ '\n’;
# odczytaj pliki katalogu
dla nazwy pliku w $(Znajdź „mydir”)
do
echo „$filename ”
gotowe
# Wyłącz Separator pól
wyłącz IFS;
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli for do odczytywania nazw plików katalogu rekurencyjnie za pomocą warunku
pętla’for’ za pomocą polecenia 'find’ może być użyta do wypisania som+
e konkretnych nazw plików katalogu na podstawie dowolnego warunku. polecenie 'find’ jest używane z warunkiem w poniższym przykładzie. Przeszukuje tylko nazwy plików tekstowych katalogu mydir. Tutaj, opcja ’-iname 'jest używana z poleceniem’ find ’ do wyszukiwania niewrażliwego na wielkość liter. Oznacza to, że wszystkie pliki z rozszerzeniem ” txt ” lub ” TXT ” zostaną dopasowane i wydrukowane jako wyjście. Tutaj zmienna IFS jest używana do wypisania wartości $filename z 'newline’, jak w poprzednim przykładzie.
# Ustaw separator pola
IFS=$’\n’;
# odczytaj wszystkie pliki tekstowe katalogu
dla nazwy pliku w $(Znajdź mydir-iname '*.txt’); do
echo „$filename”
done
# Unset field separator
unset IFS;
wyjście:
uruchom następujące polecenie, aby wyświetlić listę plików i folderów katalogu mydir.
Uruchom skrypt.
w katalogu znajdują się trzy pliki tekstowe, które są wyświetlane na wyjściu.
do góry
uruchamianie pętli do momentu istnienia pliku
każda nazwa pliku istnieje lub nie jest sprawdzana w poniższym przykładzie za pomocą nieskończonej pętli for. W tym skrypcie nazwa pliku będzie przyjmowana jako wejście w każdej iteracji pętli i testuje, czy nazwa pliku istnieje w bieżącej lokalizacji, czy nie. Jeśli nazwa pliku istnieje, skrypt wypisuje „plik istnieje” i kontynuuje pętlę, w przeciwnym razie zakończy pętlę poprzez wydrukowanie komunikatu „plik nie istnieje”.
# Define infinite loop
for(( ; ; ))
do
# Input a filename
echo „Enter a file name”
read file
# Check the file exists or not
if
then
echo „Filename does not exist”
exit 0
else
Echo „plik istnieje”
fi
gotowe
wyjście:
uruchom skrypt.
istniejąca nazwa pliku jest podawana jako pierwsze wejście, a nieistniejąca nazwa pliku jest podawana jako drugie wyjście, które zakończyło skrypt.
do góry
użycie pętli for na podstawie wyniku polecenia lista pakietów
informacje o zainstalowanych pakietach w systemie można pobrać za pomocą polecenia `apt list – -installed`. pętla 'for’jest używana w poniższym przykładzie do odczytu informacji o zainstalowanym pakiecie z polecenia lista pakietów i wypisania każdej informacji o pakiecie w każdym wierszu. Zmienna IFS jest tutaj używana do wypisania wartości $line z 'newline’, jak w poprzednim przykładzie.
IFS = $ '\n’;
# odczytaj plik linia po linii
dla linii w $(Apt list — installed)
do
echo „$line”
gotowe
# Wyłącz separator pola
wyłącz IFS;
wyjście:
Uruchom skrypt.
wyjście pokazuje listę zainstalowanych pakietów.
do góry
używanie pętli for do odczytu linii pliku
istnieje wiele sposobów odczytu pliku w bash. polecenie 'cat’jest używane w poniższym przykładzie do odczytu pliku, temp.txt. Każda linia pliku będzie przechowywana w zmiennej $line i wypisuje ją w każdej iteracji pętli for. Zmienna IFS jest tutaj używana do wypisania wartości $line z 'newline’, jak w poprzednim przykładzie.
# Ustaw separator pola
IFS=$’\n’;
# odczytaj plik linia po linii
dla linii w $(cat temp.txt)
do
echo „$line ”
done
# Unset field separator
unset IFS;
wyjście:
Uruchom skrypt.
do góry
używanie pętli for do odczytu linii pliku z warunkowym dopasowaniem
jeśli chcesz tylko wydrukować poszczególne linie z pliku, musisz dodać wewnątrz pętli, która jest używana do odczytu pliku. Poniższy przykład wyświetla sformatowane wyjście każdego wiersza ’ dzień tygodnia.txt ’ plik oparty na warunku. Jeśli któraś z linijek pliku zawiera wartość „niedziela”, wyświetli komunikat „święto”, w przeciwnym razie wyświetli komunikat „dzień roboczy”.
dla linii w $(cat.txt)
do
#Porównaj wartość z danymi łańcucha
jeśli
to
echo „$line to święto”
else
echo „$line to dzień roboczy”
fi
gotowe
wyjście:
Uruchom skrypt.
po uruchomieniu skryptu pojawi się następujące wyjście.
do góry
używanie pętli while z licznikiem
zmienna$counter służy do sterowania iteracją pętli dowolnej pętli. Poniższy przykład pokazuje użycie pętli while z licznikiem. Tutaj $ counter jest inicjalizowane na 1, a pętla while będzie iterować 5 razy i wypisać wartość $counter w każdej iteracji. $counter jest zwiększany o 1 w każdym kroku, aby osiągnąć stan zakończenia pętli.
# Initialize counter
counter=1
# Iterate the loop for 5 times
while
do
echo „Counter value = $counter”
((counter++))
done
Output:
Uruchom skrypt.
przejdź do góry
pętla’while’ jest używana w poniższym przykładzie do wyświetlenia menu z 5 opcjami. Pierwsze cztery opcje są używane do wykonywania czterech operacji arytmetycznych na podstawie danych wejściowych użytkownika, a ostatnia opcja jest używana do wyjścia ze skryptu. Menu pojawi się po podaniu dwóch liczb jako danych wejściowych. Jeśli użytkownik wybierze „1”, to zostaną dodane liczby wejściowe. Jeśli użytkownik wybierze „2”, druga liczba wejściowa zostanie odjęta od pierwszej liczby wejściowej. Jeśli użytkownik wybierze „3”, liczby wejściowe zostaną pomnożone, a jeśli użytkownik wybierze „4”, pierwsza liczba wejściowa zostanie podzielona przez drugą liczbę wejściową.
# Take two numbers
echo „Enter a number”
read N1
echo „Enter a number”
read N2
# Declare an infinite loop
while true
do
# Display the menu
echo „1. Dodanie „
echo ” 2. Odejmowanie „
echo ” 3. Mnożenie „
echo ” 4. Dywizji „
echo ” 5. Exit „
echo-n ” Wybierz dowolną liczbę z :”
odczytaj wejście
# wykonaj operację na podstawie wybranej wartości
if ]
then
((result=N1+N2))
elif ]
then
((result=N1-N2))
elif ]
then
((result=$N1*$N2))
Elif ]
then
((result=$N1/$N2))
Elif ]
then
exit 0
else
Echo”invalid input „
Fi
echo”the result is $result”
done
output:
uruchom skrypt.
następujące wyjście pojawi się po wybraniu opcji 2 i 5.
do góry
łączenie pętli while Z getopts
'getopts’ jest wbudowaną funkcją bash, która służy do odczytu argumentów i opcji w skrypcie bash. Poniższy przykład pokazuje użycie funkcji getopts, która jest używana w pętli while. Tutaj, trzy wartości opcji są używane z getopts. Są to „a”, ” r ” I „c”. Dla tych opcji zostaną wydrukowane trzy różne komunikaty.
# odczytaj opcję i zapisz w zmiennej
, podczas gdy opcja getopts „arc”; do
# sprawdź wartość opcji
case ${option} w
a) # opcja a
echo „Proces jest przerwany”
;;
r) # opcja r
echo „Proces jest restartowany”
;;
C) # opcja c
echo „Proces jest kontynuowany”
;;
\? ) # invalid option
echo ” Use: or or „
;;
esac
done
Output:
Uruchom skrypt z poprawnymi opcjami.
Uruchom skrypt z nieprawidłową opcją.
do góry
używanie pętli until z licznikiem
pętla Until może być używana z licznikiem jak pętla while, która jest pokazana wcześniej. Poniższy przykład pokazuje użycie pętli until z licznikiem. Tutaj zmienna $counter jest używana do sterowania iteracją pętli inicjalizowanej na 1. Pętla until będzie kontynuowana aż do wartości $counter to 5. Tak więc pętla będzie iterować 6 razy i wypisać wartość $ counter w każdym kroku. $counter zostanie zmniejszona o 1 w każdym kroku, aby osiągnąć stan zakończenia pętli.
# Initializ the counter
counter=10
# Iterate the loop for 6 times
until
do
echo „the current value of counter = $counter”
((counter–))
done
Output:
Uruchom skrypt.
do góry
Zakończ pętlę until na podstawie danych wejściowych użytkownika
każda pętla kończy działanie na podstawie określonego warunku. Sposób zakończenia pętli until na podstawie danych wejściowych użytkownika jest pokazany w poniższym przykładzie. Zgodnie z warunkami zakończenia, pętla zakończy się, gdy wartość $number będzie większa niż 50. Wartość $number nie jest zwiększana wewnątrz pętli. Więc., pętla będzie nadal pobierać dane wejściowe od użytkownika, aż liczba większa niż 50 zostanie pobrana jako dane wejściowe.
# Inicjalizuj numer
number=0
# Ustaw wzorzec dla danych liczbowych
pattern=’^+$’
# Ustaw warunek zakończenia
do
echo-n „wprowadź numer:”
odczytaj numer
# sprawdź, czy wartość wejściowa jest liczbą, czy nie
jeśli ! ]
then
echo ” error: Nie Liczba”
Liczba=0
else
echo „wpisałeś $liczba”
fi
gotowe
wyjście:
Uruchom skrypt.
skrypt powtórzy pętlę dla wartości wejściowej 4, wyświetli komunikat o błędzie dla wartości wejściowej, gg i zakończy pętlę dla wartości wejściowej 54.
do góry
używanie zagnieżdżonych pętli while
gdy pętla jest zadeklarowana wewnątrz innej pętli, wtedy nazywa się ją pętlą nieskończoną. Poniższy przykład pokazuje użycie zagnieżdżonej pętli while. Tutaj pierwsza pętla while będzie iterowana 2 razy, a druga pętla while wewnątrz pierwszej pętli będzie iterowana 3 razy. Całkowita iteracja pętli wynosi 2×3=6 razy. zmienne $i I $j są używane do sterowania iteracją tych pętli, a wartości tych zmiennych w każdym kroku są drukowane jako wyjście.
# Initialize i and J
i=1
j=1
# Set termination condition for i
while
do
# Set termination condition for j
while
do
# Print the current value of I and J
printf „i=%d, j=%D\N” $I $J
((j++))
gotowe
j=1
((i++))
gotowe
wyjście:
uruchom skrypt.
do góry
Używanie funkcji until loop to sleep/wait for background task started in script
każdy proces może być uruchomiony w tle za pomocą symbolu '&’. W tym przykładzie pokazano, jak proces może być uruchomiony w tle za pomocą pętli until I zakończyć pętlę na podstawie czasu określonego w poleceniu sleep. Tutaj zmienna $cnt jest używana do zakończenia pętli. Pętla rozpocznie proces w tle i zapisze wynik w pliku tekstowym o nazwie ” output.txt ” na 1 sekundę. Następnie warunek zakończenia pętli się sprawdzi i zwróci false. Następnie skrypt wyświetli komunikat „Sleeping…” i zakończy działanie po 3 sekundach.
# Initialize counter
cnt = 1
# Set termination condition
until
do
echo „proces w tle jest uruchomiony”;
# Wait for 1 second
sleep 1;
((cnt++))
done > output.txt &
# poczekaj 3 sekundy
echo ” śpi…”
sen 3
wyjście:
Uruchom skrypt.
Sprawdź wyjście skryptu.
do góry
używanie pętli while do odczytu pid z nie zakończonego wyjścia ps
polecenie’ps’ służy do uzyskania informacji o wszystkich uruchomionych procesach systemu. Dostarcza szczegółowych informacji o każdym uruchomionym procesie, takich jak identyfikator użytkownika, PID, użycie procesora, użycie pamięci itp. Poniższy przykład pokazuje, jak pętla while może być użyta do odczytu informacji o uruchomionym procesie związanych z 'apache’. Tutaj zmienna IFS jest używana do drukowania PID każdego procesu z nową linią. Następnie będzie czekać, aż użytkownik naciśnie dowolny klawisz, aby wyjść ze skryptu.
# Set field separator
IFS=’ ’
while
do
# Retrieve all running process id of apache
pid=`ps-EF | grep „apache” | awk '{print $2 ” proces is running …”} „
echo $pid
# poczekaj 1 sekundę
sleep 1
# naciśnij dowolny klawisz, aby zakończyć pętlę
echo”naciśnij dowolny klawisz, aby zakończyć”
jeśli read-r-n 1 ; następnie
break
fi
done
# Wyłącz Separator pola
wyłącz IFS
wyjście:
uruchom skrypt.
PID wszystkich uruchomionych procesów opartych na 'apache’ jest pokazany na wyjściu.
przejdź do góry
wyszukując dowolny ciąg znaków w pliku za pomocą pętli i zakończ
Utwórz plik o nazwie month.txt z następującą zawartością do testowania skryptu bash podanego poniżej.
miesiąc.txt
February
March
April
May
June
July
August
September
October
November
December
’pętla while’ jest używana w poniższym przykładzie do odczytu miesiąca.plik txt linia po linii. Jeśli jakakolwiek linia zawiera wartość 'June’, to wyświetli „Enjoy summer vacation” i zakończy działanie skryptu, w przeciwnym razie wyświetli wartość $line.
# Ustaw nazwę pliku na odczyt
nazwa pliku=”miesiąc.txt ”
# odczyt pliku linia po linii
while IFS= read-R line
do
# sprawdź wartość linii jest równa June
# Zakończ program, jeśli warunek jest true
if];
then
echo „ciesz się wakacjami”
exit 0
else
echo $line
fi
done <$filename
wyjście:
uruchom skrypt.
tutaj 'czerwiec’ istnieje w pliku miesiąc.txt, który kończy pętlę. Tak więc inne nazwy miesięcy po 'June’ nie będą odczytywane w pętli.
do góry
Połącz bash z curl, aby ocenić dane z URL
dane mogą być przesyłane do lub z dowolnego serwera sieciowego w bash za pomocą polecenia 'curl’ z dowolnym obsługiwanym protokołem, takim jak HTTP, FTP, TELNET itp. Jest to narzędzie wiersza poleceń. Sposób użycia polecenia’ curl ’ do oceny danych z adresu URL za pomocą pętli for pokazano w poniższym przykładzie. Tutaj pętla for odczyta listę adresów url i przekaże każdą wartość adresu URL w curl i wydrukuje dane otrzymane z adresu URL.
# odczytaj każdy URL z listy
dla url w „yahoo.com” „youtube.com”
do
# Drukuj Kod odpowiedzi HTTP dla każdego adresu URL
echo $url; curl-v-m 5-s $1 „$url ” /grep HTTP / 1.1;
gotowe
wyjście:
Uruchom skrypt.
do góry
odczyt danych z portu wysyłanego przez netcat przy użyciu pętli while
polecenie’netcat’ służy do odczytu i zapisu danych przez sieć przy użyciu protokołu TCP lub udp. polecenie ’ NC 'jest używane w bash do uruchomienia polecenia’ netcat’. Poniższy przykład pokazuje użycie polecenia’ nc ’ w pętli while. Tutaj skrypt spróbuje połączyć się z portem 1234 za pomocą polecenia nc i wyświetli komunikat w drugim terminalu, jeśli będzie mógł się połączyć. Musisz otworzyć inne okno terminala lub kartę, aby uruchomić polecenie „NC localhost 1234”, aby nawiązać połączenie. Po nawiązaniu połączenia, każda wiadomość może zostać przeniesiona z jednego terminala do drugiego.
echo ” nasłuchuje na porcie 1234 …”
# odczytaj wiadomość przekazaną przez netcat na porcie 1234
, podczas gdy przeczytaj tekst
do
# Zakończ pętlę, jeśli odebrana wiadomość to „quit”
if ; następnie
echo „Bye”
break
else
echo „$text”
fi
# Drukuj wiadomość, gdy port jest podłączony
gotowe < <((printf „welcome.\r\nType jakiś komunikat:”) / nc-l 1234)
wyjście:
Uruchom skrypt w Terminalu, aby rozpocząć nasłuchiwanie na porcie 1234.
następnie otwórz inny terminal i uruchom następujące polecenie, aby komunikować się z
pierwszym terminalem.
wyświetli wiadomość powitalną w drugim terminalu. Jeśli użytkownik wpisze coś w drugim terminalu, to zostanie to wyświetlone w pierwszym terminalu. Gdy użytkownik wpisze 'quit’ w drugim terminalu, skrypt zakończy działanie wyświetlając komunikat ’ Bye ’ w pierwszym terminalu.
do góry
ping URL używając pętli
możesz dowiedzieć się, że każda strona jest aktywna lub nie, wykonując polecenie 'ping’ z adresem URL strony. polecenie 'ping’ jest używane z 'google.com” w poniższym przykładzie, aby sprawdzić, czy połączenie internetowe działa, czy nie. Pętla While będzie 5 razy iterowała w skrypcie i spróbuje ping google.com. Jeśli serwer odpowie, wyświetli komunikat „Internet działa”i zakończy pętlę. Jeśli pętla powtórzy się 5 razy i nie otrzyma żadnej odpowiedzi serwera, wtedy wyświetli komunikat „Brak połączenia z Internetem”.
# Ustaw licznik
count=5
while]
do
# Try to ping google.com
ping-C 1 google.com
C=$?
# Sprawdź kod stanu
if]
then
echo „Internet działa”
exit 0
fi
# Decrement the counter
((count–))
done
echo „Brak połączenia z Internetem”
wyjście:
Uruchom skrypt.
podobny wynik otrzymasz, jeśli połączenie internetowe działa poprawnie.
do góry
uruchamianie w trybie wsadowym przy użyciu pętli i Rekordu
polecenie’top’ to narzędzie administracyjne Linuksa, które służy do sprawdzania wykorzystania zasobów systemowych, zarządzania różnymi zadaniami i monitorowania uruchomionych procesów. Jak można uruchomić polecenie ’ top ’ w trybie wsadowym za pomocą pętli for i zapisać rekordy w pliku tekstowym pokazano w poniższym przykładzie. Tutaj, opcja-b jest używana do uruchomienia polecenia ’ top ’ w trybie wsadowym, a opcja-p jest używana do Ustawienia ID procesu, który chcesz monitorować. Wyjście polecenia ’ top ’ zostanie zapisane w output.plik txt.
# Loop będzie iterował 5 razy i wykona polecenie top
for ((i=0; i<5; i++))
do
Top-b-p 2875-n1 / tail -1 >> wyjście.txt
gotowe
wyjście:
najpierw uruchom następujące polecenie, aby znaleźć listę uruchomionych procesów.
Teraz uruchom skrypt.
uruchom następujące polecenie, aby wyświetlić wyjście skryptu.
do góry
podsumowanie
pętle mogą być używane w bash na różne sposoby do wykonywania różnych rodzajów prostych lub złożonych zadań. Jak trzy rodzaje pętli mogą być używane w bash do różnych zadań, takich jak pobieranie listy lub tablicy, odczytywanie plików lub dowolnego wyjścia polecenia, itp. są pokazane w tym artykule za pomocą bardzo prostych przykładów. Mam nadzieję, że te przykłady pomogą czytelnikowi lepiej zrozumieć zastosowania pętli bash.