Begynderens Guide til Shell Scripting 3 Flere Grundlæggende Kommandoer & Kæder
Du har lært, hvordan du opretter scripts, bruger argumenter og bygger til sløjfer. Lad os nu se på nogle flere grundlæggende kommandoer, tekstfilmanipulation og omdirigere input og output til filer og andre kommandoer.
Nogle grundlæggende nyttige kommandoer
Vi har allerede givet dig en grundlæggende sammenfatning af skalskripter og en eksempelbaseret oversigt over for sløjfer, men sørg for at tjekke disse artikler, hvis du har savnet vores shell script guide så langt.
Kommandolinjen er vidunderlig af mange grunde, og omdirigering er en af de mest fremtrædende. Hvis du var nødt til at notere og reproducere output fra hver kommando for at tage yderligere handlinger eller bruge det til noget andet, ville vi alle være gået for længe siden. Omdirigering giver os mulighed for at bruge det output og gemme det eller bruge det som et input til en anden kommando. Vi kan også bruge filer som input til andre kommandoer.
Før vi fortsætter, lad os dække nogle grundlæggende kommandoer, der kan bruges på mange forskellige steder.
ekko - Denne kommando udskriver blot (viser) hele dens argument på kommandolinjen som output
ekko argument med mellemrum
Som du kan se, skal specialtegn "undslippes", så de behandles normalt. Dette gøres ved at bruge en backslash (\) foran tegnet. Det er en bedre ide at bruge citater. Ekkokommandoen arbejder også med variabler.
Som du kan se, opfører enkelte og dobbelt citater anderledes. For mere information, se hvad der er forskellen mellem enkelt og dobbelt citater i Bash Shell?
kat - Denne kommando viser indholdet af tekstfiler som output.
cat file_to_be_read
Lad os sige, at vi opretter denne tekstfil i nano:
Når vi bruger katten kommandoen på filen, kan vi se det er output.
grep - Dette er en af de mest kraftfulde og nyttige kommandoer til rådighed for dig i Linux. Det står for Global / Regular Expression Print. Det ser gennem en fil og udskriver enhver linje, der matcher et bestemt mønster. Fordi dette mønster er baseret på "regulært udtryk", kan en kort linje give et væld af mønstre, der skal matches. For ikke kan du dog indtaste en tern til søgning.
grep mønster fil
Jeg forsikrer dig, grep kan gøre mere, men for nu lad os holde os til de lettere ting.
Omdirigere output
For at omdirigere output fra en kommando til en fil benytter vi et specialtegn, det større end symbolet (>).
Lad os ændre vores liste op, skal vi? Indtast følgende kommando:
echo pepperoni> liste
Du kan se, at ekko ikke længere viser linjen, og når vi ser på indholdet af "listefilen", ser vi, hvad vi ekkoede derinde.
Bemærk også, at det tidligere indhold af "listen" blev fjernet. Prøv det igen:
Dette kan være nyttigt, når du vil genbruge en fil, men ofte vil vi blot tilføje til en eksisterende fil. Til dette bruger vi to på hinanden følgende større end symboler:
echo yellow peppers >> liste
Let! Lad os bruge denne kommando til at oprette en større liste, skal vi?
Sådan der. Jeg tror, du kan se, hvorfor så mange geeks bruger kommandolinjen til at lave to-do lister og lignende, men det bliver endnu bedre.
Lad os tage udgangen af en kommando og sætte den i en fil:
ls -al /> ~ / rootlist
At lave lister over filer, redigere dem og derefter køre kommandoer på dem, du ønsker, har aldrig været enklere. Og mens vi laver disse grundlæggende funktioner i kommandolinjen, fungerer disse godt i scripts også.
Rørledning eller kædning
Rørledning er så navngivet, fordi den bruger røret, (|; delt med \ -tasten på de fleste tastaturer). I det væsentlige tager det output fra en kommando og direkte feeds det til en anden. Du kan oprette lange kommandokæder for at få en meget specifik ønsket udgang på denne måde, og det er meget bekvemt for kommandoer som grep.
Det virker meget som ">", medmindre det kan kædes flere gange, og dets virkning er mere generel, fordi den ikke behøver at gå gennem en tekstfil.
Som du kan se, er grep sagerfølsom. Du kan bruge "-i" flag for at gøre det ignorere tilfælde.
Omdirigerende indgange
Du kan også tage input fra filer til kommandoer ved at bruge symbolet mindre end (<).
kat < list
"Det er ikke anderledes end at bruge et argument!" Kan du sige. Nå, du ville være korrekt i dette tilfælde. Hvor omdirigering af input virkelig kommer i brug, er i kædekommandoer sammen.
Lad os sige, at vi vil filtrere ethvert ord, der har "pep" i det fra vores nuværende "list" -fil til en ny fil kaldet "revisions".
grep pep revisioner
Lad os genoprette denne kommando, og tilføj nogle sortering.
grep pep revisioner
Dette vil bruge "pep" som søgeord fra inputfilen "list", sorter den i alfabetisk rækkefølge (alle overordnede udtryk efterfulgt af alle små bogstaver), og udfør det derefter i "revisions" -filen.
For at illustrere sorteringskommandoen, lad os se på følgende eksempel:
Som du kan se, kan du ignorere sagen ved at tilføje "-f" -flagget til sorteringskommandoen. Dette gør det nemt for os at alfabetisere linjer i tekstfiler og ignorere kapitalisering, når det ikke betyder noget.
Et simpelt script
Lad os oprette et script, der har følgende formular:
script searchterm listfile
Det vil tage ordet og bruge grep til at søge gennem en listefil, sortere resultaterne og derefter udføre dem til en anden fil.
Her er den mappe, som vi skal teste scriptet i:
Og vi kan oprette en liste over hvad her, så kør scriptet.
Værsgo! Jo mere du lærer reglerne for regulære udtryk, desto mere præcist kan du sammensætte en søgekommando. Og alt, hvad der er gyldigt i citater, kan erstattes af dit første argument!
Hvad sortering angår, kan du gøre mere end bare sortere alfabetisk. Se på manens side for nogle af følgende kommandoer:
- tsort - en mere avanceret topologisk sorteringsfunktion
- tr - lader dig kortlægge bestemte tegn til andre tegn og transkribe mellem dem.
- uniq - fjerner ikke-unikt (læs: duplikat)
- awk - et virkelig avanceret tekstbehandlingssprog / -funktion, der kan bruges til at adskille felter i filnavne
- skære, indsætte / deltage - kommandoer, der er nyttige til at isolere felter fra tekstfiler og tilføje nye data i kolonner
- look - søger ligesom grep gør, men bruger en ordbog fil (som kan være brugerdefineret) til opslaget
- wc - lader dig få ordtælling, linjetælling, karaktertælling og meget mere
Vi tog et kig på nogle mere grundlæggende i dag, som kan være lige så nyttige på kommandolinjen som i scripts. Tekstbaserede data er ofte kernen i ting, vi bruger dagligt, så at kunne arbejde med det, søge det og manipulere det er nøglen.
Hvad er nogle af dine yndlingsskripter? Har du nogle specielle anvendelsesskrifter til tekstbaserede filer? Del det, du ved i kommentarerne!