Redni izrazi ukazne lupine Bash so namenjeni za eno od glavnih orodij, ki omogočajo interakcijo med uporabnikom in operacijskim sistemom. Skozi lupino lahko uporabnik upravlja datoteke in imenike, ki so prisotni v datotečnem sistemu naprave, obdelajo njihovo vsebino in izvajajo druge aplikacije z uporabo tipkovnice njihovega terminala kot vhodnega bloka in alfanumeričnega zaslona terminala kot izvorne naprave.
Zgodovina poveljniškega jezika
Brian Fox je razvil regularne izraze Bash za projekt GNU kot nadomestno spremembo za lupino Bourne. Jezik ukazov je bil izdan leta 1989 in široko razširjen kot privzeta prijavna lupina za distribucijo Linuxa in MacOS preko Apple (prej OS X). Različica je na voljo tudi za Windows 10 in je privzeta lupina za Solaris 11.
Bash je procesor, ki tradicionalno deluje v besedilnem terminalu, kjer razvijalec zažene ukaze, ki jih sproži dejanje. Redni izrazi Bash se berejo in izvedejo iz datoteke z imenom shell shell script. Skupaj z Unixom prepozna imena datotek (primerjava simbolov simbolov), protokole, dokumente, zamenjavo direktiv in upravljavsko strukturo za testna merila. V glavnih besedah se sintaksa in druge ključne individualnosti jezika reproducirajo iz csh in ksh. Bash je lupina, skladna z POSIX, vendar z nekaj razširitvami. Ime lupine je kratica iz Bourne-ovega lupine. Brian Fox je začel kodirati "Basha" 10. januarja 1988ko je bil Richard Stallman nezadovoljen z nezadostnim napredkom pri razvoju brezplačne lupine, ki bi lahko vodila obstoječe scenarije. Fox je izdal Basha kot beta 8. junija 1989 in je ostal glavni razvijalec projekta od sredine leta 1992 do sredine 1994, po katerem je bil izpuščen iz FSF, in njegovo mesto je prevzel Chet Rami.
V tem obdobju je bil Bash najbolj priljubljen program med uporabniki Linuxa, ki je postal privzeta interaktivna lupina v različnih distribucijah tega operacijskega sistema, kot tudi MacOS od Apple. Bash je bil tudi vgrajen v Microsoft Win od Cygwin, v DOS s projektom DJGPP in Android z različnimi aplikacijami za emulacijo terminalov. V začetku septembra 2014 je bil dostojni varnostni preboj v Bashe različici 103, ki je izšel avgusta 1989, imenovan Shellshock, kar je povzročilo številne napade prek interneta. Napaka je bila resna, saj so skripti CGI, ki uporabljajo Bash, postali ranljivi, kar omogoča izvedbo poljubne kode. Popravki napak so bili na voljo takoj, ko so bili odkriti, vendar niso bili nadgrajeni vsi računalniki.
Bash sintaksne funkcije
Bash je veliko Bournovih ukazov lupine in uporablja razširitve za oklepaje, dokončanje ukazne vrstice, osnovno odpravljanje napak in obdelavo izjem z uporabo pasti med drugimi funkcijami. Večina skriptov Bourneove lupinske skripte ostane nespremenjena, razen scenarijev, ki so različno interpretirani ali poskušajo zagnati sistemski ukaz. Redni izrazi Bash grep, kot tudi GNU orodjauporabite stisnjen način za pregledovanje napak in nastavitev statusa izhoda, ki omogoča niti, da se preselijo na tradicionalne destinacije.
Če razvijalec klikne zavihek zavihkov v lupini, Bash samodejno uporabi zaključek ukazne vrstice, da se ujema z vnesenimi imeni programov, datotekami in spremenljivkami. Zaključek ukazne vrstice je neskončno fleksibilen in obvladljiv, pogosto pa ga sestavljajo funkcije, ki shranjujejo argumente in imena datotek za določene programe in opravila. Sintaksa Bash ima zadostno število razširitev, ki manjkajo v Bournejevi lupini. Običajni Bash izrazi: Izvedba celoštevilskih izračunov aritmetične ocene, uporabite ukaz (()) in sintaktični argument $ (()), ki poenostavi preusmeritev V /I. Na primer, ima možnost, da sinhrono preusmeri izhod (stdout) in napako (stderr) z & amp; & gt; podporo operaterja. Vnesti ga je lažje kot ekvivalent Bournejevega ukaza & gt; datoteka 2 & gt; & amp; 1 '. Bash uporablja zamenjavo procesa s sintakso regularnih izrazov "Linux" in nadomešča izhodni ukaz (vhod), tradicionalno uporablja ime datoteke. Ko uporabljate ključno besedo »funkcija«, so Bash oglasi nezdružljivi s skripti Bourne in Korn, ker ima lupina Korn isti problem z »funkcijo«, vendar sprejema isto sintakso deklaracije funkcije kot zgoraj navedene lupine, ki je skladna s POSIX.
Zaradi teh in drugih razlik prevajalci redko izvajajo prevajalce Bourne in Korn, razen če so posebej napisani na podlagi tegazdružljivost, ki jo morate upoštevati pri načrtovanju dela z regularnimi izrazi Bash. Pridružitveni nizi omogočajo lažno podporo za indeksirane matrike, podobno kot AWK. Bash 4.x ni bil vključen v novo različico MacOS-a zaradi omejitev licenc. Primer asociativnega polja.
Ukaz Runtime načina
Lupina ima dva načina izvajanja ukazov: batch in parallel. Skupine v paketnem načinu so ločene z znakom ";". Redni izrazi Bash, primer:
command1; command2.V tem primeru, ko je ukaz 1 zaključen, se izvrši ukaz 2. Podobno je možno izvršiti ukaz v ozadju z ukazom 1 (simbol & amp; izvršenih ukazov.
Za hkratno izvajanje ukazov 1 in 2 se morajo izvajati v lupini, kot sledi:
command1 & amp; command2V tem primeru se ukaz 1 izvede v ozadju & amp; simbol, ki takoj vrne nadzor lupine, ki izvede ukaz 2 v ospredju. Redni izrazi Bash grep lahko zaustavite in vrtite kontrole s tipkanjem Ctrl + z, medtem ko se postopek izvaja v ospredju. Seznam vseh procesov, tako v ozadju kot v načinu zaustavitve, se lahko doseže z zagonom opravil.
Stanje postopka se lahko spremeni z uporabo različnih ukazov. Ukaz "fg" odda proces v ospredje, nastavitve "bg" pa ustavijo proces, ki teče v ozadju. Bg "in" fg "lahko sprejmeta ID opravila kot svojeprvi argument, ki nakazuje, v katerem postopku naj deluje. Brez tega uporabljajo privzeti postopek, označen s predznakom plus na izhodu "delovnih mest". Ukaz "kill" se lahko uporabi za dokončanje postopka predčasno s pošiljanjem signala. ID opravila mora biti podan za znak za odstotek:
ubiti SIGKILL% 1 ali ubiti -9%.Bash ločilnikom ukazov, ki izvršujejo ukaze "kontingentno", ustvari "pogojno" glede na izhodno kodo, ki jo določi predhodni ukaz. Zunanja skupina, imenovana "bashbug", sporoča napake lupine. Ko je ukaz klican, zažene privzeti urejevalnik za uporabnika s izpolnjenim obrazcem. Obrazec se pošlje strankam v Bash ali morda na druge e-poštne naslove, kar zagotavlja globalno zamenjavo običajnih izrazov Bash. Rezervirane spremenljivke Bash.
Skripte za zagon interaktivnega okolja
Ko Bash začne delovati, izvaja različne datoteke točk. Tudi za podobne ukaze, ki imajo dovoljenje za izvajanje navodil tolmača, na primer:
#! /Bin /bash.Inicializacijske datoteke, ki jih uporabljajo izrazi Bash z dodelitvijo, tega ne zahtevajo. Postopek izvajanja datoteke:
Ko izvajate lupino [uredi], bere in izvaja /etc /profile, če obstaja. Ta datoteka sproži /etc/bash.bashrc. Po opredelitvi te datoteke bo iskal ~ /.bash_profile z branjem in izvajanjem 1, obstoječega in berljivega. Če lupina izvira iz [uredi], definira in izvrši ~ /.bash_logout. Ko se zažene kot lupina [uredi], definira inopravi /etc/bash.bashrc in nato ~ /.bashrc. To je mogoče prepovedati prek možnosti "- norc". Parameter datoteke --rcfile "povzroči, da ga Bash prebere in izvrši. Primerjava z Bournove lupine in csh zagonom [uredi], gre ven iz lupine "Born" in csh. Omogočajo vam, da omejite skupno rabo datotek iz Bourna in omogočite posamezne zagonske funkcije, ki so znane uporabnikom csh. Prenosljivost standarda POSIX 1003.2
Klicanje Basha z opcijo -posix ali usmerjevalnim nizom -o posix v skriptu naredi regularni izraz za zaščito Bash povsem ustrezen standardu POSIX 1003.2. Skripti lupine, namenjeni prenosljivosti, bi morali upoštevati vsaj Bourneovo lupino, ki jo namerava nadomestiti. Bash ima nekatere značilnosti, ki jih manjka v tradicionalni Bourne lupini. Te vključujejo:
Nekatere napredne možnosti klica. Zamenjava ukazov z oznako $ (). Ta funkcija je del standarda POSIX 1003.2. Razširitev oklepajev. Nekatere operacije z nizi in asociativnimi nizi. Podaljšanje načrta preskusa z dvema oklepajema. Aritmetično-vrednotni konstrukt regularnih izrazov Basha v "if".
Nekateri postopki za manipulacijo vrstic. Zamenjava postopka. Operater za usklajevanje regularnih izrazov. Vgrajeni koprocesi "Bash".Bash aritmetični izrazi uporabljajo "readline" za zagotavljanje bližnjic in urejanje ukazne vrstice s privzetimi vezmi ključev (Emacs). Vi-vezave lahko omogočite, ko zaženete "set -o vi".
Razširitev oklepajev od nadomestitve
Zamenjava oklepajev, imenovana tudi izmenično, je funkcija, ki se kopira iz lupine "C". Ustvari niz alternativnih kombinacij. Ustvarjeni rezultati niso nujno v obliki datotek. Rezultati vsakega razširjenega niza so razvrščeni in shranjeni v vrstnem redu desno. Uporabniki ne bi smeli uporabljati razširitev oklepajev v prenosnih ukaznih skriptah, ker Bourneova lupina ne ustvari enakega izhoda. Ko je razširitev oklepaja kombinirana z znaki znakov, se oklepaji najprej razširijo, nato pa prejete znake zamenjajo s simboli. Poleg zamenjave se lahko razširitev oklepaja uporabi tudi za zaporedna razpona med dvema celima števili ali simboloma, ločenima z dvojnimi pikami. Novejše različice uporabe regularnih izrazov Bash omogočajo, da tretje celo število pokaže prirast. Kadar je razširitev oklepaja kombinirana s spremenljivko, se izvede po podaljšanju oklepaja, ki lahko v nekaterih primerih zahteva uporabo vdelanega "eval", tako da:
end = $ 10 echo {$ start $ end} # se ne more razširiti po vrstnem redu ocenjevanja {110}; Prišlo je do spremembe vrednosti $ eval echo {$ start $ end} #, nato pa se ovrednoti dobljeni niz: 123 456 789 10.
Skripte lupine morajo biti shranjene v besedilnem formatu ASCII, ustvarjenem s programom "urednik", ki ne vsebuje dodatnih znakov ali zaporedij za oblikovanje besedila. Na primer, uredniki, ki so primerni za ustvarjanje lupinskih skriptov, sovi ali Emacs, ki sta na voljo v UNIX /Linuxu, ali programi, kot so Beležnica, TextEdit in UltraEdit v Microsoft Windows. Dobra praksa je, da vstavite v prvo vrstico vsakega rednega Bashovega scenarija zaporedje "#! /Bin /bash ", ki prikazuje absolutno pot programa v datotečnem sistemu računalnika, na katerem želite zagnati skript. Tako se lahko zažene neposredno v ukazni vrstici brez podajanja imena datoteke kot argumenta za ukaz "bash". Navodila prevajalskega programa, ki jih uporablja operacijski sistem za prevajanje in izvajanje skriptnih navodil, so podana v prvi vrstici samega scenarija, takoj za zaporedjem znakov "#!". Verjame se, da je izvedljiva datoteka interpretatorja v imeniku /bin, v različnih sistemih pa jo je mogoče namestiti v druge imenike, na primer: