23Aug

Vodič za početnike Shell Scripting: Osnove

Izraz "skriptiranje ljuske" često se spominje na Linux forumima, ali mnogi korisnici nisu upoznati s njim. 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 oko naredbenog retka. 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 'za' petlje, ako su /then/ druge 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 započnete

Prije nego započnemo serija skriptiranja, pokrijmo 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 potrebnim.

Skriptiranje može jednostavno koristiti "administratorske" ili "superuser" privilegije, stoga je najbolje testirati skripte prije nego što 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.

Skupine su u središtu 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.

skripte Dozvole i nazivi

Skripte se izvode kao programi, i kako bi se to dogodilo, moraju imati odgovarajuće dozvole. Skripte možete izvršiti pokretanjem sljedeće naredbe:

chmod + x ~ /somecrazyfolder/ skripta1

To će omogućiti svakome pokretanje te skripte. Ako želite ograničiti njegovu upotrebu samo svom korisniku, možete ga koristiti umjesto toga:

chmod u + x ~ /somecrazyfolder/ skripta1

Da biste pokrenuli ovu skriptu, trebali biste upisati CD u odgovarajući direktorij, a zatim pokrenuti skriptu kao što je ovaj:

cd ~ / somecrazyfolder

. /script1

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

~ / bin

U mnogim modernim distributerima, ova mapa više nije stvorena 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 što nazovete skriptu, trebali biste sljedeću naredbu provjeriti imate li instaliran program koji koristi taj naziv:

koji [naredba]

Mnogi ljudi imenuju svoje rane skripte "test" i kada pokušajupokrenite ga 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 skripta u biti je 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 sa "#!
  2. bash "
  3. Svaka nova linija je nova naredba
  4. Komentarske linije započinju s #
  5. Naredbe su okružene()

Hash-Bang Hack

Kada shell analizira tekstualnu datoteku, najizravniji način identifikacije datoteke kaoskripta je stvaranjem 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 pomoću ljuske koju ova linija ukazuje.

Nova linija = nova naredba

Svaka nova linija treba smatrati novom naredbom ili komponentom većeg sustava. Ako se primjerice izjave /then/, preuzimaju 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 s # redom, 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.;-)

naredbe okružene su roditeljima

U starijim danima, zamjene naredbi bile su učinjene s jednim oznakama( `, dionice ~ ključa).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 - zagradama bolje funkcioniraju. 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 izlaza naredbe pa smo svi namješteni za korištenje tog imena.

Napravimo praznu datoteku u mapi ~ / bin:

touch ~ /bin/ datumcp

A sada promijenimo dozvolu prije nego što zaboravimo:

Počnimo početi 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 prvu liniju preduvjeta, te komentarom o tome što ova skripta radi.

Zatim, proglasimo 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 u 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.

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

Da bismo sada spremili ovu skriptu, mogli bismo ga pokrenuti i da će nam dati izlaz datumske naredbe 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)

I za nas, mi bi ga graditi ovako:

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

Ovo 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 našu skriptu. Dovoljno je dodati u dijelu kopiranja naredbe.

cp -iv $ 1 $ 2. $ date_formatted

Ovo će pozvati 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 referenciramo 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 navedena kao ono što sam unio za $ 2, nakon čega slijedi razdoblje, a zatim izlaz datuma naredbe! Ima smisla, zar ne?

Sada kad pokrenem naredbu datecp, pokrenut ću ovu skriptu i dopustiti da kopirati bilo koju datoteku na novu lokaciju i automatski dodati datum i vrijeme na kraj naziva datoteke. Korisno za arhiviranje stvari!

Shell skriptiranje je u središtu što vaš OS radi 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!