Bash til løkker

Bash til løkker
Det er flere typer løkker som kan brukes i bash -skript. For løkker, mens løkker og til løkker.

Konseptuelt skal for -loopen brukes til å sløyfe gjennom en serie elementer som loop gjennom hvert element i en matrise eller hver fil i en katalog osv. Mens sløyfe skal brukes så lenge en viss tilstand er sann, for eksempel A -telleren er mindre enn en maksimal verdi eller pingtiden til en server er lavere enn en terskel eller for alltid hvis du sløyfe mens du er sann eller mens 1.

T til Loop ligner på mens Loop, men med omvendt logikk. I stedet for å sløyfe mens en tilstand er sann, antar du at tilstanden er falsk og sløyfe til den blir sann. De er omvendt av hverandre i logisk uttrykk. Velge riktig sløyfe mellom en stundsløyfe og til Loop lar programmet ditt være mer lesbart og forståelig av andre eller deg selv når du kommer tilbake til koden en gang senere.

Noen typiske eksempler eller grunner til å bruke en inntil sløyfe kan være, sløyfe til brukeren kommer inn i "exit"; Loop til dataene som genereres er større enn det forespurte datavolumet, eller til et antall filer som samsvarer med søket ditt er funnet.

Den grunnleggende syntaksen til til Loop ser slik ut:

til [tilstand]; gjøre
Kodelinjer
Flere kodelinjer
Ferdig

La oss nå ta noen eksempler. Det første eksemplet vil ha flere faktor på to til de når en terskel med størrelse på 1000:

#!/bin/bash
Num = 1
til ["$ num" -gt 1000]; gjøre
ekko $ num
La num = num*2
Ferdig

Det andre eksemplet vil fortsette å pinge en URL til responstiden er større enn 100 millisekunder:

#!/bin/bash
Millisekunder = 0
# Vi vil pinge til det blir tregere enn 1000 millisekunder
inntil [$ millisekunder -GT 1000]
gjøre
# Kjør pingen og trekk ut linjen som har pingtiden, som ender i tid = xxxx MS
Output = 'ping -c 1 google.com | grep tid | awk -f = 'print $ nf' '
ekko "Ping Time: $ output"
# Ekstrakt antall Milliseocnds fra streng som heltall
Millisekunder = 'Echo $ output | awk 'skriv ut $ 1' | awk -f. 'Skriv ut $ 1' '
ekko "Antall MS = $ millisekunder"
Sov 1
Ferdig
ekko "Ping -tid oversteg 1000 millisekunder"

Det tredje eksemplet vil ta en fil og vil kombinere filen med seg selv til den når 1 kilobyte i størrelse:

#!/bin/bash
Filnavn = 'basename "$ 0"'
ekko $ filnavn
Tmp_file = "./tmp1 "
Target_File = "./mål"
Cat $ filnavn> $ Target_file
FilSize = 0
# Øk filstørrelsen til 1KB
Inntil [$ FilSize -GT 1024]
gjøre
# Legg til denne filen i mål for filinnhold
CP $ Target_File $ tmp_file
CAT $ TMP_FILE >> $ Target_File
FilSize = 'du $ Target_file | awk 'skriv ut $ 1' '
Echo "Filesize: $ Filesize"
Sov 1
Ferdig
Ekko "Ny filsørrelse nådde målet for 1KB"

Det fjerde eksemplet vil be brukeren om inndata av navnet deres til de skriver avkjørsel for å avslutte programmet:

#!/bin/bash
Svar = "foo"
# Øk filstørrelsen til 1KB
til ["$ respons" = "exit"]
gjøre
ekko -n "Skriv inn navnet ditt eller" exit "for å slutte med dette programmet:"
Les svar
Hvis ["$ respons" != "exit"]; deretter
ekko "Hei $ respons"
fi
Ferdig
ekko "Takk for at du spilte dette spillet"

KONKLUSJON

Nøkkelpunktet er å bruke FØR Loop for å gjøre koden din tydeligere når tilstanden forventes å være alltid falsk, og så vil du stoppe looping -handlingen når tilstanden blir sann. Med andre ord, fortsett å sløyfe FØR Et tidspunkt. Med dette perspektivet håper jeg at basisskriptene dine kan være tydeligere, og du har lært noe med denne artikkelen. Takk skal du ha.