Hjemmeside » hvordan » Begynderens Guide til Shell Scripting Grundlæggende

    Begynderens Guide til Shell Scripting Grundlæggende

    Udtrykket "shell scripting" bliver ofte nævnt i Linux fora, men mange brugere er ikke bekendt med det. At lære denne nemme og kraftfulde programmeringsmetode kan hjælpe dig med at spare tid, lære kommandolinjen bedre og forbyde kedelige filhåndteringsopgaver.

    Hvad er Shell Scripting?

    At være en Linux-bruger betyder at du spiller rundt med kommandolinjen. Ligesom det eller ej, er der kun nogle ting, der gøres meget lettere via denne grænseflade end ved at pege og klikke. Jo mere du bruger og lærer kommandolinjen, desto mere ser du dets potentiale. Nå er kommandolinjen selv et program: skallen. De fleste Linux distros i dag bruger Bash, og det er hvad du virkelig indtaster kommandoer i.

    Nogle af jer, der brugte Windows før brug af Linux, kan måske huske batch-filer. Disse var små tekstfiler, som du kunne udfylde med kommandoer til at udføre, og Windows ville køre dem igen. Det var en smart og pæn måde at få nogle ting gjort, som at køre spil i dit gymnasielaboratorium, da du ikke kunne åbne systemmapper eller oprette genveje. Batch filer i Windows, mens nyttige, er en billig efterligning af shell scripts.

    Shell scripts tillader os at programmere kommandoer i kæder og få systemet til at udføre dem som en scripted event, ligesom batch-filer. De giver også mulighed for langt mere nyttige funktioner, såsom kommandosubstitution. Du kan påberåbe en kommando, som dato, og bruge den er output som en del af en filnavneordning. Du kan automatisere sikkerhedskopier, og hver kopieret fil kan have den aktuelle dato vedhæftet til slutningen af ​​navnet. Scripts er heller ikke kun påbud af kommandoer. De er programmer i sig selv. Scripting giver dig mulighed for at bruge programmeringsfunktioner - som for 'loops', hvis / da / ellers sætninger osv. Direkte i dit operativsystems grænseflade. Og du behøver ikke at lære et andet sprog, fordi du bruger det, du allerede kender: kommandolinjen.

    Det er virkelig magt scripting, tror jeg. Du kommer til at programmere med kommandoer, du allerede ved, mens du lærer hæfteklammer af de fleste større programmeringssprog. Har du brug for at gøre noget gentagne og kedelige? Script det! Har du brug for en genvej til en rigtig ufuldkommen kommando? Script det! Vil du bygge en rigtig let at bruge kommandolinjegrind til noget? Script det!

    Før du begynder

    Før vi begynder vores scriptserie, lad os dække nogle grundlæggende oplysninger. Vi bruger bash shell, som de fleste Linux distributioner bruger indbygget. Bash er tilgængelig for Mac OS-brugere og Cygwin på Windows. Da det er så universelt, bør du kunne scripte uanset din platform. Desuden, så længe alle de kommandoer, der henvises til, kan scripts arbejde på flere platforme med lidt eller ingen tweaking påkrævet.

    Scripting kan nemt gøre brug af "administrator" eller "superuser" privilegier, så det er bedst at teste scripts, før du sætter dem i gang. Brug også sund fornuft som at sikre, at du har sikkerhedskopier af de filer, du er ved at køre et script på. Det er også meget vigtigt at bruge de rigtige indstillinger, som -i for kommandoen rm, så din interaktion er nødvendig. Dette kan forhindre nogle ubehagelige fejl. Som sådan læse gennem scripts, du downloader og være forsigtig med data, du har, bare hvis tingene går galt.

    Grundlæggende er scripts bare almindelige tekstfiler. Du kan bruge enhver tekstredigerer til at skrive dem: gedit, emacs, vim, nano ... Denne liste fortsætter. Bare vær sikker på at gemme det som almindelig tekst, ikke som rig tekst eller et Word-dokument. Da jeg elsker den brugervenlighed, som nano giver, bruger jeg det.

    Script Tilladelser og Navne

    Scripts udføres som programmer, og for at dette skal ske skal de have de rette tilladelser. Du kan lave scripts eksekverbare ved at køre følgende kommando på det:

    chmod + x ~ / somecrazyfolder / script1

    Dette vil gøre det muligt for nogen at køre det pågældende script. Hvis du vil begrænse brugen af ​​det til kun din bruger, kan du bruge dette i stedet:

    chmod u + x ~ / somecrazyfolder / script1

    For at kunne køre dette script skal du cd ind i den rigtige mappe og derefter køre scriptet som dette:

    cd ~ / somecrazyfolder

    ./ script1

    For at gøre tingene mere bekvemme kan du placere scripts i en "bin" -mappe i din hjemmekatalog:

    ~ / Bin

    I mange moderne distros oprettes denne mappe ikke som standard, men du kan oprette den. Dette er normalt, hvor eksekverbare filer gemmes, der tilhører din bruger og ikke til andre brugere. Ved at placere scripts her kan du bare køre dem ved at skrive deres navn, ligesom andre kommandoer, i stedet for at skulle cd'ere rundt og bruge prefixet './'.

    Før du navngiver et script, skal du dog have følgende kommando for at kontrollere, om du har installeret et program, der bruger det pågældende navn:

    hvilken [kommando]

    Mange mennesker navngiver deres tidlige scripts "test", og når de forsøger at køre det i kommandolinjen, sker der ikke noget. Dette skyldes, at det er i konflikt med testkommandoen, hvilket ikke gør noget uden argumenter. Vær altid sikker på, at dine scriptnavne ikke er i konflikt med kommandoer, ellers kan du finde dig selv at lave ting, du ikke har til hensigt at gøre!

    Scripting Retningslinjer

    Som jeg nævnte tidligere, er hver script-fil i det væsentlige almindelig tekst. Det betyder ikke, at du kan skrive, hvad du vil have alt, hvad du vil. Når en tekstfil forsøges udført, skal skallene analysere dem for at få spor om, om de er scripts eller ej, og hvordan man håndterer alt korrekt. På grund af dette er der et par retningslinjer, du skal vide.

    1. Hvert script skal være med "#! / Bin / bash"
    2. Hver ny linje er en ny kommando
    3. Kommentar linjer starter med en #
    4. Kommandoer er omgivet af ()

    Hash-Bang Hack

    Når en skal analyserer gennem en tekstfil, er den mest direkte måde at identificere filen som et script ved at lave din første linje:

    #! / Bin / bash

    Hvis du bruger en anden skal, skal du erstatte sin vej her. Kommentar linjer starter med hashes (#), men tilføjer bang (!) Og shell stien, efter at det er en slags hack, der vil omgå denne kommentare regel og vil tvinge scriptet til at udføre med den shell, som denne linje peger på.

    Ny linje = Ny kommando

    Hver ny linje skal betragtes som en ny kommando eller en komponent i et større system. Hvis / da / ellers vil udsagn tage over flere linjer, men hver komponent i det pågældende system er i en ny linje. Lad ikke en kommando bløde over i næste linje, da dette kan afkorte den foregående kommando og give dig en fejl på den næste linje. Hvis din tekstredigerer gør det, skal du slukke for tekstindpakning for at være på den sikre side. Du kan slukke tekstindpakning i nano bit, der rammer ALT + L.

    Kommentér ofte med #s

    Hvis du starter en linje med en #, ignoreres linjen. Dette gør det til en kommentarlinje, hvor du kan minde dig om, hvad outputen fra den foregående kommando var, eller hvad den næste kommando vil gøre. Igen skal du slukke for tekstindpakning eller bryde dig om kommentarer til flere linjer, som alle begynder med en hash. Brug af mange kommentarer er en god praksis at holde, da det lader dig og andre mennesker nemt tilpasse dine scripts. Den eneste undtagelse er den førnævnte Hash-Bang hack, så følg ikke #s med! S. ;-)

    Kommandoer er omgivet af parenteser

    I ældre dage blev kommandosubstitutioner udført med enkelt tick markeringer (', aksjer ~ -tasten). Vi kommer ikke til at røre ved dette endnu, men da de fleste går ud og udforsker efter at have lært det grundlæggende, er det nok en god ide at nævne, at du skal bruge parenteser i stedet. Dette skyldes hovedsageligt, at når du nester - sæt kommandoer inde i andre kommandoer - fungerer parenteser bedre.

    Dit første script

    Lad os starte med et simpelt script, der giver dig mulighed for at kopiere filer og tilføje datoer til slutningen af ​​filnavnet. Lad os kalde det "datecp". Lad os først se om dette navn er i konflikt med noget:

    Du kan se, at der ikke er nogen output af den kommando, så vi er alle indstillet til at bruge dette navn.

    Lad os oprette en tom fil i mappen ~ / bin:

    touch ~ / bin / datecp

    Og lad os ændre tilladelsen nu, før vi glemmer:

    Lad os begynde at bygge vores script derefter. Åbn den fil i din valgte tekstredaktør. Som jeg sagde, kan jeg godt lide nanos enkelhed.

    nano ~ / bin / datecp

    Og lad os gå videre og sætte forudsætningen for første linje og en kommentar om, hvad dette script gør.

    Lad os nu erklære en variabel. Hvis du nogensinde har taget algebra, ved du sikkert hvad det er. En variabel giver os mulighed for at gemme oplysninger og gøre ting med det. Variabler kan "udvide" når de refereres andre steder. Det vil sige, i stedet for at vise deres navn, vil de vise deres lagrede indhold. Du kan senere fortælle den samme variabel for at gemme forskellige oplysninger, og enhver instruktion, der opstår efter det, vil bruge de nye oplysninger. Det er en rigtig dekorativ pladsholder.

    Hvad skal vi sætte ind variabel? Nå, lad os gemme dato og klokkeslæt! For at gøre dette kalder vi datoen kommandoen.

    Tag et kig på skærmbilledet nedenfor for at bygge udgangen af ​​datakommandoen:

    Du kan se at ved at tilføje forskellige variabler, der starter med%, kan du ændre kommandoens output til det ønskede. For mere information kan du se på den manuelle side for datakommandoen.

    Lad os bruge den sidste iteration af datakommandoen, "dato +% m_% d_% y-% H.% M.% S", og brug det i vores script.

    Hvis vi skulle gemme dette script lige nu, kunne vi køre det, og det ville give os output fra datakommandoen som vi ville forvente:

    Men lad os gøre noget anderledes. Lad os give et variabelt navn, som date_formatted til denne kommando. Den korrekte syntaks for dette er som følger:

    variabel = $ (kommandooptioner argumenter)

    Og for os ville vi bygge det sådan:

    date_formatted = $ (dato +% m_% d_% y-% H.% M.% S)

    Dette er hvad vi kalder kommandosubstitution. Vi fortæller stort set, at når variablen "date_formatted" vises, skal du køre kommandoen inden for parenteserne. Derefter skal uanset output, som kommandoer giver, vises i stedet for navnet på variablen, "date_formatted".

    Her er et eksempel script og dets output:

    Bemærk at der er to mellemrum i udgangen. Rummet i citerne af ekkokommandoen og rummet foran variablen vises begge. Brug ikke mellemrum, hvis du ikke vil have dem til at dukke op. Bemærk også, at uden denne tilføjede "echo" -linje ville scriptet give absolut ingen output.

    Lad os komme tilbage til vores script. Lad os næste tilføje i den kopierende del af kommandoen.

    cp -iv $ 1 $ 2. $ date_formatted

    Dette vil påberåbe kopikommandoen med -i og -v mulighederne. Den førstnævnte vil bede dig om bekræftelse, før du overskriver en fil, og sidstnævnte vil vise, hvad der kommer ned på kommandolinjen.

    Derefter kan du se, at jeg har tilføjet "$ 1" -alternativet. Ved scripting vil et dollar tegn ($) efterfulgt af et tal angive det nummererede argument af scriptet, når det blev påberåbt. For eksempel i følgende kommando:

    cp -iv Trogdor2.mp3 ringetone.mp3

    Det første argument er "Trogdor2.mp3" og det andet argument er "ringtone.mp3".

    Når vi ser tilbage på vores script, kan vi se, at vi refererer til to argumenter:

    Dette betyder, at når vi kører scriptet, skal vi give to argumenter for at scriptet skal køre korrekt. Det første argument, $ 1, er den fil, der vil blive kopieret, og er erstattet som "cp -iv" kommandos første argument.

    Det andet argument, $ 2, vil fungere som outputfilen for den samme kommando. Men du kan også se, at det er anderledes. Vi har tilføjet en periode, og vi har henvist til "date_formatted" variablen ovenfra. Nysgerrig om hvad dette gør?

    Her er hvad der sker, når scriptet køres:

    Du kan se, at outputfilen er opført som hvad jeg skrev for $ 2, efterfulgt af en periode, så udgangen af ​​datakommandoen! Det giver mening, rigtigt?

    Nu, når jeg kører datecp kommandoen, vil den køre dette script og tillade mig at kopiere enhver fil til en ny placering og automatisk tilføje dato og klokkeslæt til slutningen af ​​filnavnet. Nyttigt til arkivering af ting!


    Shell scripting er kernen i at gøre dit OS arbejde for dig. Du behøver ikke at lære et nyt programmeringssprog for at få det til at ske. Prøv scripting med nogle grundlæggende kommandoer derhjemme og begynd at tænke på, hvad du kan bruge dette til.

    Skriver du? Har du råd til nybegyndere? Del dine tanker i kommentarerne! Der er mere at komme i denne serie!