Bash Scripting – While Loop

Bash Scripting – While Loop

EN mens loop er en setning som itererer over en kodeblokk til den spesifiserte tilstanden blir evaluert til falsk. Vi kan bruke denne setningen eller løkken i programmet vårt når vi ikke vet hvor mange ganger tilstanden skal evalueres til sann før den evalueres til usann.

Innholdsfortegnelse

Syntaksen til en while-løkke i BASH-skripting

while [ condition ]; do  # statements  # commands done 

Hvis betingelsen er sann, utføres kommandoene inne i while-blokken og gjentas etter kontroll av betingelsen. Også hvis betingelsen er usann, blir setningene i while-blokken hoppet over og setningene etter while-blokken blir utført.



Looping Eksempel med while-setning i Linux

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash

a=7
while [ $a -gt 4 ];
gjøre
ekko $a
((en-))
ferdig
ekko Ut av loopen

Forklaring:

  • #!/usr/bin/bash> : Denne linjen kalles en shebang og indikerer banen til tolken som skal brukes for å utføre skriptet. I dette tilfellet spesifiserer det at Bash-skallet skal brukes.
  • a=7> : Initialiserer en variabel med navn a> med verdien 7.
  • while [ $a -gt 4 ];> : Starter en while-løkke som fortsetter så lenge verdien av a> er større enn 4.
  • do> : Markerer begynnelsen av kodeblokken som skal utføres innenfor while-løkken.
  • echo $a> : Skriver ut gjeldende verdi av variabelen a> til konsollen.
  • ((a--))> : Reduserer verdien av a> av 1. Dette er en stenografisk måte å skrive på a=$((a - 1))> .
  • done> : Markerer slutten av kodeblokken for while-løkken.
  • echo 'Out of the loop'> : Skriver ut av sløyfen til konsollen etter at while-sløyfen er fullført.
Mens Loop i Linux

Mens Loop i Linux

Oppsummert initialiserer dette skriptet en variabel ` a`> med verdien 7, går deretter inn i en while-løkke som fortsetter så lenge som ` a`> er større enn 4. Innenfor loopen skriver den ut gjeldende verdi på ` a`> og reduserer den med 1 i hver iterasjon. En gang ` a`> blir 4 eller mindre, går løkken ut, og skriptet skrives ut av løkken til konsollen.

Leser en fil med en while-løkke

Vi kan lese en fil med en while-løkke i BASH. Ved å analysere visse parametere til while-løkkebetingelsen, kan vi iterere over filen linje for linje eller etter andre grupper som tegn eller ord.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash

file=temp.txt
mens les -r linje;
gjøre
ekko $line
ferdig <$fil

Forklaring:

  • #!/usr/bin/bash> : Denne shebang-linjen spesifiserer at Bash-skallet skal brukes til å tolke skriptet.
  • file=temp.txt> : Tildeler strengen temp.txt til variabelen file> , som representerer navnet på filen som skal leses.
  • while read -r line;> : Starter en while-løkke som leser hver linje fra den angitte filen.
  • do> : Markerer begynnelsen av kodeblokken som skal utføres innenfor while-løkken.
  • echo $line> : Skriver ut innholdet i variabelen line> , som representerer gjeldende linje som leses fra filen, til konsollen.
  • done> : Markerer slutten av kodeblokken for while-løkken.
  • <'$file'> : Omdirigerer inngangen til while-løkken til å komme fra den spesifiserte filen, i dette tilfellet temp.txt.

Oppsummert leser dette skriptet hver linje fra filen temp.txt og skriver den ut til konsollen til det ikke er flere linjer igjen i filen. De -r> alternativet med read> kommandoen brukes for å sikre at omvendte skråstreker i inndata behandles som bokstavelige tegn.

les fil med while-setning i Linux

les fil med while-setning i Linux

Vi bruker kommandoen read for å faktisk hente linjene eller tegnene fra filen. Lesekommandoen sendes med -r-argumentet som ignorerer escape av tegn hvis vises, og derfor analyseres det som sin. Vi leser en linje fra en fil nevnt etter den ferdige uttalelsen. Read-kommandoen leser en linje fra den nevnte filen og while-løkkene slutter når den siste linjen fra filen er lest (ingen linje er igjen å lese).

Slik kan vi lese innholdet i filen ved å bruke en while-løkke i BASH.

Uendelig while-løkke

For å lage en uendelig sløyfe ved hjelp av en while loop-setning. Vi trenger ikke å sette noen betingelse i while-løkken, og derfor itererer løkken uendelig. Nedenfor er eksempelet på en uendelig mens-løkke:

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash
samtidig som :
gjøre
ekko En uendelig loop
# Vi kan trykke Ctrl + C for å avslutte skriptet
ferdig

Forklaring:

  • #!/usr/bin/bash> : Shebang-linjen spesifiserer at Bash-skallet skal brukes til å tolke skriptet.
  • while :> : Starter en uendelig sløyfe. De :> (kolon) er en innebygd kommando som alltid returnerer sann, og skaper effektivt en uendelig løkke.
  • do> : Markerer begynnelsen av kodeblokken som skal utføres innenfor den uendelige sløyfen.
  • echo 'An Infinite loop'> : Skriver ut strengen An Infinite loop til konsollen i hver iterasjon av loopen.
  • # We can press Ctrl + C to exit the script> : Dette er en kommentar som indikerer at du kan avbryte skriptet ved å trykke Ctrl + C i terminalen. Ctrl + C er en vanlig måte å avbryte og avslutte kjørende skript i terminalen.
  • done> : Markerer slutten av kodeblokken for den uendelige sløyfen.

Oppsummert skaper dette skriptet en uendelig sløyfe som kontinuerlig ekkoer meldingen An Infinite loop til konsollen. Sløyfen kan avbrytes og skriptet avsluttes ved å trykke Ctrl + C i terminalen.

Uendelig loop ved å bruke While Statement i Linux

Uendelig loop ved å bruke While Statement i Linux

Dermed kommer while-løkken i skriptet til å iterere i uendelig tid. Vi kan bryte sløyfen eller skriptet manuelt med CTRL + C.

Mens loop for å iterere et fast antall ganger

Vi kan bruke en while-løkke til å iterere over et fast antall ganger, vi kan sette betingelsen til å være -le eller mindre enn lik et tall, og løkken vil iterere til iteratoren er mindre enn eller lik tallet gitt i tilstanden. Vi må også øke iteratoren manuelt for å holde loop-iteratoren tikkende, ellers vil loopen fortsette for alltid.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash

i=1

# tallet 4 kan være grensen til

# gjenta loopen

while [ $i -le 4 ];
gjøre
ekko $i
((i++))
ferdig

Forklaring:

  • #!/usr/bin/bash> : Shebang-linjen spesifiserer at Bash-skallet skal brukes til å tolke skriptet.
  • i=1> : Initialiserer en variabel med navn i> med verdien 1.
  • while [ $i -le 4 ];> : Starter en while-løkke som fortsetter så lenge verdien av i> er mindre enn eller lik 4.
  • do> : Markerer begynnelsen av kodeblokken som skal utføres innenfor while-løkken.
  • echo $i> : Skriver ut gjeldende verdi av variabelen i> til konsollen.
  • ((i++))> : Øker verdien av i> av 1. Dette er en stenografisk måte å skrive på i=$((i + 1))> .
  • done> : Markerer slutten av kodeblokken for while-løkken.
mens loop i Linux

mens loop i Linux

I eksemplet ovenfor kan vi se at loopen itererer et definert antall ganger. Ettersom vi har initialisert telleren til 1 og betingelsen er å iterere sløyfen til iteratoren er mindre enn eller lik tallet i dette tilfellet 4. Dermed kan vi endre tallet i betingelsen i henhold til vårt krav.

Les kommandolinjeargumentet med getopts-alternativer

