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:
- gebruik voor lus om items in een lijst te lezen
- gebruik voor lus om een array te lezen
- gebruik voor lus om een lijst met tekenreekswaarden met spaties
- te lezen Gebruik voor lus in {START..EINDE..INCREMENT} bereik
- met behulp van voor lus in {START..EINDE..INCREMENT} range going back
- Using for loop with 3 parts and condition counter
- Using for loop with 3 parts and multiple conditions and actions with comma
- Using Infinite for loop
- Using For loop with conditional break and continue
- Using for loop to read filenames by globbing
- Using for loop to read output from find command
- Using for loop to read filenames of een map recursief
- met behulp van For Loop om recursief bestandsnamen van een map te lezen met voorwaarde
- de lus draaien tot de bestand bestaat
- gebruik voor lus gebaseerd op de uitvoer van pakketlijst Commando
- gebruik voor lus om elke regel van een bestand te lezen
- gebruik voor lus om elke regel van een bestand te lezen gebaseerd op een voorwaardelijke overeenkomst
- gebruik while lus met een teller
- gebruik while lus met gebruikersinvoer en sluit bij het selecteren van exit in een menu
- combineer while lus met getopts
- gebruik tot lus met een teller
- beëindigen tot lus op basis van gebruikersinvoer
- genest terwijl lussen
- gebruiken tot lus om te slapen/wachten op achtergrondtaak begonnen in het script
- met Behulp van de while-loop te lezen pid output van ps dat is niet beëindigd
- Zoeken naar een tekenreeks in een bestand met behulp van de lus en afsluiten
- Combineren van bash met krullen evalueren van gegevens van URL
- het Lezen van gegevens van een haven stuurt door netcat gebruik van while-lus
- ping URL met behulp van de lus
- 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
- met for loop om een array
- Gebruik for loop om een lijst met tekenreekswaarden met spaties
- met behulp van voor lus in {START..EINDE..INCREMENT} range
- met behulp van voor lus in {START..EINDE..INCREMENT} range going backward
- gebruiken voor loop met 3 delen en voorwaarde teller
- gebruik voor lus met 3 delen en meerdere Voorwaarden en acties met komma
- gebruik oneindig voor lus
- Using for loop with conditional break and continue
- gebruik for loop om bestandsnamen te lezen door globbing
- met for loop om uitvoer te lezen van find Commando
- met behulp van for loop om bestandsnamen van een map recursief te lezen
- Using for loop om recursief bestandsnamen van een map te lezen met de voorwaarde
- het draaien van de lus totdat het bestand bestaat
- met for loop gebaseerd op de uitvoer van package list Commando
- Gebruik for loop om regels van een bestand
- met for loop om regels van een bestand te lezen met voorwaardelijke overeenkomst
- met behulp van while loop met een teller
- gebruik while loop met gebruikersinvoer en sluit wanneer u afsluiten selecteert in het menu
- het combineren van while loops met getopts
- met behulp van until loop met een teller
- beëindigen tot lus gebaseerd op gebruikersinvoer
- met geneste terwijl lussen
- gebruik tot lus om te slapen/wachten op achtergrondtaak gestart in script
- while loop gebruiken om pid te lezen van ps-uitvoer die niet is beëindigd
- zoeken naar een tekenreeks in een bestand met behulp van loop en sluit
- combineer bash met curl om gegevens van URL
- lezen van gegevens van een poort die door netcat wordt verzonden met behulp van de lus
- ping URL met behulp van een lus
- Top draaien in batchmodus met behulp van een loop en recorduitvoer
- conclusie
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.
# 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.
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.
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.
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.
#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.
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.
# 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.
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.
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.
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.
# 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.
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.
# 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.
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”
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
voer het script uit.
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’.
# 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.
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.
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.
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.
# 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.
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.
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.
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.
# initialize counter
counter = 1
# Itereer de lus 5 keer
terwijl
do
echo “Counter value = $counter”
((counter++))
done
Output:
voer het script uit.
Ga naar boven
‘ 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.
# 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.
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.
# 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.
voer het script uit met een ongeldige optie.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
controleer de uitvoer van het script.
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.
# 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.
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
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.
# 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.
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.
# 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.
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.
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.
open vervolgens een andere terminal en voer het volgende commando uit om te communiceren met
de eerste terminal.
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.
# 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.
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.
# 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.
Voer nu het script uit.
voer het volgende commando uit om de uitvoer van het script te bekijken.
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.