30 Bash loop eksempler

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:

  1. Bruke for loop til å lese elementer i en liste
  2. Bruke for loop til å lese en matrise
  3. Bruke for loop til å lese en liste over strengverdier med mellomrom
  4. Bruke for loop i {START..SLUTT..INKREMENT} område
  5. Bruker for sløyfe i {START..SLUTT..INKREMENT} område går bakover
  6. Bruker for sløyfe med 3 deler og tilstandsteller
  7. Bruker for sløyfe med 3 deler Og flere forhold og handlinger med komma
  8. Bruker Uendelig for sløyfe
  9. Bruker For sløyfe med betinget pause og fortsett
  10. Bruker for sløyfe for å lese filnavn ved globbing
  11. Bruker For sløyfe for å LESE utdata fra finn kommando
  12. Bruke for loop for å lese filnavn av en katalog rekursivt
  13. bruke for loop for å lese filnavn av en katalog rekursivt med betingelse
  14. kjører sløyfen til fil eksisterer
  15. Bruke for loop basert på utdata fra pakkeliste kommandoen
  16. Bruke for loop for å lese hver linje i en fil
  17. Bruke for loop for å lese hver linje i en fil basert på en betinget kamp
  18. Bruke mens loop med en teller
  19. Bruke mens loop med brukerinngang Og avslutt når du velger avslutt fra en meny
  20. kombinere mens looper med getopts
  21. bruke til loop med en teller
  22. avslutte til loop basert på brukerinngang
  23. bruke nestet mens looper
  24. bruke til loop å sove/vente På Bakgrunnsoppgave pid fra ps-utgang som ikke er avsluttet
  25. Søker etter en streng i en fil ved hjelp av loop og exit
  26. Kombinere bash med curl for å evaluere data fra URL
  27. Lese data fra en port send av netcat ved hjelp av mens loop
  28. ping URL ved hjelp av loop
  29. Kjører topp i batch-modus ved hjelp av en loop og record output

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.

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

$ bash for1.sh

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.

#!/bin/bash
språk=(«Bash Perl Python PHP»)
for språk i $språk
gjør
hvis

ekko «$språk er et webprogrammeringsspråk»
ekko «$språk er et skriptspråk»
fi
ferdig

utgang:

kjør Skriptet.

$ bash for2.sh

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.

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

$ bash for3.sh

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.

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

$ bash for4.sh

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.

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

$ bash for5.sh

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.

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

$ bash for6.sh

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.

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

$ bash for7.sh

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»

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

$ bash for8.sh

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.

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

$ bash for9.sh

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

Bruk for loop for å lese filnavn ved å globbe

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.

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

$ bash for110.sh

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.

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

$ bash for11.sh

følgende utdata vises etter å ha kjørt skriptet.

Gå Til Toppen

Bruke for loop å lese filnavn av en katalog rekursivt

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

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

$ bash for12.sh

følgende utdata vises etter å ha kjørt skriptet.

Gå Til Toppen

Bruke for loop å lese filnavn av en katalog rekursivt med betingelsen

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

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

$ ls mydir

Kjør skriptet.

$ bash for13.sh

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

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

$ bash loop14.sh

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.

# Angi feltskilletegn
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.

$ bash for15.sh

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.

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

$ bash for16.sh

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.

# Les filen
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.

$ bash for17.sh

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.

#!/bin / bash
# Initialize counter
counter=1
# Iterate sløyfen for 5 ganger
mens
gjør
ekko «Counter value = $counter»
((counter++))
ferdig

Utgang:

Kjør skriptet.

$ bash loop18.sh

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.

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

$ bash loop19.sh

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.

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

$ bash loop20.sh -arc

Kjør skriptet med et ugyldig alternativ.

$ bash loop20.sh-h

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.

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

$ bash loop21.sh

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.

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

$ bash loop22.sh

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.

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

$ bash loop23.sh

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.

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

$ bash loop24.sh

Kontroller utgangen av skriptet.

$ cat utgang.txt

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.

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

$ bash loop25.sh

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

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

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

$ bash loop26.sh

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.

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

$ bash loop27.sh

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.

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

$ bash loop28.sh

deretter åpner du en annen terminal og kjører følgende kommando for å kommunisere med

den første terminalen.

$ nc localhost 1234

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

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

$ bash loop29.sh

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.

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

$ ps

kjør nå skriptet.

$ bash loop30.sh

Kjør følgende kommando for å vise skriptutgangen.

$ cat utgang.txt

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.

More: