Essentials av Bash Scripting: Bruk Loops


En viktig regel for systemadministrasjon: Hvis du trenger å gjøre noe ofte, kan du prøve å skrive et manus å gjøre det for deg. Hvis du trenger å gjøre noe flere ganger innen
et skript, må du være i stand til å bruke sløyfe uttalelser å gjenta noe til ferdig. Med GNU Bash, vil du gjøre dette med for, mens, og til uttalelser.

Hvis du har gjort noe programmering, er du sikkert kjent med disse uttalelsene allerede. Hvis du er som meg, og ble introdusert til bash scripting uten fordelen av et programmeringsbakgrunn, kan de ikke være fullt så opplagt. La oss starte med å forklare forskjellene mellom de uttalelsene, og deretter gå videre til eksempler.

for loop brukes til å iterere gjennom en handling til ferdig. La oss si du har en katalog full av bilder som du ønsker å konvertere fra ett format til et annet. Du kan bruke en for løkke og ImageMagick er konvertitt (eller et annet program) for å konvertere JPEG-bilder i PNG-format, for eksempel. Eller lage et skript for å ta en katalog full av MP3 eller WAV-filer og konvertere til Ogg Vorbis

mens loop brukes til å utføre en handling, mens en betingelse er sann, og til gjør det motsatte &ndash.; den utfører en handling før en betingelse er sann. Så du kan kjøre en teller, for eksempel opp til 10 og utføre en handling før disken treffer 10. Vi skal se på dette nærmere i eksemplene.

Bruke for Loops

La oss starte med det for loop. Syntaksen er:

for jeg i $ ( kommandoen
); gjøre kommandoen
$ i; done

Det er på kommandolinjen. Hvis du gjør et skript, vil du formatere den som:

# /bin /bash for jeg i $ ( kommandoen
);! gjøre kommandoen
$ jeg gjort

Så hvis jeg ønsket å lage en sikkerhetskopi av alle HTML-filene i en katalog, vil jeg bruke:

for jeg i $ (ls * html); gjøre cp $ jeg $ i.bak; done

Så sette opp en variabel (i), og deretter sette opp kommandoen som vil gi sløyfen noe å iterere over (ls * html). Neste, gjøre handlingen cp til filene som ls * HTML avkastning, ett om gangen.

Du kan lure, ikke variabel må være i? Nope. Det kan noen gyldig variabelnavn. Hvis du ønsker å skrive en mer lesbar script, kan du gi den et navn som inngang eller html

Her er en rask spiss, mens du kommer i gang. Bruk ekko for å erstatte den kommandoen du ønsker å kjøre som en test- løpe. For eksempel, hvis du gjentar gjennom en katalog og utføre en operasjon på filer, bruker ekko å gi navnet på filene første gang gjennom. På den måten vil du se at manuset fungerer som forutsatt, og hvis ikke ekko er ikke-destruktive, så det er ingen skade, ingen stygg hvis den ikke gjør det du mente å gjøre. Da kan du gjøre det virkelige handlingen uten frykt.

Bruke stund og inntil

Neste opp, vil vi ta stund, og inntil for en prøvekjøring. Vi kommer også til å bruke noen Bash conditionals. Disse brukes til å beregne et uttrykk som " er en variabel større eller mindre enn X " eller " gjør en denne filen finnes, og det er en katalog " Du vil kanskje bruke en betinget for å sikre at en fil eksisterer og er lesbar, eller for å sikre at en fil eksisterer og har sitt sett gruppe ID (sgid) bit satt.

La oss gjøre noe enkelt, og lage noen tomme filer. Ikke veldig nyttig, men et godt eksempel. Here we go:

i = 0 mens [$ i -Det 22] berører $ ii = $ [$ i + 1] gjort

Dette vil skape filnavnet 0 til 21. Husk er det mens
variabelen er mindre enn (-Det) 22, så den starter på null og stopper på 21.

Nå la oss bli kvitt dem fil ved å endre manuset rundt med en til uttalelse:

 i = 0 til [$ i -eq 22] gjøre rm $ ii = $ [$ i + 1] gjort 

Alt vi har hatt å gjøre her er flip stund å til, og endre betinget til lik (-eq) slik at inntil løkken løper til variabelen er lik 22. I stedet for å berøre en fil, vi fjerne filene. Enkelt, ikke sant?

I neste avdrag, vil vi se på conditionals i mer detalj, og bruker dem med for, mens, og fram til looper å gjøre noen standard system administrasjonsoppgaver. Inntil da, kan du prøve disse ut på maskinen din og se hva du kan gjøre for å automatisere arbeidet ditt på Linux!