30 Bash loop voorbeelden

drie types loops worden gebruikt in bash voor verschillende doeleinden. Deze zijn voor, zolang en totdat lussen. De verschillende toepassingen van deze lussen worden uitgelegd aan de hand van 30 verschillende voorbeelden in dit artikel.

gebruik van Bash-loops:

  1. gebruik voor lus om items in een lijst te lezen
  2. gebruik voor lus om een array te lezen
  3. gebruik voor lus om een lijst met tekenreekswaarden met spaties
  4. te lezen Gebruik voor lus in {START..EINDE..INCREMENT} bereik
  5. met behulp van voor lus in {START..EINDE..INCREMENT} range going back
  6. Using for loop with 3 parts and condition counter
  7. Using for loop with 3 parts and multiple conditions and actions with comma
  8. Using Infinite for loop
  9. Using For loop with conditional break and continue
  10. Using for loop to read filenames by globbing
  11. Using for loop to read output from find command
  12. Using for loop to read filenames of een map recursief
  13. met behulp van For Loop om recursief bestandsnamen van een map te lezen met voorwaarde
  14. de lus draaien tot de bestand bestaat
  15. gebruik voor lus gebaseerd op de uitvoer van pakketlijst Commando
  16. gebruik voor lus om elke regel van een bestand te lezen
  17. gebruik voor lus om elke regel van een bestand te lezen gebaseerd op een voorwaardelijke overeenkomst
  18. gebruik while lus met een teller
  19. gebruik while lus met gebruikersinvoer en sluit bij het selecteren van exit in een menu
  20. combineer while lus met getopts
  21. gebruik tot lus met een teller
  22. beëindigen tot lus op basis van gebruikersinvoer
  23. genest terwijl lussen
  24. gebruiken tot lus om te slapen/wachten op achtergrondtaak begonnen in het script
  25. met Behulp van de while-loop te lezen pid output van ps dat is niet beëindigd
  26. Zoeken naar een tekenreeks in een bestand met behulp van de lus en afsluiten
  27. Combineren van bash met krullen evalueren van gegevens van URL
  28. het Lezen van gegevens van een haven stuurt door netcat gebruik van while-lus
  29. ping URL met behulp van de lus
  30. Running top in batch modus met behulp van een lus en record uitgang

met Behulp van de for-lus om te lezen items in een lijst

De meest eenvoudige gebruik van ‘for’ – lus is om te lezen van een lijst van tekenreeks of numerieke gegevens. De lijst met numerieke gegevens wordt iterated met behulp van for-In loop in het volgende voorbeeld. Hier worden vier getallen gelezen in de variabele, $n in elke stap van de lus en afgedrukt. Maak een bash-bestand met het volgende script en voer uit vanaf de terminal.

#!/bin / bash
# for-in loop om een lijst met nummers
voor n in 10 11 17 25
do
# Print elk nummer
echo “The number is $n”
done

Output:

voer het script uit.

$ bash for1.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

met for loop om een array

te lezen elke array variabele bevat een lijst met gegevens die heel gemakkelijk kunnen worden geïtereerd door for-in loop te gebruiken. Het volgende voorbeeld toont het gebruik van for-in loop om een array van string data te lezen. Hier zal elke array waarde ophalen in de variabele, $language en een bericht afdrukken op basis van taal in elke iteratie.

#!/bin / bash
languages = (“Bash Perl Python PHP”)
for language in $languages
do
if
then
echo”$language is a web programming language “
else
echo”$language is a scripting language ”
fi
done

Output:

voer het script uit.

$ bash for2.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

Gebruik for loop om een lijst met tekenreekswaarden met spaties

te lezen wanneer een lijst van een tekenreeks wordt gelezen door for-in loop en elke tekenreekswaarde spatie bevat dan worden de waarden opgesplitst in woorden op basis van spatie als de tekenreekswaarde niet met een enkele of dubbele aanhalingsteken wordt geciteerd. Het volgende voorbeeld laat zien hoe een lijst met tekenreekswaarden met spatie kan worden gelezen door for-in lus. Hier Bevat een waarde van de lijst spatie en deze wordt afgedrukt met de spatie in de uitvoer.

