If-Koubou

Vodič za početnike Shell Scripting: Osnove

Vodič za početnike Shell Scripting: Osnove (Kako da)

Izraz "shell scripting" često se spominje na Linux forumima, ali mnogi korisnici nisu upoznati s njom. Učenje ove jednostavne i moćne programerske metode može vam pomoći uštedjeti vrijeme, bolje razumjeti zapovjednu liniju i ukloniti dosadne zadatke upravljanja datotekama.

Što je Shell Scripting?

Budući da ste Linux korisnik znači da se igrate okolo s naredbenom retkom. Svidjelo se to ili ne, samo su neke stvari koje se čine lakšim putem ovog sučelja nego pokažući i kliknuvši. Što više upotrebljavate i saznate naredbeni redak, to više vidite njezin potencijal. Pa, zapovjedna linija sama je program: ljuska. Većina Linux distros danas koristi Bash, i to je ono što stvarno unosite naredbe.

Neki od vas koji su koristili Windows prije korištenja Linuxa mogu se sjetiti batch datoteka. To su bile male tekstualne datoteke koje biste mogli ispuniti naredbama za izvršavanje i Windows će ih pokrenuti zauzvrat. Bilo je to pametan i uredan način da se neke stvari naprave, poput igranja igara u vašem laboratoriju računalnih srednjih škola kada niste mogli otvoriti mape sustava ili stvoriti prečace. Batch datoteke u sustavu Windows, dok su korisne, je jeftina imitacija sheme skripti.

Shell skripte omogućuju programiranje naredbi u lancima i sustav ih izvršava kao scenarij, kao i skupne datoteke. Oni također omogućuju puno korisnije funkcije, kao što je zamjena naredbe. Možete se pozvati naredbu, kao što je datum, i koristiti je izlaz kao dio sheme imenovanja datoteka. Možete automatizirati sigurnosne kopije i svaka kopirana datoteka može imati dodatni datum dodan do kraja svog naziva. Skripte nisu samo zazivanje naredbi. Oni su programi sami po sebi. Skriptiranje vam omogućuje da koristite programske funkcije - kao što su "for" petlje, if / then / else izjave i tako dalje - izravno unutar sučelja vašeg operativnog sustava. I ne morate naučiti drugi jezik jer upotrebljavate ono što već znate: naredbeni redak.

To je stvarno moć skriptiranja, mislim. Možete se programirati s naredbama koje već znate, dok učite grafikone većine glavnih programskih jezika. Trebate učiniti nešto ponavljajuće i zamorno? Skripta je! Trebate prečicu za stvarno zapetljanu naredbu? Skripta je! Želite li izgraditi stvarno jednostavan za korištenje sučelje naredbenog retka za nešto? Skripta je!

Prije nego što počneš

Prije nego započnemo serija skriptnih, pokrimo neke osnovne informacije. Koristit ćemo bash shell, koji većina Linux distribucija koristi nativno. Bash je dostupan za korisnike Mac OS i Cygwin na Windowsu. Budući da je tako univerzalna, trebali biste biti u stanju pisati bez obzira na platformu. Osim toga, sve dok se sve naredbe koje se upućuju postoje, skripte mogu raditi na više platformi s malo ili nikakvim ugađanjem.

Skriptiranje može lako iskoristiti privilegije "administratora" ili "superkorisnika", stoga je najbolje testirati skripte prije nego ih stavite na posao. Također koristite zdrav razum, kao što ste bili sigurni da imate sigurnosne kopije datoteka na kojima želite pokrenuti skriptu. Također je jako važno koristiti odgovarajuće opcije, kao što je -i za naredbu rm, tako da je potrebna vaša interakcija. To može spriječiti neke gadne pogreške. Kao takav, pročitajte skripte koje preuzimate i budite oprezni s podacima koje imate, samo u slučaju da stvari krenu krivo.

U svojoj jezgri, skripte su samo obične tekstualne datoteke. Možete koristiti bilo koji tekst editor za pisanje: gedit, emacs, vim, nano ... Ovaj popis ide dalje. Samo ga svakako spremite kao običan tekst, a ne kao bogati tekst ili dokument Word. Budući da volim jednostavnost korištenja koju nano pruža, koristit ću to.

Dozvole i imena skripata

Skripte se izvode poput programa, a kako bi se to dogodilo, moraju imati odgovarajuće dozvole. Skripte možete izvršiti izvršavanjem naredbe na njemu:

chmod + x ~ / somecrazyfolder / script1

To će omogućiti svakome pokretanje te određene skripte. Ako želite ograničiti njegovu upotrebu samo svom korisniku, možete to upotrijebiti umjesto toga:

chmod u + x ~ / somecrazyfolder / script1

Da biste pokrenuli ovu skriptu, trebali biste upisati CD u odgovarajući direktorij, a zatim pokrenuti skriptu ovako:

cd ~ / somecrazyfolder

./script1

Da bi stvari bile prikladnije, skripte možete staviti u mapu "bin" u vašem kućnom imeniku:

~ / Bin

U mnogim modernim distributerima ova mapa više se ne proizvodi prema zadanim postavkama, ali ga možete izraditi. Ovo je obično mjesto gdje se pohranjuju izvršne datoteke koje pripadaju vašem korisniku, a ne drugim korisnicima. Postavljanjem skripti ovdje možete ih pokrenuti upisivanjem njihovog imena, baš kao i ostalih naredbi, umjesto da se morate nalaziti oko CD-a i koristiti './' prefiks.

Prije nego nazovete skriptu, trebali biste sljedeće naredbu provjeriti imate li instaliran program koji koristi taj naziv:

koji [naredba]

Mnogi ljudi imenuju svoje rane skripte "test", a kad ih pokušaju pokrenuti u naredbenom retku, ništa se ne događa. To je zato što je u sukobu s testnom naredbom, koja ništa ne čini bez argumenata. Uvijek budite sigurni da imena skripte nisu u sukobu s naredbama, inače se možete naći da radite stvari koje ne namjeravate učiniti!

Smjernice za skriptiranje

Kao što sam već spomenula, svaka datoteka skripte je u biti običan tekst. To ne znači da možete pisati što želiš svima, bez obzira. Kada se pokušava izvršiti tekstualna datoteka, ljuske će ih analizirati za tragove o tome jesu li skripte ili ne, i kako postupati ispravno. Zbog toga postoji nekoliko smjernica koje morate znati.

  1. Svaka skripta treba biti s "#! / Bin / bash"
  2. Svaka nova linija je nova naredba
  3. Redak komentara započinje s #
  4. Naredbe su okružene ()

Hash-Bang Hack

Kada ljuska analizira tekstnu datoteku, najizravniji način prepoznavanja datoteke kao skripte jest izrada prve linije:

#! / Bin / bash

Ako koristite drugu ljusku, ovdje zamijenite njezin put. Redak komentara započinje s brisanjem (#), ali dodavanjem bang (!) I putanje ljuske nakon što je to vrsta hakiranja koja će zaobići ovo pravilo komentara i prisiliti skriptu da se izvrši s ljuskom koju ova linija ukazuje.

Nova linija = nova naredba

Svaka nova linija treba smatrati novom naredbom ili komponentom većeg sustava. Ako, primjerice, / onda / else izjave preuzmu više redaka, ali svaka komponenta tog sustava nalazi se u novom retku. Nemojte dopustiti da naredba padne u sljedeći redak jer to može skratiti prethodnu naredbu i dati vam pogrešku na sljedećem retku. Ako vaš urednik teksta to radi, trebali biste isključiti tekstualno umetanje da biste bili sigurni. Možete isključiti omotavanje teksta u nano bita koji će pritisnuti ALT + L.

Komentar Često s #s

Ako započnete redak s #, linija se zanemaruje. To ga pretvara u liniju komentara, gdje se možete podsjetiti na ono što je izlaz prethodne naredbe bio, ili što će sljedeća naredba učiniti. Ponovno isključite tekstualno umetanje ili izbacite komentar u više redaka koji počinju s hashom. Korištenje velikog broja komentara je dobra praksa da zadržite, jer vam omogućuje da i vi i drugi ljudi lakše podešavate svoje skripte. Jedina iznimka je gore spomenuti Hash-Bang hack, stoga nemojte slijediti #s with! S. ;-)

Zapovjedi su okruženi roditeljima

U starijim danima, zamjene naredbi bile su učinjene s jednim oznakama (', dijeli ~ ključ). Nećemo se dotaknuti još toga, ali budući da većina ljudi ide i istražuje nakon što je naučila osnove, vjerojatno je dobro napomenuti da umjesto toga trebate koristiti zagrade. To je uglavnom zato što, kada gnjavite - stavite naredbe unutar drugih naredbi - zagrade se bolje ponašaju.

Vaša prva skripta

Počnimo s jednostavnom skriptom koja vam omogućuje kopiranje datoteka i dodavanje datuma do kraja naziva datoteke. Nazovimo ga "datecp". Najprije provjerimo da li se to ime u sukobu s nečim:

Možete vidjeti da nema nijedne izlazne naredbe pa smo svi spremni koristiti ovo ime.

Napravimo praznu datoteku u mapi ~ / bin:

dodirnite ~ / bin / datecp

A sada promijenimo dozvolu prije nego što zaboravimo:

Počnimo tada graditi našu skriptu. Otvorite tu datoteku u uređivaču teksta izbora. Kao što sam rekao, volim jednostavnost nano.

nano ~ / bin / datecp

I, idemo naprijed i postavimo preduvjet prvog retka, i komentar o tome što ova skripta radi.

Zatim deklarirati varijablu. Ako ste ikad uzeli algebru, vjerojatno znate što je to. Varijabla nam omogućuje spremanje informacija i rad s njima. Varijable se mogu "proširiti" kada su navedene na drugom mjestu. To jest, umjesto da prikazuju svoje ime, prikazat će njihov pohranjeni sadržaj. Kasnije možete reći istu varijablu za spremanje različitih informacija, a sve instrukcije koje se pojavljuju nakon toga će koristiti nove informacije. To je stvarno zamislivo mjesto.

Što ćemo staviti varijablu? Pa, spremimo datum i vrijeme! Da bismo to učinili, pozvat ćemo naredbu datuma.

Pogledajte donji screenshot kako biste izradili izlaz naredbe datuma:

Možete vidjeti da dodavanjem različitih varijabli koje počinju s%, možete promijeniti izlaz naredbe na ono što želite. Za više informacija možete pogledati priručnu stranicu za naredbu datuma.

Koristimo tu posljednju iteraciju naredbe datuma, "datum +% m_% d_% y-% H.% M.% S", a koristite to u našoj skripti.

Ako bismo sada spremili ovu skriptu, mogli bismo ga pokrenuti i dat će nam izlaz naredbe datuma kao što bismo očekivali:

Ali, učinimo nešto drugačije. Dajmo naziv varijable, kao što je date_formatted na ovu naredbu. Pravilna sintaksa za ovo je kako slijedi:

varijabla = $ (naredba-opcije argumenata)

A za nas, gradimo ga ovako:

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

To je ono što zovemo zamjenom naredbe. U suštini govorimo bash da kad god se pojavi varijabla "date_formatted", pokrenite naredbu unutar zagrada. Zatim, umjesto naziva varijable, prikazuju se sve što izlazi naredbe, "date_formatted".

Evo primjera skripte i njegovog izlaza:

Imajte na umu da u izlazu postoje dva razmaka. Prikazuje se prostor unutar citata ehe naredbe i prostora ispred varijable. Nemojte koristiti razmake ako ne želite da se pojave. Također imajte na umu da bez ove dodane linije "jeka" skripta ne bi imala apsolutno nikakve rezultate.

Vratimo se našem scenariju. Dovoljno je dodati u dijelu kopiranja naredbe.

cp -iv $ 1 $ 2. $ date_formatted

Ovo će zazivati ​​naredbu za kopiranje, s opcijama -i i -v. Prethodnik će vas tražiti da provjerite prije nego što prepišete datoteku, a potonji će prikazati ono što se nalazi na naredbenom retku.

Zatim možete vidjeti da sam dodao opciju "$ 1". Prilikom skriptiranja znak dolara ($) nakon kojeg slijedi broj označava taj brojni argument skripte kada se poziva. Na primjer, u sljedećoj naredbi:

cp -iv Trogdor2.mp3 ringtone.mp3

Prvi argument je "Trogdor2.mp3", a drugi argument je "ringtone.mp3".

Gledajući unatrag našu skriptu, možemo vidjeti da se upućujemo na dva argumenta:

To znači da kada pokrenemo skriptu, moramo navesti dva argumenta za ispravno pokretanje skripte. Prvi argument, $ 1, je datoteka koja će se kopirati, a zamijenjena je kao prvi argument za naredbu "cp -iv".

Drugi argument, $ 2, djelovat će kao izlazna datoteka za istu naredbu. Ali, također možete vidjeti da je drugačiji. Dodali smo razdoblje, a iznad smo se uputili na varijablu "date_formatted". Znatiželjan o tome što to radi?

Evo što se događa kada se skripta pokrene:

Možete vidjeti da je izlazna datoteka na popisu kao što sam unio za $ 2, nakon čega slijedi razdoblje, a zatim izlaz datuma naredbe! Ima smisla, zar ne?

Sada kada pokrenem naredbu datecp, pokrenut će ovu skriptu i omogućiti kopiranje bilo koje datoteke na novu lokaciju i automatski dodati datum i vrijeme na kraj naziva datoteke. Korisno za arhiviranje stvari!

Shell skriptiranje je u središtu stvaranja vašeg operativnog sustava za vas. Ne morate naučiti novi programski jezik kako bi se to moglo dogoditi. Pokušajte skriptirati s nekim osnovnim naredbama kod kuće i započeti razmišljati o tome što možete koristiti za to.

Jeste li skripti? Imate savjete za novorođenče? Podijelite svoje misli u komentarima! U ovoj seriji ima više!