Redni izrazi Bash: vodnik za ustvarjanje, uporabo primerov

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; command2
  • V 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:
  • /usr /bin, /usr /local /bin.
  • V splošnem primeru lahko simbol "#" uporabite za pisanje komentarja v viru skripta. Vsak znak v vrstici s skripti po znaku "#" ignorira tolmač ukaza. Pravzaprav se pogosto uporablja za vstavljanje komentarjev v vir scenarija, ki opisuje njegovo delo ali pojasnjuje vpliv določenih ukazov. Tako kot pri vstavljanju ukazov v interaktivnem načinu, tudi pri kodiranju scenarija, lahko vsako programsko navodilo zapišemo v eno vrstico ali razdelimo na več vrstic in konča z vsako vrstico, razen slednje, s simbolom "". Dodatna navodila se lahko navedejo v isti vrstici z uporabo ";". Programska navodila so lahko "zamik", da se izvorna koda prebere, vendar morate pazitiuporabo vrzeli. Tolmač Bash je "čitljiv" kot drugi tolmači ali prevajalci, v nekaterih primerih pa ni dovoljeno vstavljati poljubnih prostorov med člani, navodili za komponente, v drugih primerih pa je uporaba prostora pomembna za pravilno interpretacijo navodil. Ni znakov, ki bi ločevali bloke navodil, vstavljenih v nadzorno strukturo, na primer, ki jih je treba ponoviti v strukturi iterativnega nadzora. Po drugi strani pa obstajajo ključne besede v ustreznem jeziku, ki omogočajo pravilno prepoznavanje začetka in konca bloka. Te ključne besede se razlikujejo glede na navodila, ki se uporabljajo za nadzor pretoka programa. V sintaksi primerkov primerkov regularnih izrazov Bash imajo nekateri znaki poseben pomen, to pomeni, da so prisotni v nizu znakov ali kot argument ukaza, zato opravljajo zelo natančno funkcijo.

    Interaktivni zagon

    Z minimalno preprostostjo lahko rečemo, da je lupina program, ki ves čas sodeluje z eno in isto operacijo. Pričakuje, da bo ukaz vnesen kot vhodni, oceni ga, da bo prepričal, da je ukaz sintaktično pravilen in ga izvede, nato pa se vrne v čakanje na naslednji ukaz. Ta proces se konča, ko lupina prejme signal, ki kaže, da je vnos popoln in da mu ne bodo poslani nobeni drugi ukazi. Na tej točki se zaključi program ukazne lupine, ki sprosti dodeljeni pomnilnik in druge strojne vire, ki so na voljo za operacijski sistem. Skript se zaženesamodejno z operacijskim sistemom, ko uporabnik vstopi v sam sistem, kar pomeni, da ga lahko izvaja uporabnik z ukazom, ki je naveden na že odprti lupini ali z uporabo posebnih grafičnih orodij, če deluje z grafičnim sistemom uporabniškega vmesnika. Na primer, ukazno lupino lahko uporabite na računalniku Apple Macintosh z operacijskim sistemom Mac OS X, tako da v mapi Pripomočki zaženete pripomoček za terminal, ki se nahaja v pripomočku. Na namizju Linux z grafičnim upravljalnikom namizja, kot sta GNOME ali KDE, lahko lupino odprete tako, da izberete aplikacijo Terminal v meniju Programi - & gt; Dodatki ». Po aktiviranju ukazne lupine si lahko ogledate ime lupine, ki smo jo uporabili z izvajanjem naslednjih ukazov:
  • $ echo;
  • $ SHELL /bin /bash.
  • Če privzeta ukazna lupina ni Bash, lahko preverite, ali je v sistemu prisotna v enem od imenikov, ki so navedeni v spremenljivki okolja PATH z ukazom "ki" in ga izvršite z ukazom "bash": echo $ SHELL /bin /tcsh $, ki bash /bin /bash $ bash bash-203 $.Lupina torej deluje interaktivno, pri čemer prejme vhodne podatke za vsak posamezen ukaz in parametre, podane v ukazni vrstici, in izvede sam ukaz. Izhod je prikazan v istem terminalnem oknu. Vsak ukaz, posredovan lupini, se konča s klicem tipke Invio /Enter. Izpustite lahko več ukazov v eni vrstici in jih ločite med seboj z znakom ";". Vstavljanje ukaza je mogoče tudi razdeliti v dve ali več vrstic, ki se končajo z vsakim vmesnikomz znakom "".

    Abikalne, dvojne in zadnje noge

    Značilno je, da se v programskih jezikih za razmejitev nizov uporabljajo narekovaji in dvojni narekovaji, uporaba enega ali drugega znaka pa je odvisna od sintakse, sprejete v določenem jeziku. V skriptnih jezikih ima uporaba narekovajev in povratnih povezav drugačen pomen, pri čemer Bash ni izjema. Z enojnimi narekovaji se razmejijo znakovni nizi. Tolmač ni del vsebine vrstice in preprosto uporablja zaporedje simbolov, ki so ločeni z narekovaji. Torej so lahko znaki, ki sicer uporabljajo drugačno vrednost, tudi del linije. Edini znak, ki ga ni mogoče uporabiti v navedenem nizu, so isti narekovaji. Za določitev takšne črte jo je treba razmejiti s tacami. Dvojne črte se uporabljajo za razmejitev vrstic, če pa je niz omejen na ta znak, tolmač izvede tako imenovano "interpolacijo" in dovoljuje vrednost vseh spremenljivk v regularnih izrazih Bash v vrstici. V praksi, če niz, vsebovan v dvojnih narekovajih, vsebuje sklic na spremenljivko, se ime spremenljivke v nizu nadomesti z njegovo vrednostjo. Če želite natisniti znake, kot so dvojni narekovaji ali dolarji, ki bi jih sicer razlagali in vzeli drugo vrednost, morate predpone vsakega od njih predpisati kot znak za povratno poševnico. Če želite natisniti povratni poševni znak v vrsti, omejen z dvojnimi šapami, morate obrniti dve obrnjeni poševnici. Značilnost obrata je najbolj značilno obnašanje,značilna za skriptne jezike in manjka v glavnih programskih jezikih najvišje ravni. Noga vam omogoča, da razmejite niz, ki ga interpretira Bash kot ukaz, in ga morate izvesti tako, da vrnete kot vrednost izhodnega produkta na isti izhodni kanal.

    Primeri ukazov

    Če želite izvesti lupino, tako da bo obdelala zaporedje ukazov, prikazanih v besedilni datoteki ASCII:
  • $ pwd;
  • echo $ SHELL;
  • hostaname /home /marco /bin /bash aquilante $ echo & gt; $ SHELL /bin /bash
  • Če želite pripraviti datoteko, imenovano "script.sh", ki je shranjena v domačem imeniku, je lahko vsebina datoteke naslednja:
  • echo -n "Oggi e" il "2 date +% d /% m /% Y .
  • Zaženite ta zelo preprost skript tako, da v ukazni vrstici podate ime datoteke, iz katere se imenuje ukazna lupina:
  • $ bash script.sh Oggi e 'il 10/6/2011.
  • Lupina lahko sprejme tudi zaporedje ukazov, ki se izvedejo prek kanala, ki preusmeri izhod drugega ukaza v standardno prijavo Bash:
  • $ cat script.sh | bash oggi e 10/6/2011.
  • Izberete lahko vrstico regularnih izrazov programa Bash z oznako "#!". Absolutna pot interpretatorja, ki se uporablja za izvajanje skripta, poteka neposredno brez OS, tako da poganja Bash in posreduje skript na vhod:
  • $ cat script.sh #! d /% m /% Y $ chmod 755 script.sh $ ls -l script.sh -rwxr-xr-x 1 marco uporabniki 4918 apr 23:58 script.sh $ ./script.sh Oggi e 10/6 /2011
  • V zadnjem ukazu prejšnjega primera, neposredno kliče izvršitev skripta, ki je shranjena v datoteki "script.sh", ki je prisotna v trenutnem imeniku, relativna pot "./" je podana imenu datoteke.Določiti morate pot do imenika, v katerem se nahaja izvršljiv skript, ker trenutni imenik iz varnostnih razlogov ni na seznamu imenikov, v katerih naj lupina poišče zunanje izvršljive ukaze. Seznam takšnih imenikov je shranjen v navadnih spremenljivkah Bash.

    Prednosti operacijskega sistema Bash

    To je najučinkovitejši jezik skripta. Uporabniku omogoča enostaven način za avtomatizacijo dela, če je že seznanjen z uporabo lupine v interaktivnem načinu. Če razvijalec programira sistem, mora vedeti, kako deluje lupina. Če primerjate skripte s preučevanjem konfiguracije ali avtomatizacijskega sistema "yaml" ali "json", so veliko bolj vsestranski. Bash skripti so preprostejši, ker skript deluje privzeto. Bash je enostavnejši jezik in sili razvijalce, da se osredotočijo na druge kompleksnosti sistema. Bash je odličen za pisanje lupine. Vse ostalo v bistvu bodisi uporablja lupino za ukaze, bodisi izvaja lastno lupino, kopira dobre dele. Poleg tega obstajajo dobri konstruktorji regularnih izrazov Bash, ki močno poenostavijo delo z lupino. Z Bashom lahko razvijalci uporabljajo interaktivne spletne izkušnje z uporabo izkušnje z ukazno vrstico Linux brez meja časa in prostora. Če želite uporabiti to funkcijo, ne potrebujete zahtevnih pravil in naporov, uporabniki pa lahko dostopajo do overjene delovne postaje, z enim klikom virov in okolja Azure, tudi če ga uporabljajo.Azure, Azure Portal in mobilne priloge mobilne dokumentacije Azure. Za razliko od tradicionalnega okolja ukazne vrstice, ni treba namestiti in izbrati orodij pred začetkom dela, z Bashom pa lahko prihranite čas in trud. Vsa orodja CLI, kot so besedilo, sestavljanje, vsebniki in izhod, so na voljo v Bashu in lahko uporabljate varna in enostavna orodja za preverjanje pristnosti s CLI 2.0. Pregledali smo primere običajnih izrazov Bash. Vso srečo pri obvladovanju!

    Sorodne publikacije