#!/bin / bash
#for-in loop om lijst van strings met spatie
voor os in “Ubuntu” “Linux Mint” “Fedora””CentOS”
do
#Print elke string
echo “Operating System – $os”
done

Output:

voer het script uit.

$ bash for3.sh

hier wordt de tekenreekswaarde ‘Linux Mint’ correct afgedrukt.

Ga naar boven

met behulp van voor lus in {START..EINDE..INCREMENT} range

een ander gebruik van for-in loop is het lezen van range array. In het volgende voorbeeld wordt een for-lus gebruikt om een gegevensbereik van 10 tot 30 te lezen dat in elke stap met 5 wordt verhoogd. Vervolgens zal het script de getallen in het bereik afdrukken die deelbaar zijn door 10.

#!/bin / bash
# lees een bereik dat gebruikt wordt voor lus
voor num in {10..30..5}
do
# Controleer of het getal deelbaar is door 10 of niet
als (($num%10==0 ))
vervolgens
echo “$num is deelbaar door 10 ”
fi
done

Output:

voer het script uit.

$ bash for4.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

met behulp van voor lus in {START..EINDE..INCREMENT} range going backward

het gegevensbereik kan achterwaarts worden gelezen door for-in lus te gebruiken waarbij de beginwaarde van het bereik groter is dan de eindwaarde van het bereik. In het volgende voorbeeld begint het bereik van 50 en eindigt het tot 30. De waarde van $num zal worden verminderd met 10 in elke stap van de lus. Het script zal de nummers uit het bereik afdrukken die deelbaar zijn door 5 en 10.

#!/bin / bash
echo “de volgende getallen zijn deelbaar door 5 en 10”
# lees een bereik dat gebruikt wordt voor lus
voor num in {50..30..10}
do
# Controleer of het getal deelbaar is door 5 en 10 of niet
als (($num%5==0 && $num%10==0 ))
daarna
echo-n “$num “
fi
gereed
echo “gereed”

uitvoer:

voer het script uit.

$ bash for5.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

gebruiken voor loop met 3 delen en voorwaarde teller

Bash ondersteunt voor loop met drie delen zoals andere standaard programmeertalen. Het eerste deel bevat initialisatie, het tweede deel bevat de beëindiging voorwaarde en het derde deel bevat increment of decrement operatie. Deze lus wordt vooral gebruikt wanneer het aantal iteratie vooraf is gedefinieerd. In het volgende voorbeeld, voor lus zal itereren voor 50 keer en bereken de som van 1 tot 50. Het resultaat van de sommatie wordt afgedrukt als uitvoer.

#!/bin / bash
# Initialiseer de variabele
sum = 0
# lus zal 50 keer herhalen
voor ((n=1; n<=50; n++ ))
do
# voeg de somwaarde toe met de volgende waarde van n
((sum=$sum+$n))
done
# Print het resultaat
echo “de som van 1 tot 50 is $sum”

uitvoer:

voer het script uit.

$ bash for6.sh

de som van 1 tot 50 wordt weergegeven in de output.

Ga naar boven

gebruik voor lus met 3 delen en meerdere Voorwaarden en acties met komma

voor lus met drie delen kan worden gedefinieerd met meerdere initialisaties, beëindigingsvoorwaarden en acties. Het volgende voorbeeld toont het gebruik van dit type lus. Hier worden de variabelen $x en $y geïnitialiseerd door 5 en 25. De lus zal doorgaan totdat de waarde van $x kleiner of gelijk is aan 20 en de waarde van $y groter is dan 5. De waarde van $x zal toenemen met 5 en de waarde van $y zal verminderen met 5 in elke iteratie van de lus. De huidige waarde van $x en $y in elke stap wordt afgedrukt als uitvoer.

#!/bin / bash
# lus zal itereren op basis van twee voorwaarden
voor ((x = 5, y=25; x<=20 && y>5; x+ = 5, y – = 5))
do
echo “the current value of x = $x and y = $y”
done

Output:

voer het script uit.

$ bash for7.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

gebruik oneindig voor lus

