30 przykładów pętli Bash

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:

  1. użycie pętli for do odczytu pozycji na liście
  2. użycie pętli for do odczytu tablicy
  3. użycie pętli for do odczytu listy wartości łańcuchów ze spacjami
  4. użycie pętli for w {START..Koniec..INCREMENT} range
  5. Using for loop in {START..Koniec..
  6. Korzystanie z pętli for z 3 częściami i licznikiem warunków
  7. Korzystanie z pętli for z 3 częściami i wieloma warunkami i działaniami z przecinkiem
  8. Korzystanie z nieskończonej pętli for
  9. Korzystanie z pętli for z przerwaniem warunkowym i kontynuowanie
  10. Korzystanie z pętli for do odczytu nazw plików przez globbing
  11. Korzystanie z pętla do odczytu danych wyjściowych z polecenia find
  12. używanie pętli For do odczytu nazw plików katalogu rekurencyjnie
  13. używanie pętli For do odczytu nazw plików katalogu rekurencyjnie z warunkiem
  14. plik istnieje
  15. użycie pętli for na podstawie wyniku polecenia listy pakietów
  16. użycie pętli for do odczytu każdej linii pliku
  17. użycie pętli for do odczytu każdej linii Pliku na podstawie warunkowego dopasowania
  18. użycie pętli while z licznikiem
  19. użycie pętli while z wejściem użytkownika i zakończ przy wybraniu wyjścia z menu
  20. łączenie pętli while z getopts
  21. używanie pętli until z licznikiem
  22. zakończenie pętli until na podstawie danych wejściowych użytkownika
  23. używanie zagnieżdżonych pętli while
  24. używanie pętli until do uśpienia/oczekiwania na zadanie w tle rozpoczęte w skrypcie
  25. używanie pętli while do odczytu pid z wyjścia ps, które nie zostało zakończone
  26. wyszukiwanie dowolnego ciągu znaków w pliku za pomocą pętli i wyjście
  27. łączenie bash z curl do oceny danych z URL
  28. odczyt danych z portu wysłanego przez netcat za pomocą pętli while
  29. ping URL za pomocą pętli
  30. uruchamianie top w trybie wsadowym używając pętli i rekordu

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.

#!/bin / bash
# 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.

$ bash for1.sh

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.

$ bash for2.sh

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.

#!/bin / bash
#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.

$ bash for3.sh

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.

#!/bin / bash
# 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.

$ bash for4.sh

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.

#!/bin / bash
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.

$ bash for5.sh

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.

#!/bin / bash
# 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.

$ bash for6.sh

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.

#!/bin / bash
# 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.

$ bash for7.sh

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”

#!/ bin / bash
# 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.

$ bash for8.sh

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.

#!/bin/bash
# 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.

$ bash for9.sh

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.

#!/bin / bash
# 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.

$ bash for110.sh

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.

#!/bin/bash
# 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.

$ bash for11sh

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.

#!/bin / bash
# 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.

$ bash for12.sh

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.

#!/bin/bash
# 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.

$ ls mydir

Uruchom skrypt.

$ bash for13Sh

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”.

#!/bin / bash
# 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.

$ bash loop14.sh

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.

# Ustaw separator pola
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.

$ bash for15.sh

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.

#!/bin / bash
# 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.

$ bash for16sh

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”.

# przeczytaj plik
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.

$ bash for17.sh

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.

#!/bin/bash
# Initialize counter
counter=1
# Iterate the loop for 5 times
while
do
echo „Counter value = $counter”
((counter++))
done

Output:

Uruchom skrypt.

$ bash loop18sh

przejdź do góry

używanie pętli while z wejściem użytkownika i zakończ po wybraniu opcji exit z menu

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ą.

#!/bin/bash
# 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.

$ bash loop19.sh

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.

#!/bin / bash
# 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.

$ bash loop20.sh -arc

Uruchom skrypt z nieprawidłową opcją.

$ bash loop20sh-h

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.

#!/bin/bash
# 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.

$ bash loop21.sh

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.

#!/bin / bash
# 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.

$ bash loop22.sh

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.

#!/bin/bash
# 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.

$ bash loop23.sh

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.

#!/bin/bash
# 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.

$ bash loop24.sh

Sprawdź wyjście skryptu.

$ wyjście cat.txt

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.

#!/bin / bash
# 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.

$ bash loop25sh

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

January
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.

#!/bin / bash
# 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.

$ bash loop26.sh

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.

#!/bin / bash
# 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.

$ bash loop27sh

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.

#!/bin / bash
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.

$ bash loop28.sh

następnie otwórz inny terminal i uruchom następujące polecenie, aby komunikować się z

pierwszym terminalem.

$ nc localhost 1234

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”.

#!/bin / bash
# 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.

$ bash loop29.sh

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.

#!/bin | bash
# 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.

$ ps

Teraz uruchom skrypt.

$ bash loop30.sh

uruchom następujące polecenie, aby wyświetlić wyjście skryptu.

$ wyjście cat.txt

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

More: