Početna » kako da » Vodič za početnike za skriptiranje školjki Osnove

    Vodič za početnike za skriptiranje školjki Osnove

    Pojam “shell scripting” često se spominje u Linux forumima, ali mnogi korisnici nisu upoznati s njim. Učenje ovog jednostavnog i moćnog načina programiranja može vam pomoći uštedjeti vrijeme, bolje naučiti naredbeni redak i protjerati dosadne zadatke upravljanja datotekama.

    Što je skriptiranje ljuske?

    Biti Linux korisnik znači da se igrate s naredbenim retkom. Svidjelo vam se to ili ne, postoje samo neke stvari koje se obavljaju mnogo lakše putem ovog sučelja nego pomoću pokazivanja i klikanja. Što više koristite i naučite naredbeni redak, to više vidite njegov potencijal. Pa, sam red za naredbe je program: ljuska. Većina Linux distrosa danas koristi Bash, i to je ono u što zaista unosite naredbe.

    Sada, neki od vas koji su koristili Windows prije korištenja Linuxa mogu zapamtiti datoteke skupa. To su bile male tekstualne datoteke koje možete popuniti naredbama za izvršavanje, a Windows će ih pokrenuti. To je bio pametan i uredan način da se neke stvari urade, kao što su trčanje igara u vašem srednjem školskom računalnom laboratoriju kada niste mogli otvoriti sistemske mape ili stvoriti prečace. Batch datoteke u sustavu Windows, iako korisne, jeftina su imitacija skripti.

    Shell skripte dopuštaju nam da programiramo naredbe u lancima i da ih sustav izvršava kao skriptirani događaj, baš kao i skupne datoteke. Oni također omogućuju mnogo korisnije funkcije, kao što je zamjena naredbi. Možete pozvati naredbu, poput datuma, i koristiti je kao dio sheme za imenovanje datoteka. Možete automatizirati sigurnosne kopije i svaka kopirana datoteka može imati trenutni datum dodan na kraj svog imena. Skripte nisu samo pozivi naredbi. Oni su sami po sebi programi. Skriptiranje vam omogućuje da koristite funkcije programiranja - kao što su "for" petlje, if / then / else izjave, i tako dalje - izravno unutar sučelja vašeg operativnog sustava. I ne morate učiti drugi jezik jer koristite ono što već znate: naredbeni redak.

    To je doista moć skriptiranja, mislim. Možete doći do programa s naredbama koje već znate, dok učite Staples većine glavnih programskih jezika. Trebate učiniti nešto ponavljajuće i zamorno? Skripta! Trebate prečac za stvarno zamršenu naredbu? Skripta! Želite li stvoriti stvarno jednostavno za korištenje sučelje naredbenog retka za nešto? Skripta!

    Prije nego što počneš

    Prije nego počnemo s nizom skripti, pokrivajmo neke osnovne informacije. Koristit ćemo bash ljusku, koju većina Linux distribucija koristi izvorno. Bash je dostupan i za korisnike Mac OS-a i za Cygwin u sustavu Windows. Budući da je toliko univerzalan, trebali biste moći skriptirati bez obzira na vašu platformu. Osim toga, sve dok postoje sve navedene naredbe, skripte mogu raditi na više platformi s malo ili nimalo potrebnih za podešavanje.

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

    U svojoj srži, skripte su samo obične tekstualne datoteke. Možete ih koristiti za pisanje bilo kojeg teksta: gedit, emacs, vim, nano… Ovaj se popis nastavlja. Samo ga sačuvajte kao običan tekst, a ne kao obogaćeni tekst ili Wordov dokument. Budući da volim jednostavnost korištenja koju nudi nano, koristit ću to.

    Dopuštenja skripte i imena

    Skripte se izvršavaju kao programi, a da bi se to dogodilo, moraju imati odgovarajuće dozvole. Skripte možete izvršiti izvršavanjem naredbe na njoj:

    chmod + x ~ / somecrazyfolder / script1

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

    chmod u + x ~ / somecrazyfolder / script1

    Da biste pokrenuli tu skriptu, morate ući u odgovarajući direktorij, a zatim pokrenuti skriptu na sljedeći način:

    cd ~ / somecrazyfolder

    ./ script1

    Da bi stvari bile praktičnije, skripte možete smjestiti u mapu "bin" u vašem matičnom direktoriju:

    ~ / Bin

    U mnogim modernim distribucijama ova se mapa više ne stvara prema zadanim postavkama, ali je možete stvoriti. To je obično mjesto gdje se pohranjuju izvršne datoteke koje pripadaju vašem korisniku, a ne drugim korisnicima. Postavljanjem skripti možete ih jednostavno pokrenuti tako da upišete njihovo ime, kao i druge naredbe, umjesto da zaokružite i koristite prefiks "./".

    Međutim, prije nego nazovete skriptu, trebate narediti sljedeću naredbu da biste provjerili imate li instaliran program koji koristi to ime:

    koje [naredbe]

    Mnogi ljudi svoje rane skripte nazivaju "test", a kada ga pokušaju pokrenuti u naredbenom retku, ništa se ne događa. To je zato što je u konfliktu s test naredbom, koja ne čini ništa bez argumenata. Uvijek budite sigurni da imena skripti nisu u sukobu s naredbama, inače možete pronaći stvari koje ne želite učiniti!

    Smjernice za skriptiranje

    Kao što sam već spomenuo, svaka datoteka skripte je u biti običan tekst. To ne znači da možeš napisati sve što želiš - nevoljko. Kada se pokuša izvršiti tekstualna datoteka, ljuske će ih analizirati za tragove o tome jesu li oni skripte ili ne, i kako sve ispravno obraditi. Zbog toga postoji nekoliko smjernica koje trebate znati.

    1. Svaka skripta bi trebala biti s "#! / Bin / bash"
    2. Svaka nova linija je nova naredba
    3. Redovi komentara počinju s #
    4. Naredbe su okružene s ()

    Hash-Bang Hack

    Kada ljuska analizira tekstualnu datoteku, najizravniji način identifikacije datoteke kao skripte jest izrada prvog retka:

    #! / Bin / bash

    Ako koristite drugu ljusku, ovdje zamijenite njezin put. Linije komentara počinju s hashes (#), ali dodavanjem bang (!) I putanje ljuske nakon što je neka vrsta haka koja će zaobići ovo pravilo komentara i prisiliti skriptu da se izvrši s ljuskom koju ova linija pokazuje.

    Nova linija = Nova naredba

    Svaku novu liniju treba smatrati novom naredbom ili komponentom većeg sustava. Na primjer, naredbe / then / else preuzimaju više redaka, ali svaka komponenta tog sustava je u novom retku. Nemojte dopustiti da naredba iskrca u sljedeći redak jer to može skratiti prethodnu naredbu i dati vam pogrešku u sljedećem retku. Ako vaš uređivač teksta to radi, trebali biste isključiti omatanje teksta da biste bili sigurni. Možete isključiti prelamanje teksta u nano-bitnom pritisku ALT + L.

    Komentar često s #s

    Ako pokrenete liniju s #, crta se zanemaruje. To ga pretvara u komentarsku liniju, gdje se možete podsjetiti što je izlaz iz prethodne naredbe, ili što će naredna naredba učiniti. Opet, isključite omatanje teksta ili prekinite komentar u više redaka koji svi počinju s hashom. Upotreba mnogo komentara dobra je praksa koju možete zadržati, jer omogućuje lakše podešavanje vaših skripti. Jedina iznimka je spomenuti Hash-Bang hak, tako da ne slijedite #s s! S. ;-)

    Naredbe su okružene zagradama

    U starijim danima, zamjene naredbi izvršene su s jednim kvačicom (', dijeli ~ ključ). Još se nećemo dotaknuti toga, ali kako većina ljudi odlazi i istražuje nakon učenja osnove, vjerojatno je dobro spomenuti da umjesto toga trebate koristiti zagrade. To je uglavnom zato što kada gniježete - stavite naredbe unutar drugih naredbi - zagrade rade bolje.

    Vaš prvi skript

    Počnimo s jednostavnom skriptom koja vam omogućuje kopiranje datoteka i dodavanje datuma na kraj naziva datoteke. Nazovimo ga “datecp”. Prvo provjerimo da li je to ime u sukobu s nečim:

    Možete vidjeti da nema izlaza koje naredbe, tako da smo svi postavili na korištenje ovog imena.

    Napravimo praznu datoteku u mapi ~ / bin:

    dodirnite ~ / bin / datecp

    Sada, prije nego što zaboravimo, izmijenimo dopuštenje:

    Počnimo graditi našu skriptu onda. Otvorite tu datoteku u svom uređivaču teksta. Kao što sam rekao, sviđa mi se jednostavnost nanoa.

    nano ~ / bin / datecp

    I, idemo naprijed i stavimo preduslov prve linije, i komentar o tome što radi ova skripta.

    Zatim, proglasimo varijablu. Ako ste ikada uzeli algebru, vjerojatno znate što je to. Varijabla nam omogućuje pohranjivanje informacija i obavljanje poslova s ​​njom. Varijable se mogu "proširiti" kada se spominju na drugom mjestu. Naime, umjesto da prikazuju svoje ime, prikazat će svoje pohranjene sadržaje. Kasnije možete istoj toj varijabli reći da pohranjuje različite informacije i svaku naredbu koja se pojavljuje nakon toga koristiti nove informacije. To je stvarno otmjeno mjesto.

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

    Pogledajte sliku ispod kako ćete izraditi izlaz naredbe date:

    Možete vidjeti da dodavanjem različitih varijabli koje počinju s%, možete promijeniti izlaz naredbe u ono što želite. Za više informacija, pogledajte stranicu s uputama za naredbu date.

    Iskoristimo tu posljednju iteraciju naredbe datuma, "date +% m_% d_% y-% H.% M.% S", i koristimo to u našoj skripti.

    Ako bismo sada spremili ovu skriptu, mogli bismo je pokrenuti i dati nam izlaz naredbe datuma kao što bismo očekivali:

    Ali, učinimo nešto drugačije. Dajmo ime varijable, kao date_formatted ovoj naredbi. Odgovarajuća sintaksa je sljedeća:

    variable = $ (argumenti -options argumenti)

    I za nas bismo je izgradili ovako:

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

    To je ono što mi zovemo zamjena naredbi. Mi u suštini govorimo bash da kad god se pojavi varijabla "date_formatted", pokrenuti naredbu unutar zagrada. Zatim, bez obzira na izlaz koji naredbe daju treba prikazati umjesto imena varijable, "date_formatted".

    Evo primjera skripte i njezinog izlaza:

    Imajte na umu da u izlazu postoje dva mjesta. Prikazuje se prostor unutar navodnika naredbe echo i razmaka ispred varijable. Nemojte koristiti mjesta ako ne želite da se pojave. Također imajte na umu da bez ove dodane “echo” linije, skripta ne bi dala apsolutno nikakav izlaz.

    Vratimo se na naš scenarij. Zatim dodamo sljedeći dio naredbe.

    cp -iv $ 1 $ 2. $ date_formatted

    To će pozvati naredbu kopiranja, s opcijama -i i -v. Prvi će vas pitati za provjeru prije prepisivanja datoteke, a drugi će prikazati što se nalazi u naredbenom retku.

    Zatim možete vidjeti dodanu opciju "$ 1". Kada je skriptiranje, znak dolara ($) iza kojeg slijedi broj će označavati taj numerirani argument skripte kada je bio pozvan. Na primjer, u sljedećoj naredbi:

    cp -iv Trogdor2.mp3 ringtone.mp3

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

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

    To znači da kada pokrenemo skriptu, morat ćemo dati dva argumenta za ispravno pokretanje skripte. Prvi argument, $ 1, je datoteka koja će biti kopirana i zamijenjena je kao prvi argument naredbe "cp -iv".

    Drugi argument, $ 2, će djelovati kao izlazna datoteka za istu naredbu. Ali, također možete vidjeti da je to drugačije. Dodali smo razdoblje i povezali smo varijablu "date_formatted" odozgo. Znatiželjno je što to čini?

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

    Možete vidjeti da je izlazna datoteka navedena kao što sam unio za $ 2, nakon čega slijedi razdoblje, a zatim izlazni datum naredbe! Ima smisla, točno?

    Sada kada pokrenem naredbu datecp, pokrenut će ovu skriptu i dopustiti mi da kopiram bilo koju datoteku na novo mjesto i automatski dodam datum i vrijeme na kraj naziva datoteke. Korisno za arhiviranje stvari!


    Shell skriptiranje je u srcu izrade OS-a za vas. Ne morate naučiti ni novi programski jezik da bi se to i dogodilo. Pokušajte skriptirati s nekim osnovnim naredbama kod kuće i početi razmišljati o tome što možete koristiti za to.

    Imate li skriptu? Imate li savjet za početnike? Podijelite svoje misli u komentarima! U ovoj seriji ima još toga!