wanneer een lus is gedefinieerd zonder enige beëindigingsvoorwaarde dan werkt de lus als een oneindige lus. Het volgende voorbeeld toont het gebruik van infinite voor lus die geen initialisatie, beëindiging en actie delen bevat. Dit type van for lus wordt gedefinieerd door dubbele puntkomma (; ;). Het volgende script zal de lus voortzetten totdat de gebruiker ‘quit’ typt als invoer. Het script zal een nummer van 1 tot 20 dat zal nemen als invoer anders zal het afdrukken “het nummer is buiten bereik”

#!/ bin / bash
# declare infinite loop
voor (( ; ; ))
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 terminated”
exit 0
fi
# Check the number range
if (( $n < 1 || $n > 20 ))
then
echo “The number is buiten bereik”
else
Echo “het getal is $n”
Fi
done

output:

voer het script uit.

$ bash for8.sh

hier wordt 6 als eerste invoer genomen die een geldig nummer is, 22 als tweede invoer die een ongeldig nummer is en afsluiten als derde invoer die het script beëindigde.

Go to Top

Using for loop with conditional break and continue

‘ continue ‘ statement wordt gebruikt om een deel van de lus weg te laten op basis van een voorwaarde en ‘break’ statement wordt gebruikt om de lus te beëindigen op basis van een voorwaarde. Het volgende voorbeeld toont het gebruik van deze statements in een for lus. Hier wordt de lus gebruikt om een lijst met stringgegevens te lezen en elke waarde in de lijst wordt opgeslagen in de variabele $food. Wanneer de waarde van $food ‘soep’ is, zal het de lus voortzetten zonder de waarde af te drukken. Wanneer de waarde van $ food ‘Pasta’ is dan zal het de lus beëindigen. Wanneer $food een andere waarde bevat dan’ soep ‘en’ Pasta ‘ dan zal het de waarde afdrukken. Het script zal dus twee waarden uit de lijst afdrukken als uitvoer.

#!/bin/bash
# Declare a loop with a list
for food in Pizza Soup Burger Pasta Noodles
do
# Set condition for continue
if
then
continue
# Set condition for break
elif
then
break
else
echo “$food is my favorite”
fi
done

Output:

voer het script uit.

$ bash for9.sh

hier worden twee waarden uit de lijst weggelaten. ‘Soep ‘is niet afgedrukt voor het vervolg statement en’ Pasta ‘ is niet afgedrukt voor break statement.

Ga naar boven

gebruik for loop om bestandsnamen te lezen door globbing

bestandsnamen of de specifieke inhoud van een bestand kan worden doorzocht met globbing. Het maakt gebruik van verschillende soorten jokertekens voor het matchen van een bestandsnaam of het zoeken van inhoud in het bestand. Alle bestanden met txt-extensie van de huidige locatie worden doorzocht met het volgende voorbeeld. Wanneer u het script zal draaien dan zullen alle overeenkomende bestandsnamen worden afgedrukt zonder newline als uitvoer.

#!/bin / bash
# Loop zal alle tekstbestanden doorzoeken en elke bestandsnaam opslaan in $file
voor bestand in”*.txt”;
do
# Print de bestandsnaam
echo $file;
done

Output:

voer het script uit.

$ bash for110.sh

Ga naar boven

met for loop om uitvoer te lezen van find Commando

‘find’ commando wordt gebruikt voor verschillende doeleinden in bash. In het volgende voorbeeld wordt de opdracht ‘find’ gebruikt om alle tekstbestandsnamen van de huidige locatie te lezen. Hier,’ – naam ‘ optie te gebruiken voor hoofdlettergevoelig zoeken. Zo, het script zal de bestandsnamen van de huidige locatie die de ‘af te drukken.txt ‘ extensie met elke naam. Hier wordt IFS-variabele gebruikt om de newline te definiëren als veldscheidingsteken en de waarde van het $ – bestand in elke regel af te drukken.

#!/bin / bash
# veldscheidingsteken instellen
IFS = $ ‘\n’;
# lees de bestanden van een map
Voor bestand in $(find-name “*.txt”); do
echo $file
done
#uunset field separator
unset IFS;

uitvoer:

voer het script uit.

$ bash voor 11.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

met behulp van for loop om bestandsnamen van een map recursief te lezen

