Begrepet "shell scripting" blir ofte nevnt i Linux fora, men mange brukere er ikke kjent med det. Å lære denne enkle og kraftige programmeringsmetoden kan hjelpe deg med å spare tid, lære kommandolinjen bedre, og forkaste kjedelige filbehandlingsoppgaver.
Å være en Linux-bruker betyr at du leker med kommando- linje. Liker det eller ikke, det er bare noen ting som gjøres mye lettere via dette grensesnittet enn ved å peke og klikke. Jo mer du bruker og lærer kommandolinjen, desto mer ser du potensialet. Vel, kommandolinjen i seg selv er et program: skallet. De fleste Linux distros bruker i dag Bash, og dette er hva du virkelig legger inn kommandoer inn i.
Nå, noen av dere som brukte Windows før du bruker Linux, kan huske batchfiler. Disse var små tekstfiler som du kunne fylle med kommandoer for å utføre, og Windows ville kjøre dem igjen. Det var en smart og fin måte å få ting gjort, for eksempel å kjøre spill i din videregående datamaskinlaboratorium når du ikke kunne åpne systemmapper eller lage snarveier. Batchfiler i Windows, mens det er nyttig, er en billig etterligning av shell-skript.
Shell-skript tillater oss å programmere kommandoer i kjeder og få systemet til å utføre dem som en skripthendelse, akkurat som batchfiler. De tillater også langt flere nyttige funksjoner, som kommandosubstitusjon. Du kan påkalle en kommando, som dato, og bruke den er utdata som en del av et filnavn. Du kan automatisere sikkerhetskopier, og hver kopierte fil kan ha den aktuelle datoen vedlagt til slutten av navnet. Skript er ikke bare invokasjoner av kommandoer, heller. De er programmer i seg selv. Scripting lar deg bruke programmeringsfunksjoner - for eksempel for looper, om / da / andre setninger og så videre - direkte i operativsystemets grensesnitt. Og du trenger ikke å lære et annet språk fordi du bruker det du allerede kjenner: kommandolinjen.
Det er egentlig skriptets kraft, tror jeg. Du kommer til å programmere med kommandoer du allerede vet, mens du lærer stifter av de fleste store programmeringsspråk. Trenger du å gjøre noe repeterende og kjedelig? Skript det! Trenger du en snarvei for en virkelig innviklet kommando? Skript det! Vil du bygge et veldig enkelt å bruke kommandolinjegrensesnitt for noe? Skript det!
Før vi begynner vår skriptserie, la oss dekke noen grunnleggende opplysninger. Vi bruker bash-skallet, som de fleste Linux-distribusjoner bruker innfødt. Bash er tilgjengelig for Mac OS-brukere og Cygwin på Windows også. Siden det er så universelt, bør du kunne skanne uavhengig av plattformen din. I tillegg, så lenge alle kommandoer som refereres finnes, kan skript fungere på flere plattformer med liten eller ingen tilpasning.
Skripting kan enkelt gjøre bruk av "administrator" eller "superuser" -rettigheter, så det er best å test ut skript før du setter dem på jobb. Bruk også sunn fornuft, som å sørge for at du har sikkerhetskopier av filene du skal kjøre et skript på. Det er også veldig viktig å bruke de riktige alternativene, som -i for kommandoen rm, slik at samspillet ditt er nødvendig. Dette kan forhindre noen ekkel feil. Som sådan, les gjennom skript du laster ned og vær forsiktig med dataene du har, bare hvis ting går galt.
Kjernen er bare enkle tekstfiler. Du kan bruke noen tekstredigerer til å skrive dem: gedit, emacs, vim, nano ... Denne listen fortsetter. Bare vær sikker på å lagre den som ren tekst, ikke som rik tekst, eller et Word-dokument. Siden jeg elsker brukervennligheten som nano gir, bruker jeg det.
Skript utføres som programmer, og for at dette skal skje, må de ha de riktige tillatelsene. Du kan lage skript kjørbare ved å kjøre følgende kommando på det:
chmod + x ~ / somecrazyfolder / script1
Dette vil tillate alle å kjøre det aktuelle skriptet. Hvis du vil begrense bruken til bare brukeren din, kan du bruke dette i stedet:
chmod u + x ~ / somecrazyfolder / script1
For å kjøre dette skriptet må du cd inn i riktig katalog og deretter kjøre skriptet slik:
cd ~ / somecrazyfolder
./ script1
For å gjøre ting enklere kan du plassere skript i en "bin" -mappe i hjemmekatalogen din:
~ / bin
I mange moderne distroer er denne mappen ikke lenger opprettet som standard, men du kan opprette den. Dette er vanligvis hvor kjørbare filer lagres som tilhører brukeren din og ikke til andre brukere. Ved å plassere skript her, kan du bare kjøre dem ved å skrive navnet deres, akkurat som andre kommandoer, i stedet for å måtte CD rundt og bruke prefixet ./. Før du navngir et skript, bør du følgende kommandoen for å sjekke om du har et program installert som bruker det navnet:
som [kommando]
Mange mennesker kaller deres tidlige skript "test", og når de prøver å kjøre det i kommandolinjen, er ingenting skjer. Dette skyldes at det er i konflikt med testkommandoen, noe som ikke gjør noe uten argumenter. Vær alltid sikker på at skriptnavnene dine ikke står i konflikt med kommandoer, ellers kan du finne deg selv å gjøre ting du ikke har tenkt å gjøre!
Scripting Guidelines
Hvert script skal være med "#! / Bin / bash"
Når et skall analyserer gjennom en tekstfil, er den mest direkte måten å identifisere filen som et skript ved å lage din første linje:
# ! / bin / bash
Hvis du bruker et annet skall, erstatte du banen her. Kommentar linjer starter med hashes (#), men legger til bang (!) Og shell banen etter at det er en slags hack som vil omgå denne kommentaren regel og vil tvinge skriptet til å utføre med skallet som denne linjen peker på.
Ny linje = Ny kommando
Hver ny linje skal betraktes som en ny kommando, eller en komponent i et større system. Hvis / da / andre setninger vil for eksempel overta flere linjer, men hver komponent i det systemet er i en ny linje. Ikke la en kommando bløde over i neste linje, da dette kan avkorte forrige kommando og gi deg en feil på neste linje. Hvis tekstredigereren gjør det, bør du slå av tekstinnpakning for å være på den sikre siden. Du kan slå av tekstinnpakning i nano-bit som slår ALT + L.
Kommentar Ofte med #s
Hvis du starter en linje med en #, ignoreres linjen. Dette gjør det til en kommentarlinje, der du kan minne deg om hva resultatet av den forrige kommandoen var, eller hva neste kommando vil gjøre. Igjen, slå av tekstinnpakning, eller bry deg om kommentarer til flere linjer som alle begynner med en hash. Å bruke mange kommentarer er en god praksis å beholde, ettersom det lar deg og andre mennesker tilpasse dine skript lettere. Det eneste unntaket er den nevnte Hash-Bang hack, så følg ikke #s med! S. ; -)
Kommandoer er omgitt av parenteser
I eldre dager ble kommandosubstitusjoner gjort med enkelt merketegn (', aksjer ~ -tasten). Vi kommer ikke til å røre på dette ennå, men som de fleste går av og utforske etter å ha lært grunnleggende, er det sannsynligvis en god ide å nevne at du bør bruke parenteser i stedet. Dette skyldes hovedsakelig at når du nest - sette kommandoer i andre kommandoer, fungerer parentes bedre.
Ditt første skript
Du kan se at det ikke er noen utdata fra hvilken kommando, så vi er alle satt til å bruke dette navnet.
La oss lage en tom fil i ~ / bin-mappe:
touch ~ / bin / datecp
Og la vi endre tillatelsen nå, før vi glemmer:
La oss begynne å bygge skriptet vårt da. Åpne den filen i valgfri tekstredigerer. Som jeg sa, liker jeg enkelheten av nano.
nano ~ / bin / datecp
Og la oss gå videre og sette inn forutsetningen første linje og en kommentar om hva dette skriptet gjør.
Neste, la oss erklære en variabel. Hvis du noen gang har tatt algebra, vet du sikkert hva det er. En variabel tillater oss å lagre informasjon og gjøre ting med det. Variabler kan "utvide" når de refereres andre steder. Det vil si, i stedet for å vise navnet deres, vil de vise deres lagrede innhold. Du kan senere fortelle den samme variabelen for å lagre forskjellig informasjon, og enhver instruksjon som oppstår etter det, vil bruke den nye informasjonen. Det er en veldig fancy plassholder.
Hva skal vi sette inn variabel? Vel, la oss lagre dato og klokkeslett! For å gjøre dette, ringer vi på datoen kommandoen.
Ta en titt på skjermbildet nedenfor for hvordan du bygger utdataene til datakommandoen:
Du kan se det ved å legge til forskjellige variabler som starter med% Du kan endre utgangen av kommandoen til det du vil ha. For mer informasjon kan du se på den manuelle siden for datakommandoen.
La oss bruke den siste iterasjonen av datakommandoen, "dato +% m_% d_% y-% H.% M.% S" og Bruk det i vårt skript.
Hvis vi skulle lagre dette skriptet akkurat nå, kunne vi kjøre det, og det ville gi oss utdataene fra datakommandoen som vi ville forvente:
Men la oss gjøre noe annerledes. La oss gi et variabelt navn, som date_formatted til denne kommandoen. Den riktige syntaxen for dette er som følger:
variable = $ (kommandobeskyttelsesargumenter)
Og for oss vil vi bygge det slik:
date_formatted = $ (dato +% m_% d_% y-% H.% M.% S)
Dette kalles kommandosubstitusjon. Vi forteller i utgangspunktet at når variabelen "date_formatted" dukker opp, kjører kommandoen inne parentesene. Deretter bør uansett utdata kommandoene gi vises i stedet for navnet på variabelen, "date_formatted".
Her er et eksempelskript og dets utgang:
Merk at det er to mellomrom i utgangen. Plassen i sitatene til ekkokommandoen og plassen foran variabelen vises begge. Ikke bruk mellomrom hvis du ikke vil at de skal dukke opp. Vær også oppmerksom på at uten denne ekstra "echo" -linjen, vil skriptet gi absolutt ingen utdata.
La oss komme tilbake til vårt skript. La oss legge til i kopieringsdelen av kommandoen.
cp -iv $ 1 $ 2. $ date_formatted
Dette vil påkalle kopikommandoen, med alternativene -i og -v. Den tidligere vil be deg om bekreftelse før du overskriver en fil, og sistnevnte vil vise hva som kommer ned på kommandolinjen.
Deretter kan du se at jeg har lagt til «$ 1» -alternativet. Ved skripting vil et dollarskilt ($) etterfulgt av et tall angi det nummererte argumentet for skriptet når det ble påkalt. For eksempel i følgende kommando:
cp -iv Trogdor2.mp3 ringtone.mp3
Det første argumentet er "Trogdor2.mp3" og det andre argumentet er "ringtone.mp3".
Ser tilbake på vår script, kan vi se at vi refererer til to argumenter:
Dette betyr at når vi kjører skriptet, må vi gi to argumenter for at skriptet skal kjøre riktig. Det første argumentet, $ 1, er filen som vil bli kopiert, og er erstattet som «cp -iv» -kommandørens første argument.
Det andre argumentet, $ 2, vil fungere som utdatafil for samme kommando. Men du kan også se at det er annerledes. Vi har lagt til en periode, og vi har referert til varianten "date_formatted" ovenfor. Nysgjerrig på hva dette gjør?
Dette skjer når skriptet kjøres:
Du kan se at utdatafilen er oppført som hva jeg skrev inn for $ 2, etterfulgt av en periode, deretter utgangen av datakommandoen ! Fornuftig, ikke sant?
Nå når jeg kjører datecp-kommandoen, vil den kjøre dette skriptet og tillate meg å kopiere en fil til et nytt sted, og legg automatisk til dato og klokkeslett til slutten av filnavnet. Nyttig for arkivering av ting!
Shell skripting er sentral i å gjøre ditt OS arbeid for deg. Du trenger ikke å lære et nytt programmeringsspråk for å få det til å skje heller. Prøv å skripte med noen grunnleggende kommandoer hjemme og begynn å tenke på hva du kan bruke dette til.
Skriver du? Har du råd til nybegynnere? Del dine tanker i kommentarene! Det er mer å komme inn i denne serien!
Slik ringer du telefonforlengelser automatisk til iPhone
Hvis du må ringe en utvidelse for å nå noen av dine kontakter - eller en kode for å bli med på en konferanse - vet du at det er et problem med å huske at informasjon eller slå opp før du ringer. I stedet, hvorfor ikke iPhone automatisk ringe disse ekstra tallene for deg? Telefoner har lenge aksepterte spesialtegn, for eksempel komma og semikolon, for å utføre bestemte funksjoner når du ringer opp lagrede numre.
Slik hindrer du markøren fra å drive til en annen skjerm i løpet av spill
De fleste spill begrenser markøren til spillets vindu med mindre du Alt + Tab ut av det. Men noen ganger, hvis du har flere skjermer, får du et spill som lar markøren "drive" på en annen skjerm mens du spiller. Du kan forhindre det med et gratis verktøy som kalles Markørlås. Markørlås er et praktisk lite verktøy fra en utvikler som kaller seg Snake som lar deg, vel, "lås" markøren til et bestemt program - oftest et spill .