Vi kan bruke get ops-alternativer for å lese inndataene fra kommandolinjen, og hvis det er flere argumenter, kan vi sjekke dem og analysere dem en etter en ved å bruke en while-løkke. getopts er et verktøy for å få brukerinndata fra kommandolinjen. Vi kan ha flere alternativer for å analysere fra kommandolinjen, og ved å bruke getopts og while-løkker kan vi lage et profesjonelt utseende brukerinndataprogram.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/bin/bash

mens getopts n:a: OPT
gjøre
sak ${OPT} i
n) navn=${OPTARG} ;;
a) alder=${OPTARG} ;;
*) echo Ugyldig alternativ
utgang 1 ;;
esac
ferdig
printf Mitt navn er $name og jeg er $age år gammel

Forklaring:

  • #!/bin/bash> : Shebang-linjen spesifiserer at Bash-skallet skal brukes til å tolke skriptet.
  • while getopts n:a: OPT> : Starter en loop som bruker getopts> for å analysere kommandolinjealternativer. Alternativene som er spesifisert er n> og a> , som begge forventes å bli fulgt av et argument.
  • do> : Markerer begynnelsen av kodeblokken som skal utføres i løkken.
  • case '${OPT}' in> : Starter en sakserklæring som evaluerer verdien av alternativet som oppstår av getopts> .
  • n) name=${OPTARG};;> : Hvis alternativet er -n> , tildeler verdien av det tilsvarende argumentet til variabelen name> .
  • a) age=${OPTARG};;> : Hvis alternativet er -a> , tildeler verdien av det tilsvarende argumentet til variabelen age> .
  • *) echo 'Invalid option'> : Hvis det oppstår et ugyldig alternativ, skrives det ut en feilmelding til konsollen.
  • exit 1;;> : Går ut av skriptet med en statuskode som ikke er null, noe som indikerer en feil.
  • esac> : Avslutter saksuttalelsen.
  • done> : Markerer slutten av kodeblokken for sløyfen.
  • printf 'My name is $name and am $age years old '> : Skriver ut en formatert melding til konsollen ved å bruke verdiene for ` name`> og ` age`> hentet fra kommandolinjealternativene.
Mens loop i Linux

Mens loop i Linux

I dette tilfellet har vi to alternativer, nemlig navnet og alderen, du kan ha flere alternativer. Vi må spesifisere hvilket alternativ vi skal bruke switch case-setningene og fra kommandolinjen ved å bruke -shorthand-alternativet. I dette tilfellet har vi brukt -n for navn og -a for alder . Vi har også en standard eller ugyldig kasussjekk for å tåle at vi ikke analyserer feil argumenter. Vi kan tilordne verdien av alternativet ved å bruke OPTARG variabel som analyserer verdien gitt til alternativet.

While-løkken her brukes til å iterere til det ikke er noen alternativer sendt fra kommandolinjen. Vi sjekker for alternativene -n ​​og -a og itererer til vognretur- eller enter-tasten trykkes og det ikke er flere alternativer som skal analyseres.

C-stil mens loop

Vi kan bruke C-stilt while-løkke i BASH, variablene må evalueres med BASH-stil, men den generelle syntaksen føles som C. Vi kan bruke operatorene som , <= og så videre i tilstanden til while-løkken og derav det kalles som den C-stilte while-løkken.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim c-style-while.sh 

#!/bin/bash
i=0
mens ((i <12))
gjøre
ekko $i
((i+=2))
ferdig

c-stil-mens

c-stil-mens

I dette eksemplet kan vi se at while-løkken har en betingelse med ikke-bash-operatorer som -le, -ge, etc., i stedet bruker vi de C-stilte operatorene i betingelsen. Resten av løkken er den grunnleggende løkken som i BASH, variabelen eller iteratoren i økes med to som vi kan se i den siste setningen til løkkekroppen. Dermed går løkken over 5 ganger.

Mens loop for å utføre operasjoner på en fil

Vi kan utføre operasjoner på en fil, som å lese bare en bestemt del av en fil. Hvis vi har kolonner som er formatert på en bestemt måte, kan vi bruke variabler til å tilordne dem og skrive dem ut én rad datatid.

Her er eksempelfilnavnet wh.txt

vim wh.txt 