het commando ‘find’ kan worden gebruikt om alle bestanden en submappen van een bepaalde map te lezen. Het volgende voorbeeld toont het gebruik van de opdracht’ find ‘om alle bestandsnamen en mappen onder de map’ mydir ‘ te lezen. Hier wordt IFS variabele gebruikt om de waarde van $filename af te drukken met ‘newline’ zoals het vorige voorbeeld.

#!/ bin / bash
# veldscheidingsteken
IFS=$’\n’instellen;
# lees de bestanden van een map
voor bestandsnaam in $(zoek “mydir”)
do
echo “$filename ”
done
# veldscheidingsteken ongedaan maken
IFS instellen;

uitvoer:

voer het script uit.

$ bash for12.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Go to Top

Using for loop om recursief bestandsnamen van een map te lezen met de voorwaarde

‘ for ‘loop met’ find ‘ commando kan worden gebruikt om som+

e bepaalde bestandsnamen van een map af te drukken op basis van elke voorwaarde. ‘find’ commando wordt gebruikt met een voorwaarde in het volgende voorbeeld. Het zal alleen zoeken tekst bestandsnamen van mydir directory. Hier,’ – iname ‘optie wordt gebruikt met’ find ‘ commando voor case incensitive search. Dat betekent dat alle bestanden met de extensie ’txt’ of ‘TXT’ worden gematched en afgedrukt als output. Hier wordt IFS variabele gebruikt om de waarde van $filename af te drukken met ‘newline’ zoals het vorige voorbeeld.

#!/bin / bash
# set field separator
IFS = $ ‘\n’;
# Lees alle tekstbestanden van een map
voor bestandsnaam in $(find mydir-iname’*.txt’); do
echo “$filename ”
done
# veldscheidingsteken niet instellen
IFS niet instellen;

uitvoer:

voer het volgende commando uit om de lijst met bestanden en mappen van de map mydir te tonen.

$ ls mydir

voer het script uit.

$ bash for13.sh

er zijn drie tekstbestanden in de map die in de uitvoer worden getoond.

Ga naar boven

het draaien van de lus totdat het bestand bestaat

elke bestandsnaam bestaat of niet wordt gecontroleerd in het volgende voorbeeld met behulp van infinite voor lus. In dit script, zal een bestandsnaam als invoer in elke iteratie van de lus en test de bestandsnaam bestaat in de huidige locatie of niet. Als de bestandsnaam bestaat dan zal het script “bestand bestaat” afdrukken en de lus voortzetten anders zal het de lus beëindigen door het bericht af te drukken, ‘bestand bestaat niet’.

#!/bin/bash
# define infinite loop
for(( ; ; ))
do
# Input a filename
echo “Enter a file name”
read file
# Check the file exist or not
if
then
echo “Filename does not exist”
exit 0
else
echo “File exists”
fi
done

uitvoer:

voer het script uit.

$ bash loop14.sh

een bestaande bestandsnaam wordt gegeven als eerste invoer en een niet-bestaande bestandsnaam wordt gegeven als tweede uitvoer die het script beëindigde.

Ga naar boven

met for loop gebaseerd op de uitvoer van package list Commando

de informatie over de geïnstalleerde pakketten in het systeem kan worden opgehaald met het commando `apt list – -installed`. de lus ‘ for ‘ wordt in het volgende voorbeeld gebruikt om de geïnstalleerde pakketinformatie van het pakket lijst commando te lezen en elke pakketinformatie op elke regel af te drukken. IFS variabele wordt hier gebruikt om de waarde van $regel af te drukken met ‘newline’ zoals het vorige voorbeeld.

# veldscheidingsteken
IFS=$’\n’instellen;
# bestand regel voor regel lezen
voor regel in $(Apt list –installed)
do
echo “$line ”
done
# veldscheidingsteken ongedaan maken
IFS instellen;

uitvoer:

voer het script uit.

$ bash for15.sh

de uitvoer toont de lijst met geïnstalleerde pakketten.

Ga naar boven

Gebruik for loop om regels van een bestand

