Tre typer løkker brukes i bash for ulike formål. Disse er for, mens og til sløyfer. De forskjellige bruksområdene til disse løkkene forklares ved å bruke 30 forskjellige eksempler i denne artikkelen.
Bruk Av Bash sløyfer:
- Bruke for loop til å lese elementer i en liste
- Bruke for loop til å lese en matrise
- Bruke for loop til å lese en liste over strengverdier med mellomrom
- Bruke for loop i {START..SLUTT..INKREMENT} område
- Bruker for sløyfe i {START..SLUTT..INKREMENT} område går bakover
- Bruker for sløyfe med 3 deler og tilstandsteller
- Bruker for sløyfe med 3 deler Og flere forhold og handlinger med komma
- Bruker Uendelig for sløyfe
- Bruker For sløyfe med betinget pause og fortsett
- Bruker for sløyfe for å lese filnavn ved globbing
- Bruker For sløyfe for å LESE utdata fra finn kommando
- Bruke for loop for å lese filnavn av en katalog rekursivt
- bruke for loop for å lese filnavn av en katalog rekursivt med betingelse
- kjører sløyfen til fil eksisterer
- Bruke for loop basert på utdata fra pakkeliste kommandoen
- Bruke for loop for å lese hver linje i en fil
- Bruke for loop for å lese hver linje i en fil basert på en betinget kamp
- Bruke mens loop med en teller
- Bruke mens loop med brukerinngang Og avslutt når du velger avslutt fra en meny
- kombinere mens looper med getopts
- bruke til loop med en teller
- avslutte til loop basert på brukerinngang
- bruke nestet mens looper
- bruke til loop å sove/vente På Bakgrunnsoppgave pid fra ps-utgang som ikke er avsluttet
- Søker etter en streng i en fil ved hjelp av loop og exit
- Kombinere bash med curl for å evaluere data fra URL
- Lese data fra en port send av netcat ved hjelp av mens loop
- ping URL ved hjelp av loop
- Kjører topp i batch-modus ved hjelp av en loop og record output
- bruke for loop for å lese elementer i en liste
- Bruke for loop for å lese en matrise
- Bruk for loop til å lese en liste over strengverdier med mellomrom
- Bruk for sløyfe i {START..SLUTT..INKREMENT} range
- Bruk for sløyfe i {START..SLUTT..INKREMENT} område går bakover
- Bruk for loop med 3 deler og tilstandsteller
- Bruke for loop med 3 deler og flere forhold og handlinger med komma
- Bruk Uendelig for sløyfe
- Bruke for loop med betinget pause og fortsett
- Bruk for loop for å lese filnavn ved å globbe
- Bruk for loop for å lese utdata fra find command
- Bruke for loop å lese filnavn av en katalog rekursivt
- Bruke for loop å lese filnavn av en katalog rekursivt med betingelsen
- Kjører sløyfen til filen finnes
- Bruk for loop basert på utdata fra pakkeliste-kommandoen
- Bruke for loop å lese linjer av en fil
- Bruk for loop for å lese linjer i en fil med betinget samsvar
- Bruke mens loop med en teller
- Bruk while loop med brukerinngang og avslutt når du velger avslutt fra menyen
- Kombinere mens looper med getopts
- Bruk til loop med en teller
- Avslutt til loop basert på brukerinngang
- Ved hjelp av nestet mens sløyfer
- Bruk til sløyfe til å sove / vent på bakgrunnsoppgave startet i skript
- Bruk while loop for å lese pid fra ps-utgang som ikke er avsluttet
- Søke i en streng i en fil ved hjelp av loop og avslutt
- Kombiner bash med curl for å evaluere data fra URL
- Lese data fra en port send av netcat bruker mens loop
- ping URL ved hjelp av en sløyfe
- Kjører topp i batchmodus ved hjelp av en løkke og rekordutgang
- Konklusjon
bruke for loop for å lese elementer i en liste
den mest enkle bruken av ‘for’ loop er å lese en liste over streng eller numeriske data. Listen over numeriske data er iterert ved hjelp av for – in loop i følgende eksempel. Her vil fire tall bli lest i variabelen, $n i hvert trinn i løkken og trykt. Opprett en bash-fil med følgende skript og kjør fra terminalen.
# for-in loop for å lese en liste med tall
for n i 10 11 17 25
gjør
# Skriv ut hvert tall
ekko «tallet er $n»
ferdig
Utdata:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
Bruke for loop for å lese en matrise
Enhver matrisevariabel inneholder en liste over data som kan itereres veldig enkelt ved å bruke for-in loop. Følgende eksempel viser bruk av for – in loop for å lese en rekke strengdata. Her vil hver matriseverdi hente i variabelen $language og skrive ut en melding basert på språk i hver iterasjon.
språk=(«Bash Perl Python PHP»)
for språk i $språk
gjør
hvis
så
ekko «$språk er et webprogrammeringsspråk»
ekko «$språk er et skriptspråk»
fi
ferdig
utgang:
kjør Skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
Bruk for loop til å lese en liste over strengverdier med mellomrom
når en liste over en streng leses av for-in loop og en hvilken som helst strengverdi inneholder mellomrom, deles verdiene i ord basert på mellomrom hvis strengverdien ikke er sitert med et enkelt eller dobbelt anførselstegn. Følgende eksempel viser hvordan en liste over strengverdier med mellomrom kan leses av for-in loop. Her inneholder en verdi av listen plass og den skrives ut med plassen i utgangen.
# for-in loop for å lese liste over strenger med plass
for os i «Ubuntu» «Linux Mint» «Fedora» «CentOS»
gjør
#Skriv ut hver streng
ekko «Operativsystem – $os»
ferdig
Utgang:
Kjør skriptet.
her skrives strengverdien, ‘Linux Mint’ riktig ut.
Gå Til Topp
Bruk for sløyfe i {START..SLUTT..INKREMENT} range
En annen bruk av for-in loop er å lese range array. I følgende eksempel brukes a for loop til å lese et dataområde fra 10 til 30 som økes med 5 i hvert trinn. Deretter skriver skriptet ut disse tallene i området som er delbart med 10.
# Les et område som bruker for sløyfe
for num i {10..30..5}
gjør
# Kontroller at tallet er delbart med 10 eller ikke
hvis (($num%10==0 ))
deretter
ekko «$num er delbart med 10»
fi
ferdig
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Topp
Bruk for sløyfe i {START..SLUTT..INKREMENT} område går bakover
dataområdet kan leses bakover ved å bruke for – in loop der startverdien for området er større enn sluttverdien for området. I det følgende eksemplet starter området fra 50 og slutter til 30. Verdien av $num vil bli redusert med 10 i hvert trinn i løkken. Skriptet vil skrive ut disse tallene fra området som er delbare med 5 og 10.
ekko»følgende tall er delbare med 5 og 10″
# Les et område som bruker for loop
for num i {50..30..10}
gjør
# Kontroller at tallet er delbart med 5 og 10 eller ikke
hvis (($num%5==0 && $num%10==0 ))
deretter
ekko-n «$num «
fi
ferdig
ekko «Ferdig»
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
Bruk for loop med 3 deler og tilstandsteller
Bash støtter for loop med tre deler som andre standard programmeringsspråk. Den første delen inneholder initialisering, den andre delen inneholder terminering tilstand og den tredje delen inneholder økning eller reduksjon drift. Denne sløyfen brukes hovedsakelig når antall iterasjon tidligere er definert. I det folgende eksemplet vil loopen iterere for 50 ganger og beregne summen av 1 til 50. Resultatet av summeringen skrives ut som utgang.
# Initialiser variabelen
sum=0
# Loop vil iterere for 50 ganger
for (( n=1; n<=50; n++ ))
gjør
# Legg til sumverdien med neste verdi av n
((sum=$sum+$n))
ferdig
# Skriv ut resultatet
ekko «summen av 1 Til 50 er $sum»
Utgang:
Kjør skriptet.
summen av 1 til 50 vises i utgangen.
Gå Til Toppen
Bruke for loop med 3 deler og flere forhold og handlinger med komma
for loop med tre deler kan defineres med flere initialiseringer, termineringsbetingelser og handlinger. Følgende eksempel viser bruken av denne typen sløyfe. Her er $x og $ y variabler initialisert med 5 og 25. Sløyfen vil fortsette til verdien på $x er mindre enn eller lik 20 og verdien på $ y er større enn 5. Verdien av $x vil øke med 5 og verdien av $ y vil redusere med 5 i hver iterasjon av sløyfen. Den nåværende verdien på $x og $ y i hvert trinn skrives ut som utgang.
# Loop vil iterere basert på to forhold
for ((x=5, y = 25; x<=20 && y>5; x + =5, y- = 5))
gjør
ekko «den nåværende verdien av x= $ x og y= $ y»
ferdig
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
Bruk Uendelig for sløyfe
når en sløyfe er definert uten termineringsbetingelse, fungerer sløyfen som en uendelig sløyfe. Følgende eksempel viser bruk av uendelig for loop som ikke inneholder noen initialisering, avslutning og handling deler. Denne typen for loop er definert av dobbelt semikolon (; ;). Følgende skript fortsetter sløyfen til brukeren skriver ‘avslutt’ som input. Skriptet vil skrive ut et tall fra 1 til 20 som vil ta som input ellers vil det skrive ut «nummeret er utenfor rekkevidde»
# Erklære uendelig sløyfe
for (( ; ;))
gjør
# Ta en inngang
ekko «Skriv inn et tall mellom 1 til 20»
les n
# Sett termineringsbetingelsen for sløyfen
hvis
deretter
ekko «Program avsluttet»
avslutt 0
fi
# Sjekk nummerområdet
hvis (( $n < 1 || $n > 20 ))
deretter
ekko «tallet er utenfor rekkevidde»
else
ekko «tallet er $n»
fi
ferdig
utgang:
kjør skriptet.
her er 6 tatt som første inngang som er et gyldig tall, 22 er tatt som andre inngang som er et ugyldig nummer og avslutt er tatt som tredje inngang som avsluttet skriptet.
Gå Til Toppen
Bruke for loop med betinget pause og fortsett
‘fortsett’ – setningen brukes til å utelate deler av sløyfen basert på en hvilken som helst tilstand og ‘break’ – setningen brukes til å avslutte sløyfen basert på en hvilken som helst tilstand. Følgende eksempel viser bruken av disse setningene i en for loop. Her brukes sløyfen til å lese en liste over strengdata, og hver verdi i listen lagres i variabelen $mat. Når verdien av $ mat er ‘Suppe’, vil den fortsette sløyfen uten å skrive ut verdien. Når verdien av $ mat Er ‘Pasta’, vil den avslutte sløyfen. Når $mat inneholder noen annen verdi enn ‘Suppe ‘ og’ Pasta’, vil den skrive ut verdien. Så vil skriptet skrive ut to verdier fra listen som utgang.
# Erklære en sløyfe med en liste
for mat I Pizza Suppe Burger Pasta Nudler
gjør
# Sett betingelse for fortsett
hvis
deretter
fortsett
# Sett betingelse for pause
elif
deretter
break
else
ekko «$mat er min favoritt»
fi
Ferdig
Utdata:
kjør skriptet.
her er to verdier utelatt fra listen. ‘Suppe’ skrives ikke ut for fortsett-setningen, Og ‘Pasta’ skrives ikke ut for pause-setningen.
Gå Til Toppen
Filnavn eller det bestemte innholdet i en fil kan søkes ved å bruke globbing. Den bruker ulike typer jokertegn for å matche alle filnavn eller søke innhold i filen. Alle filer med txt forlengelse av gjeldende plassering søkes trykt av følgende eksempel. Når du vil kjøre skriptet, vil alle matchende filnavn skrives ut uten ny linje som utgang.
# Loop vil søke i alle tekstfiler og lagre hvert filnavn i $ file
for fil i»*.txt»;
gjør
# Skriv ut filnavnet
ekko $ fil;
ferdig
Utdata:
Kjør skriptet.
Gå Til Toppen
Bruk for loop for å lese utdata fra find command
‘find’ – kommandoen brukes til forskjellige formål i bash. I følgende eksempel brukes kommandoen finn til å lese alle tekstfilnavn fra gjeldende plassering. Her,’ – navn ‘ mulighet til å bruke for case-sensitive søk. Så vil skriptet skrive ut de filnavnene til den nåværende plasseringen som har ‘.txt ‘ forlengelse med noe navn. Her brukes ifs-variabelen til å definere ny linje som feltskille og skrive ut verdien av $ fil i hver linje.
# Sett feltskilletegn
ifs=$’\n’;
# Les filene i en katalog
for fil i $(finn-navn «*.txt»); gjør
ekko $fil
ferdig
# Uunset feltskilletegn
fjern ifs;
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
‘finn’ kommandoen kan brukes til å lese alle filer og undermapper av en bestemt katalog. Følgende eksempel viser bruk av’ finn ‘- kommandoen for å lese alle filnavn og kataloger under’ mydir ‘ – katalogen. Her brukes ifs-variabelen til å skrive ut verdien av $filnavn med ‘newline’ som forrige eksempel.
# Sett feltskilletegn
ifs=$’\n’;
# Les filene i en katalog
for filnavn i $(finn «mydir»)
gjør
ekko «$filnavn»
ferdig
# Fjern feltskilletegn
fjern ifs;
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
‘for’ loop med ‘finn’ kommandoen kan brukes til å skrive ut som+
e bestemte filnavn av en katalog basert på en hvilken som helst betingelse. ‘finn’ – kommandoen brukes med en betingelse i følgende eksempel. Det vil søke bare tekst filnavn av mydir katalogen. Her,’ – iname ‘alternativet brukes med ‘finn’ kommando for case incensitive søk. Det betyr at alle filer med utvidelsen ‘ txt ‘eller’ TXT ‘ vil bli matchet og skrevet ut som utgang. Her brukes ifs-variabelen til å skrive ut verdien av $filnavn med ‘newline’ som forrige eksempel.
# Set field separator
IFS=$’\n’;
# Les alle tekstfiler i en katalog
for filnavn i $(finn mydir-iname’*.’); gjør
ekko «$ filnavn»
ferdig
# Fjern feltskilletegn
fjern ifs;
Utgang:
Kjør følgende kommando for å vise listen over filer og mapper i mydir-katalogen.
Kjør skriptet.
det er tre tekstfiler i katalogen som vises i utgangen.
Gå Til Toppen
Kjører sløyfen til filen finnes
alle filnavn finnes eller ikke er merket i følgende eksempel ved hjelp av uendelig for loop. I dette skriptet vil et filnavn ta som inngang i hver iterasjon av løkken og teste filnavnet eksisterer i gjeldende plassering eller ikke. Hvis filnavnet eksisterer, vil skriptet skrive ut «File exists» og fortsette sløyfen, ellers vil den avslutte sløyfen ved å skrive ut meldingen «File does not exist».
# Definer uendelig sløyfe
for(( ; ; ))
gjør
# Skriv inn et filnavn
ekko «Skriv inn et filnavn»
les fil
# Kontroller at filen eksisterer eller ikke
hvis
deretter
ekko «Filnavn eksisterer ikke»
avslutt 0
else
ekko «filen eksisterer»
fi
ferdig
Utdata:
kjør skriptet.
et eksisterende filnavn gis som første inngang og et ikke-eksisterende filnavn gis som andre utgang som avsluttet skriptet.
Gå Til Toppen
Bruk for loop basert på utdata fra pakkeliste-kommandoen
informasjonen om de installerte pakkene i systemet kan hentes av kommandoen ‘apt list – – installed’. ‘for’ loop brukes i følgende eksempel til å lese den installerte pakkeinformasjonen fra kommandoen pakkeliste og skrive ut hver pakkeinformasjonen i hver linje. Ifs-variabelen brukes her til å skrive ut verdien av $line med’ newline ‘ som forrige eksempel.
ifs=$’\n’;
# Les fil linje for linje
for linje i $(apt list –installert)
gjør
ekko «$linje »
ferdig
# Fjern feltskille
fjern ifs;
Utgang:
Kjør skriptet.
utgangen viser listen over installerte pakker.
Gå Til Toppen
Bruke for loop å lese linjer av en fil
Det er mange måter å lese en fil i bash. ‘cat’ kommandoen brukes i følgende eksempel for å lese filen, temp.txt. Hver linje i filen vil lagre i variabelen, $line og skrive ut linjen i hver iterasjon av for loop. Ifs-variabelen brukes her til å skrive ut verdien av $line med’ newline ‘ som forrige eksempel.
# Sett feltskilletegn
ifs=$’\n’;
# Les fil linje for linje
for linje i $(cat temp.txt)
gjør
ekko «$ linje»
ferdig
# Fjern feltskilletegn
fjern ifs;
Utgang:
Kjør skriptet.
Gå Til Toppen
Bruk for loop for å lese linjer i en fil med betinget samsvar
hvis du bare vil skrive ut bestemte linjer fra en fil, må du legge til i sløyfen som brukes til å lese filen. Følgende eksempel skriver ut formatert utdataene for hver linje av ‘ ukedag.txt ‘ fil basert på en betingelse. Hvis en linje i filen inneholder verdien, ‘søndag’, vil den skrive ut ‘ferie’ – melding, ellers vil den skrive ut’ arbeidsdag ‘ – melding.
for linje i $(cat weekday.Txt)
gjør
#Sammenlign verdien med en strengdata
Hvis
deretter
ekko «$line er en ferie «
else
ekko» $ line er en arbeidsdag »
fi
ferdig
Utgang:
Kjør skriptet.
følgende utdata vises etter å ha kjørt skriptet.
Gå Til Toppen
Bruke mens loop med en teller
$counter variabel brukes noen sløyfe for å kontrollere iterasjonen av sløyfen. Folgende eksempel viser bruken av mens loop med telleren. Her er $counter initialisert til 1 og mens loop vil iterere 5 ganger og skrive ut verdien av $counter i hver iterasjon. $counter økes med 1 i hvert trinn for å nå termineringsbetingelsen for sløyfen.
# Initialize counter
counter=1
# Iterate sløyfen for 5 ganger
mens
gjør
ekko «Counter value = $counter»
((counter++))
ferdig
Utgang:
Kjør skriptet.
Gå Til Toppen
Bruk while loop med brukerinngang og avslutt når du velger avslutt fra menyen
‘while’ loop brukes i følgende eksempel for å vise en meny med 5 alternativer. De fire første alternativene brukes til å utføre fire aritmetiske operasjoner basert på brukerens innspill, og det siste alternativet brukes til å avslutte fra skriptet. Menyen vil vises etter å gi to tall som input. Hvis brukeren velger ‘1’, blir inntastingsnumrene lagt til. Hvis brukeren velger ‘2’, trekkes det andre inndatanummeret fra det første inndatanummeret. Hvis brukeren velger ‘3’, blir inngangsnumrene multiplisert, og hvis brukeren velger ‘4’, blir det første inngangsnummeret delt med det andre inngangsnummeret.
# Ta to tall
ekko «Skriv inn et tall»
les n1
ekko «Skriv inn et tall»
les n2
# Erklære en uendelig sløyfe
mens sant
gjør
# Vis menyen
ekko » 1. Tillegg «
ekko » 2. Subtraksjon «
ekko » 3. Multiplikasjon «
ekko » 4. Divisjon «
ekko » 5. Avslutt «
echo-n » Velg et tall fra :»
les inngang
# Utfør operasjonen basert på den valgte verdien
if ]
deretter
((resultat=n1+n2))
elif ]
deretter
((resultat=n1*$n2))
elif ]
deretter
((resultat=$n1 * $n2))
elif ]
deretter
((resultat=$n1/$n2))
elif ]
deretter
avslutt 0
else
ekko «ugyldig inngang»
fi
ekko «resultatet er $ resultat»
ferdig
utgang:
kjør skriptet.
følgende utdata vises når du har valgt alternativ 2 og 5.
Gå Til Toppen
Kombinere mens looper med getopts
‘getopts’ er en innebygd funksjon av bash som brukes til å lese argumenter og alternativer i bash-skriptet. Folgende eksempel viser bruken av getopts-funksjonen som brukes i en stund loop. Her brukes tre alternativverdier med getopts. Disse er’ a’,’ r ‘og’c’. Tre forskjellige meldinger vil bli skrevet ut for disse alternativene.
# Les alternativet og lagre i en variabel
mens getopts» arc » – alternativet; gjør
# Sjekk alternativverdien
case ${option} i
a ) #alternativ a
ekko «Prosessen avbrytes»
;;
r ) #alternativ r
ekko «Prosessen startes på nytt»
;;
c) # alternativ c
ekko «Prosessen fortsetter»
;;
\? ) # ugyldig alternativ
ekko » Bruk: or or «
;;
esac
ferdig
Utgang:
Kjør skriptet med gyldige alternativer.
Kjør skriptet med et ugyldig alternativ.
Gå Til Toppen
Bruk til loop med en teller
Til loop kan brukes med en teller som mens loop som vises før. Følgende eksempel viser bruken av inntil sløyfe med en teller. Her brukes $counter-variabelen til å kontrollere iterasjonen av sløyfen som initialiseres til 1. Den inntil sløyfen vil fortsette til verdien av $teller til 5. Så vil sløyfen iterere for 6 ganger og skrive ut verdien $counter i hvert trinn. $ counter vil bli redusert med 1 i hvert trinn for å nå termineringsbetingelsen for sløyfen.
# Initializ telleren
teller=10
# Iterere sløyfen for 6 ganger
til
gjør
ekko «den nåværende verdien av teller = $teller»
((teller–))
ferdig
Utgang:
Kjør skriptet .
Gå Til Toppen
Avslutt til loop basert på brukerinngang
enhver loop avsluttes basert på en bestemt tilstand. Hvordan til loop kan avsluttes basert pa brukerinngang, vises i folgende eksempel. I henhold til oppsigelsesbetingelsen avsluttes sløyfen når verdien av $nummer er større enn 50. Verdien av $nummer økes ikke inne i sløyfen. Så., vil sløyfen fortsette å ta innspill fra brukeren til et antall på mer enn 50 er tatt som inngang.
# Initialiser nummer
tall=0
# Sett mønsteret for numeriske data
mønster=’^+$’
# Angi termineringsbetingelsen
til
gjør
echo-n «Skriv inn et tall:»
les nummer
# Kontroller at inngangsverdien er nummer eller ikke
hvis ! ]
deretter
ekko » feil: Ikke et tall «
tall=0
else
ekko «Du har angitt $nummer»
fi
ferdig
Utgang:
Kjør skriptet.
skriptet vil gjenta sløyfen igjen for inngangsverdien 4, vise feilmeldingen for inngangsverdien, gg og avslutte sløyfen for inngangsverdien 54.
Gå Til Toppen
Ved hjelp av nestet mens sløyfer
når en sløyfe er erklært inne i en annen sløyfe, kalles den en uendelig sløyfe. Følgende eksempel viser bruken av nestet mens loop. Her vil den første mens sløyfen iterere for 2 ganger, og den andre mens sløyfen inne i den første sløyfen vil iterere for tre ganger. Den totale iterasjonen av løkkene er 2×3=6 ganger. $i og $ j variabler brukes til å kontrollere iterasjonen av disse løkkene, og verdiene av disse variablene i hvert trinn skrives ut som utgang.
# Initialiser i og j
i=1
j=1
# Sett termineringsbetingelse for i
mens
gjør
# Sett termineringsbetingelse for j
mens
gjør
# Skriv ut gjeldende verdi for i og j
printf «i=%d, j=%d\n» $i $j
((j++))
ferdig
j=1
((i++))
ferdig
utdata:
kjør skriptet.
Gå Til Toppen
Bruk til sløyfe til å sove / vent på bakgrunnsoppgave startet i skript
enhver prosess kan kjøres i bakgrunnen ved å bruke ‘&’ – symbolet. Hvordan en prosess kan kjøres i bakgrunnen ved å bruke til loop og avslutte loop basert på tiden som er angitt i sleep-kommandoen, vises i dette eksemplet. Her brukes $ cnt variabel til å avslutte sløyfen. Sløyfen vil starte bakgrunnsprosessen og skrive utdataene i en tekstfil som heter » output.txt » i 1 sekund. Etter det vil termineringsbetingelsen for sløyfen sjekke og den vil returnere falsk. Deretter skriver skriptet en melding, «Sleeping…» og går ut av skriptet etter 3 sekunder.
# Initialize counter
cnt=1
# Set termination condition
til
gjør
ekko «Bakgrunnsprosessen kjører»;
# Vent på 1 sekund
sove 1;
((cnt++))
ferdig > utdata.txt &
# Vent i 3 sekunder
ekko » Sover…»
søvn 3
Utgang:
Kjør skriptet.
Kontroller utgangen av skriptet.
Gå Til Toppen
Bruk while loop for å lese pid fra ps-utgang som ikke er avsluttet
‘ ps ‘ – kommandoen brukes til å få informasjon om alle kjørende prosesser i systemet. Det gir detaljert informasjon om alle kjørende prosess som bruker-id, PID, cpu-bruk, minnebruk, etc. Følgende eksempel viser hvordan en while loop kan brukes til å lese kjørende prosessinformasjon relatert til ‘apache’. Her brukes ifs-variabelen til å skrive UT PID for hver prosess med en ny linje. Deretter vil det vente på at brukeren trykker på en tast for å gå ut av skriptet.
# Set field separator
ifs=’ ‘
mens
gjør
# Hent alle kjørende prosess-id for apache
pid= ‘ps-ef /grep «apache» / awk ‘{print $2 » prosessen kjører . ..»}»
ekko $pid
# Vent på 1 sekund
sove 1
# Trykk på en tast for å avslutte sløyfen
ekko «Trykk på en tast for å avslutte»
hvis lese-r-N 1 ; deretter
bryte
fi
ferdig
# Fjern feltskilletegn
fjern ifs
utdata:
kjør skriptet.
PID for all kjørende prosess basert på ‘apache’ vises i utgangen.
Gå Til Toppen
Søke i en streng i en fil ved hjelp av loop og avslutt
Opprett en fil med navnet month.txt med følgende innhold for å teste bash-skriptet gitt nedenfor.
måned.txt
February
March
April
May
June
July
August
September
October
November
December
‘mens’ loop brukes i følgende eksempel for å lese måned.txt fil linje for linje. Hvis en linje inneholder verdien, «juni», vil den skrive ut «Nyt sommerferie» og avslutte fra skriptet, ellers vil den skrive ut verdien av $line.
# Sett filnavnet til å lese
filnavn=»måned.txt»
# Les fil linje for linje
mens ifs= les-r linje
gjør
# Sjekk verdien av linjen er lik juni
# Avslutt programmet hvis betingelsen er sant
hvis ];
deretter
ekko «Nyt Sommerferie»
avslutt 0
else
ekko $linje
fi
ferdig < $filnavn
utdata:
kjør skriptet.
her finnes’ juni ‘ i filmåneden.txt som avslutter sløyfen. Så, andre månedsnavn etter ‘juni’ vil ikke lese av løkken.
Gå Til Toppen
Kombiner bash med curl for å evaluere data fra URL
Data kan overføres til eller fra hvilken som helst nettverksserver i bash ved å bruke ‘curl’ – kommando med hvilken som helst støttet protokoll SOM HTTP, FTP, TELNET, etc. Det er et kommandolinjeverktøy. Hvordan’ curl ‘ – kommandoen kan brukes til å evaluere data fra URL ved hjelp av for loop, vises i følgende eksempel. Her, for loop vil lese en liste over url og passere HVER URL verdi i curl og skrive ut data mottatt fra URL.
# Les hver URL fra listen
for url i «yahoo.com» «youtube.com»
gjør
# Skriv UT HTTP-svarkode for hver URL
ekko $url; curl-v-m 5-s $1″ $ url » | grep HTTP/1.1;
ferdig
Utdata:
Kjør skriptet.
Gå Til Toppen
Lese data fra en port send av netcat bruker mens loop
‘netcat’ kommando brukes til å lese og skrive data over nettverket ved hjelp av tcp eller udp-protokoll. ‘nc’ kommando brukes i bash å kjøre ‘netcat’ kommando. Folgende eksempel viser bruken av’ nc ‘ – kommandoen i while loop. Her vil skriptet prøve å koble til port 1234 ved hjelp av nc-kommandoen, og det vil skrive ut en melding i den andre terminalen hvis den kan koble til. Du må åpne et annet terminalvindu eller-fane for å kjøre kommandoen, ‘nc localhost 1234’ for å opprette en tilkobling. Etter at tilkoblingen er opprettet, kan en melding overføres fra en terminal til en annen terminal.
ekko » Lytter på port 1234 …»
# Les meldingen som sendes av netcat ved port 1234
mens du leser tekst
gjør
# Avslutt sløyfen hvis den mottatte meldingen er «avslutt»
hvis ; deretter
ekko «Bye»
break
else
ekko «$tekst»
fi
# Skriv ut melding når porten er tilkoblet
ferdig < <((printf «velkommen.\r \ nskriv noen melding :») / nc-l 1234)
Utgang:
Kjør skriptet i en terminal for å starte lyttingen ved porten 1234.
deretter åpner du en annen terminal og kjører følgende kommando for å kommunisere med
den første terminalen.
det vil vise en velkomstmelding i den andre terminalen. Hvis brukeren skriver noe i den andre terminalen, vil den bli vist i den første terminalen. Når brukeren skriver ‘quit’ i den andre terminalen, avsluttes skriptet ved å vise en melding, ‘ Bye ‘ i den første terminalen.
Gå Til Toppen
ping URL ved hjelp av en sløyfe
du kan finne ut hvilken som helst nettside er live eller ikke ved å utføre ‘ping’ – kommandoen med NETTADRESSEN til nettstedet. ‘ping’ kommandoen brukes med ‘google.com’ i følgende eksempel for å sjekke Internett-tilkoblingen fungerer eller ikke. Mens loop vil iterere 5 ganger i skriptet og prøve å pinge google.com. Hvis serveren svarer, vil den skrive ut «Internett fungerer» og avslutte sløyfen. Hvis sløyfen itererer 5 ganger og ikke får noen serverrespons, vil den skrive ut «Ingen Internett-tilkobling».
# Sett telleren
telle=5
mens ]
gjør
# Prøv å pinge google.com
ping-c 1 google.com
c=$?
# Sjekk statuskoden
hvis]
deretter
ekko «Internett fungerer»
avslutt 0
fi
# Reduser telleren
((count–))
ferdig
ekko «Ingen Internett-tilkobling»
Utgang:
Kjør skriptet.
Du får en lignende utgang hvis internett-tilkoblingen din fungerer som den skal.
Gå Til Toppen
Kjører topp i batchmodus ved hjelp av en løkke og rekordutgang
‘topp’ kommando er Et Linux-administrativt verktøy som brukes til å undersøke bruken av systemressurser, administrere forskjellige oppgaver og overvåke kjørende prosesser. Hvordan du kan kjøre ‘topp’ kommando i batchmodus ved hjelp av loop og lagre postene i en tekstfil, vises i følgende eksempel. Her brukes-b-alternativet til å starte kommandoen ‘topp’ i batchmodus, og-p-alternativet brukes til å angi prosess-id-en du vil overvåke. Utgangen av kommandoen ‘topp’ vil bli lagret i utdata.txt-fil.
# Loop vil iterere for 5 ganger og utfore toppkommandoen
for ((i=0; i < 5; i++))
do
top-b-p 2875-n1 | tail -1> > utgang.txt
ferdig
Utgang:
kjør først følgende kommando for å finne listen over kjørende prosesser.
kjør nå skriptet.
Kjør følgende kommando for å vise skriptutgangen.
Gå Til Toppen
Konklusjon
Looper kan brukes i bash på ulike måter for å gjøre forskjellige typer enkle eller komplekse oppgaver. Hvordan tre typer løkker kan brukes i bash for forskjellige oppgaver som å hente liste eller array, lese filer eller kommandoutgang, etc. er vist i denne artikkelen ved hjelp av svært enkle eksempler. Jeg håper, disse eksemplene vil hjelpe leseren til å forstå bruken av bash loop tydeligere.