Begynnerveiledningen til Shell Scripting 3 Flere enkle kommandoer og kjeder
Du har lært hvordan du lager skript, bruker argumenter og bygger for looper. Nå, la oss se på noen flere grunnleggende kommandoer, tekstfilmanipulering og omdirigere inngang og utdata til filer og andre kommandoer.
Noen grunnleggende nyttige kommandoer
Vi har allerede gitt deg en grunnleggende sammenstilling av shell-skript og en eksempelbasert oversikt over for looper, men sørg for å sjekke ut disse artiklene hvis du har savnet vår shell scripting guide så langt.
Kommandolinjen er fantastisk av mange grunner, og omdirigering er en av de mest fremtredende. Hvis du måtte legge merke til og reprodusere produksjonen av hver kommando for å kunne ta ytterligere tiltak eller bruke det til noe annet, ville vi alle ha blitt galne lenge siden. Omdirigering lar oss bruke den utdataen og lagre den eller bruke den umiddelbart som en inngang for en annen kommando. Vi kan også bruke filer som innganger for andre kommandoer.
Før vi fortsetter, la oss dekke noen grunnleggende kommandoer som kan brukes på mange forskjellige steder.
ekko - Denne kommandoen skriver ut (viser) hele argumentet på kommandolinjen som utgang
ekko argument med mellomrom
Som du kan se, må spesialtegn være "rømt" slik at de blir behandlet normalt. Dette gjøres ved å bruke et tilbakeslag (\) foran tegnet. Det er en bedre ide å bruke sitater. Ekkokommandoen fungerer også med variabler.
Som du kan se, oppfører enkelt og dobbelt anførselstegn annerledes. For mer informasjon, sjekk ut Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?
katt - Denne kommandoen viser innholdet i tekstfiler som utdata.
katt file_to_be_read
La oss si at vi lager denne tekstfilen i nano:
Når vi bruker katten kommandoen på filen, kan vi se det er produksjon.
grep - Dette er en av de mest kraftige og nyttige kommandoer som er tilgjengelige for deg i Linux. Den står for Global / Regular Expression Print. Det ser gjennom en fil og skriver ut en linje som samsvarer med et bestemt mønster. Fordi dette mønsteret er basert på "vanlig uttrykk", kan en kort linje gi en rekke mønstre som skal matches. For ikke, skjønt, kan du legge inn en tern for å søke.
grep mønsterfil
Jeg forsikrer deg, grep kan gjøre mer, men for nå la oss holde oss til de enklere tingene.
Omdirigere utganger
For å omdirigere utgangen av en kommando til en fil, benytter vi et spesialtegn, større enn symbolet (>).
La oss endre vår liste opp, skal vi? Skriv inn følgende kommando:
echo pepperoni> listen
Du kan se at ekko ikke viser linjen lenger, og når vi ser på innholdet i "list" -filen, ser vi hva vi ekko der inne.
Vær også oppmerksom på at det forrige innholdet i "listen" ble fjernet. Prøv igjen:
Dette kan være nyttig når du vil gjenbruke en fil, men ofte vil vi bare legge til en eksisterende fil. For dette bruker vi to påfølgende større enn symboler:
ekko gul peppers >> liste
Lett! La oss bruke denne kommandoen til å lage en større liste, skal vi?
Der går vi. Jeg tror du kan se hvorfor så mange geeks bruker kommandolinjen til å lage gjøremålslister og lignende, men det blir enda bedre.
La oss ta utgangen av en kommando og sette den inn i en fil:
ls -al /> ~ / rotliste
Å lage lister over filer, redigere dem, og deretter løpe kommandoer på de du vil ha, har aldri vært enklere. Og mens vi gjør disse grunnleggende funksjonene i kommandolinjen, fungerer disse godt i skript også.
Piping, eller Chaining
Rørledning er så oppkalt fordi den bruker røret, (|; delt med \ -tasten på de fleste tastaturer). I hovedsak tar det utdata fra en kommando og direkte mater den til en annen. Du kan lage lange kjeder med kommandoer for å få en svært spesifikk ønsket utgang på denne måten, og det er veldig praktisk for kommandoer som grep.
Det virker mye som ">", bortsett fra at det kan kjedes flere ganger, og effekten er mer generell fordi den ikke trenger å gå gjennom en tekstfil.
Som du kan se, er grep saksensitiv. Du kan bruke "-i" -flagget for å gjøre det ignorert.
Omdirigere innganger
Du kan også ta inn data fra filer for kommandoer ved å bruke symbolet mindre enn (<).
katt < list
"Det er ikke noe annet enn å bruke et argument!" Kan du si. Vel, du ville være riktig i dette tilfellet. Hvor omdirigering av inngang virkelig kommer til nytte, er i kjedekommandoer sammen.
La oss si at vi vil filtrere et hvilket som helst ord som har "pep" i det fra vår nåværende "list" -fil til en ny fil kalt "revisions".
grep pep revisjoner
La oss gjøre om denne kommandoen, og legg til noen sortering.
grep pep revisjoner
Dette vil bruke "pep" som søkeord fra inntastingsfilen "liste", sorter den i alfabetisk rekkefølge (alle overordnede termer etterfulgt av alle små bokstaver), og skriv det ut i "revisions" -filen.
For å illustrere sorteringskommandoen, la oss se på følgende eksempel:
Som du kan se, kan du ignorere tilfelle ved å legge til "-f" -flagget i sorteringskommandoen. Dette gjør det enkelt for oss å alfabetisere linjer i tekstfiler og ignorere kapitalisering når det ikke er noe som helst.
Et enkelt skript
La oss lage et skript som har følgende skjema:
Skript Søkeord Listfile
Det vil ta uttrykket og bruke grep til å søke gjennom en listefil, sortere resultatene, og deretter sende dem til en annen fil.
Her er katalogen som vi skal teste skriptet på:
Og vi kan lage en liste over hva her inne, og kjør deretter skriptet.
Der går du! Jo mer du lærer reglene for vanlige uttrykk, jo mer nøyaktig kan du sette sammen en søkekommando. Og alt som er gyldig i sitater kan erstattes av ditt første argument!
Så langt som sortering går, kan du gjøre mer enn bare sortere alfabetisk. Ta en titt på man siden for noen av følgende kommandoer:
- tsort - en mer avansert topologisk sorteringsfunksjon
- tr - lar deg kartlegge bestemte tegn til andre tegn og transkribere mellom dem.
- uniq - fjerner ikke-unikt (les: duplikat)
- awk - en veldig avansert tekstbehandling språk / funksjon som kan brukes til å skille felt i filnavn
- klipp, lim inn / delta - kommandoer som er nyttige for å isolere felt fra tekstfiler og legge til nye data i kolonner
- se - søk som grep gjør, men bruker en ordlistefil (som kan være brukerdefinert) for oppslaget
- wc - lar deg få ordtelling, linjetelling, karaktertelling og mer
Vi tok en titt på noe mer grunnleggende i dag som kan være like nyttig på kommandolinjen som i skript. Tekstbasert data er ofte hjertet av ting vi bruker daglig, slik at vi kan jobbe med det, søke det og manipulere det er nøkkelen.
Hva er noen av favorittskriptene dine? Har du spesielle bruksskript for tekstbaserte filer? Del det du vet i kommentarene!