vi lager en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi `vim` tekstredigering.

vim file-while.sh 

Språktype utgitt

Python general 1991

Javascript web 1995

Java mobil 1995

Rust innebygd 2010

Gå backend 2007

vi lager en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi `vim` tekstredigering.

vim file-while.sh 

#!/bin/bash

mens du leser a b c
gjøre
ekko $b – $a
ferdig

Mens loop i Linux

Mens loop i Linux

I dette eksemplet har vi tre rader, vi leser innholdet ved å tilordne dem til variablene a,b og c, det kan være alt du liker, men husk å bruke dem i loop-kroppen. Vi kan velge en bestemt kolonne som b og a og kan skrive ut eller utføre alle operasjoner på dem. Dette vil imidlertid ikke gjenspeiles i filen, da de bare er de lokale skriptvariablene.

Skrive til en fil ved hjelp av en while-løkke

Vi kan skrive til en fil ved brukerinndata i en while-løkke. Vi kan bruke while-løkken til å iterere til vi manuelt går ut av loopen ved å bruke CTRL + D ved å lagre endringer i filen eller ved å CTRL + C for å unngå å skrive til filen. Vi bruker lese-kommandoen til å legge inn teksten fra kommandolinjen og analysere den til filen.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim write-wh.sh 

#! /bin/bash

file=wh.txt
echo Skriv inn innholdet i filen $file
mens du leser linje
gjøre
ekko $line>> $fil
ferdig

mens loop i Linux

mens loop i Linux

Så fra eksemplet ovenfor var vi i stand til å skrive inn tekst i en fil ved å bruke en while-løkke og lesekommando. For å gå ut av loopen og lagre endringer i filen bruker vi CTRL+D-tastene, og for å gå ut av loopen uten å lagre noe i filen kan vi bruke CTRL+C-tastene. Dermed legger vi inn teksten fra kommandolinjen til tekstfilen ved å bruke lesekommandoen og en while-løkke.

Bryt og fortsett å bruke mens loop

Break and continue er avgjørende i et program som omhandler loop-setninger da de kontrollerer flyten av loop-setningene uten noen eksplisitte betingelser.

Bryt uttalelse i While Loop

Vi bruker break-setninger for å gå ut av loopen uten å vente på at tilstanden til while-løkken skal evalueres til falsk. Denne setningen kan brukes i en sløyfeblokk. Denne kan brukes til å gå ut av en uendelig sløyfe med en programmatisk tilstand inne i sløyfen og dermed opprettholde kontrollen over sløyfen.

For eksempel har vi et skript som teller fra 1 og for alltid. Men vi kan programmatisk bryte ut av løkken ved å bruke en break-setning inne i løkken med en betingelse.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash

i=1
samtidig som :
gjøre
ekko $i
if [$i -eq 20]; deretter
echo Dette er slutten av loopen
gå i stykker
være
((i++))
ferdig

Break statement mens loop i Linux

Break statement mens loop i Linux

Fra skriptet og utførelsen kan vi se at vi var i stand til å bryte eller gå ut av en uendelig sløyfe med en betinget setning og break-setningen. Derfor brukes break-setningen til å få kontrollflyten til et program/skript fra innsiden av en while-løkke til å bryte ut av loopen uten at loop-tilstanden evalueres til falsk.

Fortsett uttalelsen i While Loop

Vi kan bruke fortsett-setningen til å gjøre det motsatte av break-setningen. Den vil hoppe til starten av løkkeblokken og iterere igjen. Dette kan brukes til å hoppe over visse kommandoer for visse forhold og tillater derfor en endring i sløyfens flyt.

For eksempel, hvis vi har en variabel initialisert til 1 og vi vil vise bare tallene som er delelig med fem eller i et bestemt mønster etter en betingelse, kan vi bruke fortsett-setninger for å gjøre nettopp det. Dette tillater iterasjon over løkken på ønsket måte.

Først lager vi en tekstfil ved å bruke et tekstredigeringsprogram i Linux, i dette tilfellet bruker vi 'vim' tekstredigering.

vim while.sh 

#!/usr/bin/bash

i=1
while [ $i -lt 30 ];
gjøre
((i++))
if [[ $(( $i % 5 )) -ne 0 ]];
deretter
Fortsette
være
ekko $i
ferdig

Fortsett Statement i While loop i linux

Fortsett Statement i While loop i linux

Som vi kan se fortsette-setningen, hopper til begynnelsen av blokken og starter utførelsen av kommandoene ved å hoppe over de neste kommandoene inne i blokken. While-løkken itererer kun for verdien av variabel i er mindre enn 30, og derfor kontrollerer if-tilstanden om variabel i er delelig med 5, og hvis det ikke er det, itererer vi om igjen med fortsett og øker verdien til variabelen i. De variabel i får bare ekko hvis den er delelig med 5, dermed blir if-tilstanden evaluert til falsk og vi møter ikke en fortsettelsessetning og bærer med den normale flyten av løkken. Dette gjøres for å unngå logging av hvert tall og kun skrive ut tallene som ikke følger et mønster eller en betingelse i if-setningen eller andre betingede utsagn.

Ofte stilte spørsmål

1. Hva er en ` while`> loop i Bash-skripting?

EN while> loop er en kontrollflytsetning i Bash-skripting som lar en bestemt kodeblokk utføres gjentatte ganger så lenge en spesifisert tilstand er sann. Løkken gir en måte å automatisere repeterende oppgaver og er en grunnleggende konstruksjon innen skripting og programmering.

2. Hvordan virker syntaksen til en ` while`> loop look i Bash?

Den grunnleggende syntaksen til en while> loop i Bash er som følger:

mens [ tilstand ]
gjøre
# Kode som skal utføres mens betingelsen er sann
ferdig

Den ` condition`> er en test som skjer før hver iterasjon av sløyfen. Hvis betingelsen er sann, kjøres koden i løkken. Hvis betingelsen er usann, avsluttes loopen, og skriptet fortsetter med neste kommando etter ` done`> uttalelse.

3. Hva er rollen til ` (( ... ))`> bygge i en Bash while> Løkke?

Den ` (( ... ))`> konstruksjon i Bash brukes til aritmetiske operasjoner. I sammenheng med en ` while`> loop, brukes den ofte til å evaluere aritmetiske forhold.

For eksempel: ` ((i <10))> `> sjekker om variabelen ` i`> er mindre enn 10. Dette lar deg bruke aritmetiske uttrykk direkte i løkketilstanden, noe som gjør det spesielt nyttig når du arbeider med numeriske sammenligninger.

4. Hvordan lage en uendelig løkke ved å bruke ` while`> i Bash?

En uendelig løkke i Bash kan opprettes ved å gi en betingelse som alltid evalueres til sann.

For eksempel:

mens det er sant
gjøre
# Kode for den uendelige løkken
ferdig

Alternativt kan du bruke en konstant som ikke er null i tilstanden, som ` while [ 1 ]`> , for å oppnå samme resultat. Uendelige løkker er nyttige i situasjoner der kontinuerlig utførelse er nødvendig inntil den blir manuelt avbrutt.

Konklusjon

I denne artikkelen diskuterte vi BASH scripting while loop som viser seg å være et allsidig verktøy for å utføre en blokk med kode gjentatte ganger basert på en spesifisert tilstand. Den grunnleggende syntaksen innebærer å definere betingelsen innenfor hakeparenteser, noe som gir mulighet for fleksible iterasjoner. Artikkelen utforsker ulike anvendelser av while-løkker, inkludert lesing fra filer, opprettelse av uendelige løkker, faste iterasjoner, analysering av kommandolinjeargumenter og bruk av break- og continue-setninger. Fra C-stilsyntaks til interaktiv filskriving, hvert eksempel demonstrerer loopens tilpasningsevne når det gjelder å dekke en rekke skriptbehov. Denne omfattende oversikten understreker while-løkkens betydning i BASH-skripting, og gir en robust mekanisme for kontrollert repetisjon og effektiv kodekjøring.



Topp Artikler

Kategori

Interessante Artikler