te lezen er zijn veel manieren om een bestand in bash te lezen. het commando ‘ cat ‘ wordt in het volgende voorbeeld gebruikt om het bestand temp te lezen.txt. Elke regel van het bestand zal worden opgeslagen in de variabele, $regel en print de regel in elke iteratie van for lus. IFS variabele wordt hier gebruikt om de waarde van $regel af te drukken met ‘newline’ zoals het vorige voorbeeld.

#!/bin / bash
# veldscheidingsteken instellen
IFS = $ ‘\n’;
# bestand regel voor regel
lezen voor regel in $(cat temp.txt)
do
echo “$ line ”
done
# veldscheidingsteken ongedaan maken
IFS ongedaan maken;

uitvoer:

voer het script uit.

$ bash voor 16.sh

Ga naar boven

met for loop om regels van een bestand te lezen met voorwaardelijke overeenkomst

Als u bepaalde regels uit een bestand wilt afdrukken, hoeft u alleen binnen de lus toe te voegen die wordt gebruikt om het bestand te lezen. Het volgende voorbeeld drukt de opgemaakte uitvoer van elke regel van ‘weekdag.txt ‘ bestand op basis van een voorwaarde. Als een regel van het bestand bevat de waarde, ‘zondag’ dan zal het afdrukken ‘vakantie’ bericht anders zal het afdrukken ‘werkdag’ bericht.

# lees het bestand
voor regel in $(cat weekdag.txt)
do
# vergelijk de waarde met een tekenreeks
if
then
echo ” $ line is a holiday “
else
echo”$line is a working day ”
fi
done

Output:

voer het script uit.

$ bash for17.sh

de volgende uitvoer zal verschijnen na het uitvoeren van het script.

Ga naar boven

met behulp van while loop met een teller

$teller variabele wordt gebruikt elke lus om de iteratie van de lus te controleren. Het volgende voorbeeld toont het gebruik van while loop met de teller. Hier wordt $counter geïnitialiseerd naar 1 en terwijl lus 5 keer zal herhalen en de waarde van $counter in elke iteratie zal afdrukken. $teller wordt verhoogd met 1 in elke stap om de beëindiging voorwaarde van de lus te bereiken.

#!/bin / bash
# initialize counter
counter = 1
# Itereer de lus 5 keer
terwijl
do
echo “Counter value = $counter”
((counter++))
done

Output:

voer het script uit.

$ bash loop18.sh

Ga naar boven

gebruik while loop met gebruikersinvoer en sluit wanneer u afsluiten selecteert in het menu

‘ while ‘ loop wordt gebruikt in het volgende voorbeeld om een menu met 5 opties weer te geven. De eerste vier opties worden gebruikt om vier rekenkundige bewerkingen uit te voeren op basis van de input van de gebruiker en de laatste optie wordt gebruikt om het script af te sluiten. Het menu verschijnt na het verstrekken van twee nummers als invoer. Als de gebruiker ‘1’ selecteert, worden de invoernummers toegevoegd. Als de gebruiker ‘2’ selecteert, wordt het tweede invoernummer afgetrokken van het eerste invoernummer. Als de gebruiker ‘3’ selecteert dan worden de invoernummers vermenigvuldigd en als de gebruiker ‘4’ selecteert dan wordt het eerste invoernummer gedeeld door het tweede invoernummer.

#!/bin / bash
# neem twee getallen
echo “Enter a number”
read n1
echo”Enter a number “
read n2
# Declare an infinite loop
while true
do
# Display the menu
echo ” 1. Toevoeging “
echo ” 2. Aftrekken”
echo ” 3. Vermenigvuldiging “
echo ” 4. Sector “
echo ” 5. Exit “
echo-n ” Selecteer een willekeurig nummer uit :”
lees ingang
# de operatie uit te Voeren op basis van de geselecteerde waarde
als ]
dan
((result=n1+n2))
elif ]
dan
((result=n1-n2))
elif ]
dan
((result=$n1*$n2))
elif ]
dan
((result=$n1/$n2))
elif ]
dan
exit 0
else
echo “Ongeldige invoer”
fi
echo “Het resultaat is $result”
ok

Output:

Uitvoeren van het script.

$ bash loop19.sh

de volgende uitvoer verschijnt na het selecteren van Optie 2 en 5.

het combineren van while loops met getopts

‘getopts’ is een ingebouwde functie van bash die wordt gebruikt om argumenten en opties in het bash script te lezen. Het volgende voorbeeld toont het gebruik van de getopts functie die wordt gebruikt in een while loop. Hier worden drie optiewaarden gebruikt met getopts. Dit zijn ‘a’, ‘r’en ‘ c’. Voor deze opties worden drie verschillende berichten afgedrukt.

#!/bin / bash
# de optie lezen en opslaan in een variabele
terwijl getopts ” arc ” optie; do
# controleer de optiewaarde
case ${option} in
a) # option a
echo “Process is aborted”
;;
r) # option r
echo “Process is restarted”
;;
c) # option c
echo “Process is continued”
;;
\? ) # ongeldige optie
echo “Use: or or”
;;
esac
done

Output:

voer het script uit met geldige opties.

$ bash loop20.sh -arc

voer het script uit met een ongeldige optie.

$ bash loop20.sh-h

Ga naar boven

met behulp van until loop met een teller

Until loop kan worden gebruikt met een teller zoals while lus die eerder wordt getoond. Het volgende voorbeeld toont het gebruik van until loop met een teller. Hier wordt $ counter variabele gebruikt om de iteratie van de lus te regelen die geïnitialiseerd is naar 1. De tot lus zal doorgaan tot de waarde van $teller tot 5. Dus, de lus zal 6 keer herhalen en de waarde $teller in elke stap afdrukken. $teller zal worden decrement door 1 in elke stap om de beëindiging voorwaarde van de lus te bereiken.

#!/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:

voer het script uit.

$ bash loop21.sh

beëindigen tot lus gebaseerd op gebruikersinvoer

elke lus eindigt op basis van een bepaalde voorwaarde. Hoe until loop kan worden beëindigd op basis van input van de gebruiker, wordt getoond in het volgende voorbeeld. Volgens de beëindigingsvoorwaarde, zal de lus eindigen wanneer de waarde van $nummer groter is dan 50. De waarde van $number wordt niet verhoogd binnen de lus. Dus., zal de lus input van de gebruiker blijven nemen totdat een aantal van meer dan 50 als input wordt genomen.

#!/ bin / bash
# Initialiseer nummer
nummer = 0
# stel het patroon in voor numerieke gegevens
patroon=’^+$’
# stel de beëindigingsvoorwaarde in
tot
do
echo-n “Enter a number:”
read number
# Controleer of de invoerwaarde getal is of niet
if ! ]
dan
echo ” error: Not a number “
number=0
else
echo “You have enter $number”
fi
done

Output:

voer het script uit.

$ bash loop22.sh

het script zal de lus opnieuw herhalen voor de invoerwaarde 4, de foutmelding weergeven voor de invoerwaarde, gg en de lus beëindigen voor de invoerwaarde 54.

Ga naar boven

met geneste terwijl lussen

wanneer een lus wordt gedeclareerd binnen een andere lus dan wordt het een oneindige lus genoemd. Het volgende voorbeeld toont het gebruik van geneste while loop. Hier zal de eerste while lus 2 keer itereren en de tweede while lus binnen de eerste lus zal drie keer itereren. De totale iteratie van de lussen is 2×3=6 keer. $i en $ j variabelen worden gebruikt om de iteratie van deze lussen te controleren en de waarden van deze variabelen in elke stap worden afgedrukt als output.

#!/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++))
done
j=1
((i++))
gereed

uitvoer:

voer het script uit.

$ bash loop23.sh

Ga naar boven

gebruik tot lus om te slapen/wachten op achtergrondtaak gestart in script

elk proces kan op de achtergrond worden uitgevoerd met het symbool ‘&’. Hoe een proces op de achtergrond kan worden uitgevoerd met behulp van until loop en de loop kan worden beëindigd op basis van de tijd die in het slaapcommando is opgegeven, wordt in dit voorbeeld getoond. Hier wordt $ cnt variabele gebruikt om de lus te beëindigen. De lus start het achtergrondproces en schrijft de uitvoer in een tekstbestand met de naam “output.txt ” voor 1 seconde. Daarna, de beëindiging voorwaarde van de lus zal controleren en het zal false terugkeren. Vervolgens zal het script een bericht afdrukken, “Sleeping …” en na 3 seconden het script verlaten.

