Bash skriptiranje: Vodič za izradu

Bash skriptne skripte koriste administratori sustava, programeri, mrežni inženjeri, akademici i praktički svi koji redovito koriste Linux /Unix. Bez obzira na to što korisnik radi i što je njegovo opće znanje o računalnim vještinama, može pronaći pravi način za korištenje Bash skriptiranja. Iako ispravno, nazivaju se shell-skripte, ali većina programera upućuje na Bash skripte. Kao interaktivna ljuska, to je kratki jezik za pokretanje i upravljanje izračunima. Kao skriptni jezik, to je jezik specifičan za domenu, za upravljanje i uređivanje procesa i datoteka.

Definicija Bash skripte

Bash skriptiranje - tumač za naredbeni jezik. On je široko dostupan u raznim operativnim sustavima i podrazumijevani je parser za većinu GNU /Linux sustava. Ovo je skraćenica "Bourne Again SHell".


Ostale definicije:
  • Shell je makroprocesor koji vam omogućuje izvođenje interaktivnog ili neinteraktivnog izvršavanja naredbi.
  • Skriptiranje vam omogućuje da konfigurirate automatsko izvršavanje naredbi koje bi inače djelovale interaktivno jedna za drugom.
  • Bash skriptiranje je zadano na mnogim GNU /Linux sustavima, tako da skripta skripti radi čak i bez definiranja kao tumača. Da biste saznali što radi zadana naredba, upišite: $ echo $ SHELL /bin /bash. Postoje i druge interpretacije ljuske, kao što su Korn, C i mnogi drugi. Zbog toga se preporuča odredititumač ljuske koji će se koristiti posebno za sadržaj skripte.


    Sada će sve skripte uključivati ​​definiciju interpretera ljuske: #! /Bin /bash. Točnije, ovo je napisano u posebnoj literaturi Advanced Bash scripting guide.

    Imena datoteka i dozvole

    Za izvršavanje skripte ljuske, datoteka mora biti izvršna, izvršena pomoću naredbe "chmod + x FILENAME". Prema zadanim postavkama, sve novostvorene datoteke se ne izvršavaju bez obzira na sufiks ekstenzije datoteke. Zapravo, najnovija značajka u GNU /Linux sustavima zapravo nije nikakvo značenje. Kada izvršavate naredbu "ls" za popis svih datoteka i direktorija, odmah je jasno da je .sh datoteka uvjerljiva skripta, a ".jpg" će biti sažeta slika. Više informacija o ekstenzijama datoteka na ovom jeziku potražite u vodiču Advanced Bash scripting. U GNU /Linux datotekama, naredba se može koristiti za identifikaciju tipa datoteke. Kao što se može vidjeti iz donjeg primjera, ekstenzija datoteke nema smisla, a tumač ljuske u ovom slučaju je važniji.
    Dakle, ime skripte ljuske "0_xyz" radi dobro, iako je programeri nastoje izbjeći koliko god je to moguće.

    naredba ljuske PATH

    Kada programer unese naredbu u ljusci, Bash gleda određene direktorije kako bi saznao može li ga pronaći. Prema tome, prema Bash skriptnom vodiču, ako u ljusci upišete "ls", izvršit će se samo naredba ako je na putu. Operacija će završiti s pogreškom ako jestneće biti u jednom od direktorija koji su dio rute. Ako na putu postoji slučajnost u više direktorija, on bira prvu. Možete pronaći rutu pokretanjem:
    echo $ PATH. Na ekranu ćete vidjeti nešto poput ovoga: /home /jzb /bin: /usr /local /bin: /usr /bin: /bin: /usr /bin /x11: /usr /X11R6 /bin: /usr /igre: /usr /lib /jvm /jre /bin.

    Ispravan put do matičnog direktorija

    Svaki direktorij u kojem Bash izgleda kao da je odvojen dvotočkom. U ovom slučaju, prvi će provjeriti direktorij "bin", a zatim /usr /local /bin, /usr /bin. Ako se korisnik prijavio kao root, trebao bi vidjeti drugi skup direktorija, uključujući /usr /local /sbin, /usr /sbin. Možete ih dodati u pokret ili urediti uređivanjem datoteka: ~ /.bashrc i ~ /.bash_profile. Na primjer: PATH = "$ HOME /bin: $ PATH". Možete lagano promijeniti ovo pravilo i instalirati naprednu Bash skriptiranje. PATH "=" kaže Bashu da će postaviti put, i "$ HOME /bin" ga poziva da doda bin direktorij, a nakon "$ PATH" preporučuje da doda sve što je već na ruti. Parametar «:» je graničnik između elemenata. Programer će vidjeti nešto slično ovome na zaslonu svog monitora: if [-d "$ HOME /bin"]; zatim PATH = "$ HOME /bin: $ PATH" fi. Ovo pravilo će provjeriti postoji li direktorij "bin" u matičnom direktoriju, a zatim ga dodati na put za ispravan rad "pokrenuti Bash skriptu".

    Pseudonim redaka

    Alias ​​je niz u kojem će Bash biti zamijenjen drugim timom. Jednostavan primjer: alias ls = 'ls --color = auto'. To mu govori da prilikom pokretanja "ls" morate pokrenuti "ls --color = auto", bez skupa svega ostalog. Aliase možete postaviti na naredbenom retku i to je dobro za testiranje.
    Ima smislapostavite aliase na "~ /.bash_profile i ~ /.bashrc". Ili stvorite nešto poput "~ /.aliases" i nazovite ga iz konfiguracijskih datoteka na sljedeći način: if [-f ~ /.bash_aliases]; tada. ~ /.bash_aliases fi Da biste vidjeli već postojeće aliase, samo ga pokrenite u ljusci. U distribuciji je zadano označeno. Na primjer, zadana postavka je openSUSE 11.2 bez ikakvih promjena.
    Kao test, možete vidjeti da je već instaliran u distribuciji i pokušati napraviti nekoliko vlastitih opcija.

    Proširenje ljuske

    Prije nego što Bash izvrši naredbu, on procjenjuje unos i "proširuje" pseudonime i druge izraze kad god je to potrebno. Ima nekoliko znakova koje nužno obuhvaća jedan ili više znakova i naziva se "simbol generalizacije". Takva usporedba modela može biti doista korisna. Na primjer, ako želite vidjeti sve JPEG datoteke u direktoriju, pokrenite "ls * jpg", pod uvjetom da su JPEG datoteke označene kao "jpg", a Bash će ga proširiti tako da odgovara bilo kojem nazivu datoteke koji završava s jpg.

    Ako trebate kombinirati samo jedan znak, upotrijebite "?". Ovo će ukazati na jedan znak, pa "je li?" .Jpg "će se podudarati samo s imenima datoteka, kao što su" 1.jpg "ili" a.jpg ", a ne" 01.jpg ". Bash vam također omogućuje usklađivanje raspona znakova pomoću zagrada. Korištenje [abc12] će odgovarati jednom od znakova u proširenju. Dakle, rad s "ls -lh [abc12] .jpg" bit će u korelaciji s a.jpg, b.jpg, c.jpg, 1.jpg i 2.jpg, ali ne i 12.jpg ili abc.jpg. Predložak možete poništiti prefiksom "bang" (!), Na primjer: ls -lh [! Ab12] .jpgće odgovarati c.jpg ili 3.jpg, ali ne i 2.jpg, itd. Još jedan zgodan trik je proširenje zagrada kada je riječ o organiziranju dokumenata po godinama i datumima. Ako, na primjer, katalog ~ /Documents ima katalog 2010 s poddirektorijima od 01 do 12 i ne treba ispisivati ​​od 01 do 12, umjesto toga napravite Bash: mkdir 2010 /{0112}. Kada pročita pravilo, on proširuje ono što je u zagradama od 01 do 12. Također radi sa slovima, pa ako trebate poddirektorije preko z, možete pokrenuti mkdir {az} i on će stvoriti direktorije kroz z. Može raditi i velikim slovima.

    Izvedba skripte

    Postoji alternativni način za pokretanje Bash skripti. U vrlo pojednostavljenoj prezentaciji, njegova skripta nije ništa drugo nego tekstualna datoteka koja sadrži upute koje se moraju izvršavati uzastopce odozgo prema dolje. Kako se tumače upute ovisi o određenom shebang-u ili načinu na koji se skripta izvršava.
    Druga metoda za implementaciju skripti je eksplicitno pozvati njezinog tumača, primjerice $ bash date.sh. Prema tome, skripta će se izvoditi bez potrebe za pokretanjem skripte ljuske i bez objavljivanja shebang, izravno u shemi operacijskog sustava, pozivajući izvršnu binarnu bash datoteku. Tako će se sadržaj datoteke date.sh učitati i protumačiti kao Bash Shell skripta.

    Relativna i apsolutna staza

    Prije nego što možete programirati službenu skriptu ljuske, kao što je izlazna Bash skripta, morate definirati navigaciju s njom i postaviti razliku između relativne i apsolutne putanje do datoteke. Vjerojatno najbolja analogija koja objašnjava relativnu i apsolutnu putanju do datoteke jevizualizirajte GNU /Linux datotečni sustav kao višekatnu zgradu. Korijenski imenik je ulazna vrata zgrade, označen pozicijom, pruža ulaz u cjelokupni datotečni sustav "strukture", stoga daje pristup svim direktorijima - "podovima" i "sobama" - i datotekama - "stanovnicima". Primjerice, da biste otišli u sobu 1 na 3. katu, najprije morate ući u glavna vrata, a zatim otići na 3. kat (razina 3) i ući u sobu (soba1). Dakle, apsolutni put do ove konkretne sobe na podu unutar zgrade "/level3 /room1". Stoga, ako želite posjetiti sobu 2 i na razini 3, prvo pronađite trenutnu lokaciju, koja je soba 1 tako da upišete, "/", a zatim uključite naziv sobe "soba2". To vodi do relativne putanje do sobe 2, koja je u ovom slučaju "/room2". Budući da je u ovom primjeru korisnik već bio u trećoj razini, ne mora napustiti cijelu zgradu i proći apsolutnu stazu kroz glavni ulaz /level3 /room2. Srećom, GNU /Linux ima jednostavan alat za kompas, koji pomaže programeru da se kreće preko datotečnog sustava kao "pwd" naredba. Ova naredba će uvijek ispisati trenutnu lokaciju kada se izvrši. Sljedeći primjer će koristiti naredbe "cd" i "pwd" za navigaciju GNU /Linux datotečnim sustavom koristeći apsolutne i relativne putove.
    Daljnji nastavak.
    Izvedite "cd" naredbu bez ikakvih argumenata za trenutnu navigaciju do korisnikovog domaćeg direktorija s bilo kojeg mjesta. Kao što možete vidjeti, navigacija kroz GNU /Linux datotečni sustav je jednostavna i istovremeno zbunjujućaTema.

    Koncepti varijabli

    Gotovo svaki programski jezik ima koncept varijabli - simboličko ime za dio memorije koji se može dodijeliti vrijednostima, pročitati i manipulirati njegovim sadržajem. Na primjer, za primjer Bash skripte, Hello World se može izvršiti pomoću varijabli. Napominjemo da oko znaka "=" ne smije biti razmaka:
  • VAR = vrijednost funkcionira;
  • VAR = vrijednost ne radi.
  • U prvom slučaju, ljuska vidi simbol "=" i upravlja naredbom kao dodjelu varijable. U drugom slučaju, ljuska pretpostavlja da VAR mora biti ime naredbe i pokušava ga izvršiti. Unesite sljedeći kod u var.sh.
    Ovo dodjeljuje varijablu "Hello World" varijabli MY_MESSAGE. Za to su potrebni navodnici oko niza Hello World, a varijabla može sadržavati samo 1 vrijednost, tako da se redak s razmacima mora prikazati tako da ljuska zna da se sve smatra jednom. Inače, ljuska će pokušati izvršiti naredbu "Svijet" nakon dodjele "MY_MESSAGE = Hello". Ljuska ne zahtijeva tipove varijabli, oni mogu pohraniti nizove, cijele brojeve, valjane brojeve - sve što korisnik voli. Iskusni programeri obraćaju pozornost na činjenicu da posebni znakovi moraju biti pravilno zaštićeni. To se radi pomoću naredbe shell-builtin, read, koja čita niz od standardnog ulaza u isporučenu varijablu. Ako mu date puno ime i ne koristite dvostruke navodnike naredbe "echo", on se i dalje ispravno prikazuje. Većina jezika ima koncept petlji, ako je potrebno ponoviti zadatak dvadeset puta, malo je vjerojatno da korisnik želi unijeti kod 20 puta, i, vjerojatno,s pogreškama Za to postoje "za" i "dok" petlje u Bourneovoj ljusci. To daje nešto manje mogućnosti nego drugi jezici, ali nitko ne tvrdi da programiranje ljuske ima snagu C. Za-petlja se ponavlja kroz skup vrijednosti dok se popis ne iscrpi, vrijednosti ghb 'njv mogu biti bilo koje.

    Prva skripta

    Za prvi skript ljuske, možete jednostavno napisati skriptu koja kaže "Hello World." Stvorite datoteku (first.sh) na sljedeći način: first.sh Prvi redak govori Unixu da se datoteka mora pokrenuti /bin /sh. Ovo je standardni izgled ljuske za gotovo svaki Unix sustav. Ako koristite Linux Bash skriptu, onda je GNU /Linux /bin /sh obično simbolička referenca na bash, ili je crtica postala uobičajenija. Drugi redak počinje posebnim znakom "#". Označava liniju kao komentar, ljuska ga u potpunosti zanemaruje. Jedina iznimka je kada počinje prvi redak datoteke "#!". To je posebna direktiva koju Unix posebno tretira i znači da čak i ako se koristi "csh", "ksh" ili nešto drugo kao interaktivna ljuska, Bourne ga dalje tumači. Slično tome, Perl može početi s nizom: #! /Usr /bin /perl Ovo će reći interaktivnoj ljusci da bi sljedeću naredbu trebalo izvršiti perl. Sljedeće se obično koristi za programiranje Bourneove ljuske: #! /Bin /sh. Treći redak izvršava naredbu "echo" s dva parametra ili argumenta: prvi je "Hello"; Drugi je "Svijet". Obratite pozornost da će "echo" automatski postaviti jedan razmak između njegovih parametara. Simbol još uvijek bilježi # komentar i sveljuska zanemaruje sljedeće.

    Test testnog scenarija

    ​​Test se koristi za gotovo svaki pisani skript. U ovom slučaju, "test" se ne zove tako izravno, češće, upotrebljava se oznaka "[". To je simbolička veza ove riječi kako bi ljuskasti programi bili čitljiviji.Tipično, to znači da će se školska ljuska skripte Basha interpretirati kao "[" kao vrijednost testa, čak i ako je Unix okruženje konfigurirano drugačije. To znači da je "[" zapravo program poput "ls" i drugih, pa bi trebao biti okružen razmacima: ako [$ foo = "bar"] neće raditi, jer se interpretira kao: ako test $ foo = "bar"] koji je "]" bez početka "[". U tom slučaju, stavite razmake oko svih operatora i odaberite obavezni prostor "SPACE", zamjenjujući ga stvarnim prostorom, inače, ako nema mjesta, neće raditi: ako SPACE [SPACE] $ foo "SPACE = SPACE" bar SPACE] Neke ljuske prihvaćaju "==" za usporedbu nizova. Za potonje, najbolje je koristiti jedan "" ili "-eq" za cijeli broj. Kao što možete vidjeti, test je jednostavan ali moćan uslužni program za usporedbu koji je potreban za rad ljuske. Naravno, svatko neće postati guru-bash na kraju čitanja članka, ali će biti sigurniji i naoružani potrebnim znanjem i vještinama kako bi lako obavljali svoj posao.

    Povezane publikacije