#!/bin / bash
# Initialize counter
cnt = 1
# set termination condition
until
do
echo “Background process is running”;
# Wait for 1 second
sleep 1;
((cnt++))
done > output.txt &
# wacht 3 seconden
echo ” slapen…”
slaap 3

uitvoer:

voer het script uit.

$ bash loop24.sh

controleer de uitvoer van het script.

$ cat output.txt

Ga naar boven

while loop gebruiken om pid te lezen van ps-uitvoer die niet is beëindigd

het commando ‘ ps ‘ wordt gebruikt om informatie te krijgen over alle lopende processen van het systeem. Het biedt gedetailleerde informatie over een lopend proces, zoals user id, PID, cpu-gebruik, geheugengebruik, enz. Het volgende voorbeeld laat zien hoe een while loop gebruikt kan worden om de lopende proces informatie gerelateerd aan ‘apache’te lezen. Hier wordt IFS variabele gebruikt om de PID van elk proces met een nieuwe regel af te drukken. Vervolgens wacht het tot de gebruiker op een willekeurige toets drukt om het script te verlaten.

#!/bin / bash
# Set field separator
IFS = ”
terwijl
do
# alle lopende proces id van apache
PID = ‘ ps-ef | grep “apache” | awk ‘{print $2 ” proces draait …”} “
echo $ pid
# Wait for 1 second
sleep 1
# Press any key to terminate the loop
echo “Press any key to terminate”
IFS

Output:

voer het script uit.

$ bash loop25.sh

de PID van alle lopende processen gebaseerd op’ apache ‘ wordt getoond in de uitvoer.

Ga naar boven

zoeken naar een tekenreeks in een bestand met behulp van loop en sluit

Maak een bestand met de naam month.txt met de volgende inhoud om het bash script hieronder te testen.

maand.txt

January
February
March
April
May
June
July
August
September
October
November
December

’terwijl’ loop wordt gebruikt in het volgende voorbeeld om maand te lezen.txt bestand regel voor regel. Als een regel de waarde bevat, ‘juni’ dan zal het afdrukken “Enjoy summer vacation” en beëindigen van het script anders zal het de waarde van $regel afdrukken.

#!/bin / bash
# Stel de bestandsnaam in op lezen
bestandsnaam= ” maand.txt “
# Read file line by line
while IFS= read-r line
do
# Controleer of de waarde van de regel gelijk is aan Juni
# Beëindig het programma als de voorwaarde Waar is
if ];
then
echo”Enjoy Summer vacation”
exit 0
else
echo $line
fi
done < $filename

uitvoer:

voer het script uit.

$ bash loop26.sh

hier bestaat’ juni ‘ in de bestandsmaand.txt die de lus beëindigt. Dus, andere maand namen na ‘juni’ zal niet lezen door de lus.

Ga naar boven

combineer bash met curl om gegevens van URL

te evalueren gegevens kunnen worden overgedragen naar of van een netwerkserver in bash met behulp van het commando’ curl ‘ met elk ondersteund protocol zoals HTTP, FTP, TELNET, enz. Het is een command-line tool. Hoe ‘curl’ commando kan worden gebruikt om gegevens te evalueren van URL met behulp van For loop wordt getoond in het volgende voorbeeld. Hier leest lus een lijst met url en geeft elke URL-waarde door in de krul en drukt de gegevens af die zijn ontvangen van de URL.

#!/bin / bash
# lees elke URL uit de lijst
voor url in “yahoo.com” “youtube.com”
do
# HTTP response code afdrukken voor elke URL
echo $url; curl-v-m 5-s $1 “$url” | grep HTTP/1.1;
done

Output:

voer het script uit.

$ bash loop27.sh

lezen van gegevens van een poort die door netcat wordt verzonden met behulp van de lus

het commando ‘netcat’ wordt gebruikt om gegevens over het netwerk te lezen en te schrijven met behulp van het TCP-of udp-protocol. de opdracht ‘ nc ‘wordt in bash gebruikt om de opdracht’ netcat ‘ uit te voeren. Het volgende voorbeeld toont het gebruik van’ nc ‘ commando in while loop. Hier zal het script proberen verbinding te maken met poort 1234 met behulp van het NC commando en het zal een bericht in de andere terminal afdrukken als het verbinding kan maken. Je moet een ander terminalvenster of tabblad openen om het commando ‘NC localhost 1234’ uit te voeren om een verbinding te maken. Na het tot stand brengen van de verbinding, kan elk bericht worden overgedragen van de ene terminal naar de andere terminal.

#!/bin / bash
echo ” luisteren op poort 1234 …”
# Read the message passed by netcat at port 1234
while read text
do
# Terminate the loop if the received message is”quit”
if; then
echo ” Bye “
break
else
echo”$text “
fi
# Print message when the port is connected
done < <((printf ” Welcome.\r \ nt typ een bericht : “| / nc-l 1234)

uitvoer:

voer het script uit in een terminal om het luisteren te starten op poort 1234.

$ bash loop28.sh

open vervolgens een andere terminal en voer het volgende commando uit om te communiceren met

de eerste terminal.

$ nc localhost 1234

het zal een welkomstbericht tonen in de tweede terminal. Als de gebruiker typt iets in de tweede terminal dan zal het worden weergegeven in de eerste terminal. Wanneer de gebruiker ‘quit’ typt in de tweede terminal dan zal het script eindigen door het tonen van een bericht, ‘Bye’ in de eerste terminal.

ga naar boven

ping URL met behulp van een lus

kunt u ontdekken dat elke website live is of niet door het uitvoeren van’ ping ‘ commando met de URL van de site. ‘ping’ commando wordt gebruikt met ‘google.com’ in het volgende voorbeeld om te controleren of de internetverbinding werkt of niet. Terwijl lus 5 keer itereert in het script en probeert te pingen google.com. Als de server reageert dan zal het afdrukken “het Internet werkt” en de lus te beëindigen. Als de lus 5 keer itereert en geen serverrespons krijgt, wordt “geen internetverbinding”afgedrukt.

#!/bin / bash
# zet de teller
count=5
terwijl ]
doe
# probeer te pingen google.com
ping-c 1 google.com
c=$?
# controleer de statuscode
if]
then
echo “the Internet is working”
exit 0
fi
# Decrement the counter
((count–))
done
echo “No Internet connection”

uitvoer:

voer het script uit.

$ bash loop29.sh

u krijgt een vergelijkbare uitvoer als uw internetverbinding correct werkt.

Ga naar boven

Top draaien in batchmodus met behulp van een loop en recorduitvoer

het commando’top’ is een Linux-beheerprogramma dat wordt gebruikt om het gebruik van systeembronnen te onderzoeken, verschillende taken te beheren en lopende processen te monitoren. Hoe u kunt uitvoeren ’top’ commando in batch mode met behulp van voor loop en sla de records in een tekstbestand wordt getoond in het volgende voorbeeld. Hier wordt de optie-b gebruikt om de opdracht ’top’ in batchmodus te starten en de optie-p wordt gebruikt om het proces-id in te stellen dat u wilt controleren. De uitvoer van het’ top ‘ commando wordt opgeslagen in output.txt-bestand.

#!/bin / bash
# Loop zal 5 keer herhalen en top commando
uitvoeren voor ((i=0; i<5; i++))
do
top-b-p 2875-n1 | tail -1 >> uitvoer.txt
done

Output:

voer eerst het volgende commando uit om de lijst van de lopende processen te vinden.

$ ps

Voer nu het script uit.

$ bash loop30.sh

voer het volgende commando uit om de uitvoer van het script te bekijken.

$ cat output.txt

conclusie

lussen kunnen in bash op verschillende manieren worden gebruikt om verschillende soorten eenvoudige of complexe taken uit te voeren. Hoe drie soorten lussen kunnen worden gebruikt in bash voor verschillende taken zoals het ophalen van lijst of array, het lezen van bestanden of een commando uitvoer, enz. worden getoond in dit artikel met behulp van zeer eenvoudige voorbeelden. Ik hoop dat deze voorbeelden de lezer zullen helpen om het gebruik van de bash-lus duidelijker te begrijpen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

More: