Redoviti izrazi Bash: Vodič za izradu, korištenje, primjere

Redovni izrazi komandne ljuske Basha namijenjeni su jednom od glavnih alata koji omogućuju interakciju između korisnika i operativnog sustava. Kroz ljusku, korisnik može upravljati datotekama i direktorijima prisutnim u datotečnom sustavu stroja, obraditi njihov sadržaj i izvršiti druge aplikacije koristeći tipkovnicu njihovog terminala kao ulazni blok i alfanumerički terminalski zaslon kao izvorni uređaj.

Povijest jezika zapovijedanja

Redoviti izrazi Bash je razvio Brian Fox za GNU projekt kao alternativnu promjenu za Bourneovu ljusku. Naredbeni jezik je izdan 1989. godine i raširen kao zadana prijavna ljuska za Linux distribucije i MacOS preko Apple-a (bivši OS X). Verzija je također dostupna za Windows 10 i zadana je ljuska za Solaris 11.


Bash je instrukcijski procesor koji tradicionalno radi u tekstualnom terminalu gdje programer pokreće naredbe koje pokreću akcije. Redovni Bash izrazi se čitaju i izvršavaju iz datoteke pod nazivom shell shell skripte. Zajedno s Unixom prepoznaje nazive datoteka (usporedbu simbola simbola), protokole, dokumente, zamjenu direktiva i upravljačku strukturu za kriterije testiranja. U glavnim riječima sintaksa i druge ključne osobine jezika reproduciraju se iz csh i ksh. Bash je shell sukladan POSIX-u, ali s nekim proširenjima. Ime ljuske je skraćenica iz Bourne-ove ljuske. Brian Fox počeo je kodirati "Bašu" 10. siječnja 1988nakon što je Richard Stallman bio nezadovoljan nedostatkom napretka u razvoju slobodne ljuske koja bi mogla pokrenuti postojeće scenarije. Fox je objavio Bash kao beta 8. lipnja 1989. i ostao glavni developer projekta od sredine 1992. do sredine 1994., nakon čega je pušten iz FSF-a, a Chet Rami je zauzeo njegovo mjesto.


Tijekom tog razdoblja Bash je bio najpopularniji program među korisnicima Linuxa, postao je zadana interaktivna ljuska u raznim distribucijama ovog operativnog sustava, kao i MacOS od Applea. Bash je također ugrađen u Microsoft Win od Cygwin, u DOS-u s projektom DJGPP i Android koristeći razne aplikacije za emulaciju terminala. Početkom rujna 2014., dostojan sigurnosni proboj u Bashe verziji 103, objavljenoj u kolovozu 1989., nazvan je Shellshock, što je rezultiralo brojnim napadima putem Interneta. Pogreška se smatrala ozbiljnom, jer su CGI skripte koje koriste Bash postale ranjive, dopuštajući izvršavanje proizvoljnog koda. Popravci pogrešaka postali su dostupni odmah nakon što su otkriveni, ali nisu sva računala nadograđena.

Bashove sintaksne značajke

Bash je obilje Bourneovih naredbi ljuske i koristi ekstenzije za zagrade, završetak naredbenog retka, osnovno ispravljanje pogrešaka i rukovanje iznimkama pomoću zamki među ostalim funkcijama. Izvršava većinu Bourneovih skripti nepromijenjenih, osim scenarija koji se različito tumače ili pokušavaju izvesti naredbu sustava. Redovni izrazi Bash grep, kao i GNU alatikoristite komprimirani način za skeniranje pogrešaka i postavljanje statusa izlaza koji omogućuje nitima da migriraju na tradicionalna odredišta.
Ako programer klikne karticu kartice u ljusci, Bash automatski primijeni završetak naredbenog retka kako bi odgovarao upisanim nazivima programa, datotekama i varijablama. Završetak naredbenog retka je beskonačno fleksibilan i upravljiv, a često se sastoji od funkcija koje pohranjuju argumente i nazive datoteka za određene programe i zadatke. Sintaksa Bash ima dovoljan broj ekstenzija koje nedostaju u Bourneovoj ljusci. Regularni Bash izrazi: Izvođenje cjelobrojnih izračuna aritmetičke procjene, koristite naredbu (()) i sintaksu $ (()), što pojednostavljuje I /O preusmjeravanje. Na primjer, ima mogućnost sinkroniziranog preusmjeravanja izlaza (stdout) i greške (stderr) s podrškom za & amp; & gt; operatera. Lakše je unijeti nego ekvivalent Bourneove naredbe & gt; datoteka 2 & amp; 1 '. Bash koristi zamjenu procesa sintaksom regularnih izraza "Linux" i zamjenjuje izlaz naredbe (input), tradicionalno primjenjuje naziv datoteke. Kada koristite ključnu riječ "funkcija", Bash oglasi nisu kompatibilni s Bourneovim i Kornovim skriptama, budući da Korn školjka ima isti problem s "funkcijom", ali prihvaća istu sintaksu deklaracije funkcije kao i gornje ljuske, kompatibilne s POSIX-om.
Zbog tih i drugih razlika, scenarije rijetko izvode tumači Bourne i Korn, osim ako nisu posebno napisani na temelju togakompatibilnost koju morate uzeti u obzir prilikom planiranja rada s regularnim izrazima Bash. Asocijativni nizovi omogućuju lažnu podršku za indeksirane nizove, slično AWK. Bash 4.x nije integriran u novu verziju MacOS-a zbog ograničenja licenci. Primjer asocijativnog niza.

Naredba načina rada

Ljuska ima dva načina izvršenja naredbi: batch i parallel. Timovi u skupnom načinu rada odvojeni su znakom ";". Redoviti izrazi Bash, primjer:
  • command1;
  • command2.
  • U ovom primjeru, kada je naredba 1 dovršena, izvršava se naredba 2. Slično tome, moguće je izvršiti naredbu pozadine naredbe 1 koristeći (simbol & amp; izvršene naredbe.
    Za istodobno izvršavanje naredbi 1 i 2, moraju se izvršiti u ljusci na sljedeći način:
  • command1 & amp; command2.
  • U ovom slučaju, naredba 1 izvršava se u pozadini & odmah vraća kontrolu ljuske koja izvršava naredbu 2 u prvom planu. Regularni izrazi Bash grep može se zaustaviti i rotirati kontrolama upisivanjem Ctrl + z dok se proces izvodi u prednjem planu. Popis svih procesa, iu pozadini iu zaustavnom načinu, može se postići pokretanjem poslova.

    Stanje procesa može se promijeniti pomoću različitih naredbi. Naredba "fg" ispisuje proces u prvi plan, a "bg" -stanice zaustavljaju proces u pozadini. Bg "i" fg "mogu prihvatiti ID posla kao svojeprvi argument koji ukazuje u kojem procesu djelovati. Bez toga koriste zadani proces, označen znakom plus u izlazu "poslova". Naredba "ubiti" može se upotrijebiti za završetak procesa prerano slanjem signala. ID zadatka mora biti naveden nakon znaka postotka:
  • kill-SIGKILL% 1 ili ubiti -9%.
  • Bash razdvaja separatore naredbi koje izvršavaju naredbe "kontingentno" prema izlaznom kodu koji je postavio prethodna naredba. Vanjski tim pod nazivom "bashbug" izvješćuje o pogreškama ljuske. Kada se naredba pozove, pokreće zadani editor za korisnika s ispunjenim obrascem. Obrazac se šalje strankama u Bash ili eventualno na druge adrese e-pošte, čime se osigurava globalna zamjena uobičajenih izraza Bash. Rezervirane Bash varijable.

    Skripte za pokretanje interaktivnog okruženja

    Kada Bash počne funkcionirati, on izvodi različite datoteke točaka. Čak i za slične naredbene skripte koje imaju dozvolu za izvršavanje instrukcija tumača, na primjer:
  • #! /Bin /bash.
  • Inicijalizacijske datoteke koje koriste izrazi Bash s dodjelom to ne zahtijevaju. Postupak izvršavanja datoteke:
  • Kada se pokreće ljuska [edit], ona čita i izvršava /etc /profile, ako postoji.
  • Ova datoteka inicira /etc/bash.bashrc.
  • Nakon definiranja ove datoteke, pretražit će ~ /.bash_profile čitajući i izvršavajući 1, postojeći i čitljiv.
  • Ako ljuska dolazi iz [uredi], definira i izvršava ~ /.bash_logout.
  • Kada se pokrene kao ljuska [uredi], definira iizvodi /etc/bash.bashrc, a zatim ~ /.bashrc.
  • Ovo ima mogućnost zabrane putem opcije "- norc".
  • Parametar datoteke --rcfile "uzrokuje da ga Bash pročita i izvrši.
  • Usporedba s Bourneovom ljuskom i csh startom [edit], izlazi iz ljuske "Born" i csh. Oni vam omogućuju da suzite dijeljenje datoteka iz Bournea i omogućite pojedinačne funkcije pokretanja poznate csh korisnicima.
  • Prenosivost standarda POSIX 1003.2

    Pozivanje Basha s -posix opcijom ili pokazivanje seta -o posix u skripti čini regularni izraz za zaštitu Bash-a vrlo preciznim POSIX 1003.2 standardom. Shell skripte dizajnirane za prenosivost trebaju barem uzeti u obzir Bourneovu ljusku koju namjerava zamijeniti. Bash ima neke značajke koje nedostaju u tradicionalnoj Bourne školjci. To su:
  • Neke napredne opcije poziva.
  • Zamjena naredbi pomoću oznake $ (). Ova značajka je dio POSIX 1003.2 standarda.
  • Proširenje zagrada.
  • Neke operacije s nizovima i asocijativnim nizovima.
  • Proširenje dizajna ispitivanja s dva zagrada.
  • Aritmetičko-evaluacijski konstrukt regularnih izraza Basha u "if".
  • ​​
  • Neke operacije manipulacije linijama.
  • Zamjena postupka.
  • Operator podudaranja regularnih izraza.
  • Ugrađeni koprocesi "Bash".
  • Bash aritmetički izrazi koriste "readline" kako bi osigurali prečace i uređivanje naredbenog retka pomoću zadanih veza tipki (Emacs). Vi-vezovi se mogu omogućiti kada pokrenete "set -o vi".

    Proširenje zagrada od zamjene

    Zamjena zagrada, također nazvana izmjeničnim, je funkcija kopirana iz ljuske "C". On stvara skup alternativnih kombinacija. Generirani rezultati ne moraju nužno postojati u obliku datoteka. Rezultati svakog proširenog niza razvrstani su i pohranjeni redoslijedom desno. Korisnici ne bi trebali koristiti proširenja zagrada u prijenosnim ljuskama, jer Bourne shell ne proizvodi isti izlaz. Kada se proširenje zagrada kombinira s znakovima znakova, zagrade se prvo proširuju, a zatim se primljeni znakovi zamjenjuju simbolima. Osim izmjene, ekstenzija zagrade se može koristiti za uzastopne raspone između dvaju prirodnih brojeva ili simbola odvojenih dvostrukim točkama. Novije verzije korištenja regularnih izraza Bash dopuštaju trećem cijelom broju da označi prirast. Kada se proširenje zagrada kombinira s promjenljivim nastavkom, izvršava se nakon proširenja zagrada, što u nekim slučajevima može zahtijevati uporabu "eval" ugrađenog, dakle:
  • $ start = 1;
  • end = $ 10 echo {$ start $ end} # ne može se proširiti redoslijedom procjene {110};
  • Dolazi do $ eval echo {$ start $ end} # varijabla, zatim se procijeni rezultirajući niz: 123 456 789 10.
  • Sintaktički aspekti Basha jezika

    Shell skripte moraju biti pohranjene u ASCII formatu teksta kreiranom pomoću programa "editor", koji ne unosi dodatne znakove ili sekvence za oblikovanje teksta. Na primjer, urednici koji su prikladni za stvaranje skripti ljuskevi ili Emacs, dostupni u UNIX /Linuxu, ili programi kao što su Notepad, TextEdit i UltraEdit u sustavu Microsoft Windows. Dobra je praksa da u prvi redak svake redovne skripte Bash-a umetnete sekvencu "#! /Bin /bash ", koji prikazuje apsolutnu putanju programa u datotečnom sustavu stroja na kojem se pokreće skripta. Dakle, može se pokrenuti izravno u naredbenom retku bez navođenja naziva datoteke kao argumenta za naredbu "bash". Upute prevoditeljskog programa koje operacijski sustav koristi za prevođenje i izvršavanje naredbi skripte dane su u prvom retku same skripte, odmah nakon niza znakova "#!". Vjeruje se da se izvršna datoteka tumača nalazi u direktoriju /bin, ali u različitim sustavima može se instalirati u druge direktorije, na primjer:
  • /usr /bin, /usr /local /bin.
  • U općem slučaju, simbol "#" može se koristiti za pisanje komentara u izvoru skripte. Svaki znak u retku skripte nakon znaka "#" ignorira interpretator naredbe. Zapravo, često se koristi za umetanje komentara u izvorni scenarij da bi se opisao njegov rad ili kako bi se objasnio utjecaj određenih naredbi. Kao i kod umetanja naredbi u interaktivnom modu, čak i kod kodiranja skripte, svaka instrukcija programa može biti napisana u jedan redak ili podijeljena u nekoliko redaka, a završava sa svakim retkom, osim potonjeg, sa simbolom "". Dodatne upute mogu se prijaviti na istoj liniji pomoću ";". Programske upute mogu biti "uvlake" kako bi izvorni kod čitao, ali obratite pozornost na tokorištenje praznina. Bash tumač je "čitljiv" od drugih tumača ili prevoditelja, au nekim slučajevima nije dopušteno umetanje proizvoljnih razmaka između članova, instrukcija za komponente, u drugim slučajevima, korištenje prostora je važno za ispravno tumačenje upute. Nema znakova za razdvajanje blokova naredbi umetnutih u kontrolnu strukturu, na primjer, koji bi se trebali ponoviti u strukturi iterativne kontrole. S druge strane, postoje ključne riječi relevantnih jezika koje vam omogućuju da ispravno odredite početak i kraj bloka. Te ključne riječi razlikuju se ovisno o uputama koje se koriste za kontrolu protoka programa. U sintaksi "podudarnih" primjeraka regularnih izraza Basha, neki znakovi zauzimaju posebno značenje, tj. Ako su prisutni u nizu znakova ili kao argument naredbe, onda oni obavljaju vrlo preciznu funkciju.

    Interaktivno pokretanje

    Uz minimalnu jednostavnost, možemo reći da je ljuska program koji u svakom trenutku komunicira s jednom i istom operacijom. Očekuje da će naredba biti unesena kao ulaz, procijeniti je kako bi bila sigurna da je naredba sintaktički ispravna i izvršava je, a zatim se vraća na čekanje sljedeće naredbe. Taj se proces završava kada ljuska primi signal koji označava da je ulaz gotov i da mu neće biti poslane druge naredbe. U ovom trenutku, program ljuske završava, oslobađajući dodijeljenu memoriju i druge resurse stroja dostupne operativnom sustavu. Skripta je pokrenutaautomatski operativni sustav kada korisnik unese sam sustav, tj. može ga izvršiti korisnik koristeći naredbu navedenu na već otvorenoj ljusci ili korištenjem posebnih grafičkih alata ako radi s grafičkim sustavom korisničkog sučelja. Na primjer, možete koristiti naredbenu ljusku na Apple Macintosh računalu na kojem je pokrenut Mac OS X pokretanjem uslužnog programa Terminal koji se nalazi u uslužnom programu u mapi Prilozi. Na radnoj površini Linuxa s grafičkim upraviteljem radne površine, kao što su GNOME ili KDE, možete otvoriti ljusku odabirom aplikacije Terminal iz izbornika Programi - & gt; Pribor ». Nakon aktiviranja naredbene ljuske, možete vidjeti ime ljuske koju smo koristili izvršavanjem sljedećih naredbi:
  • $ echo;
  • $ SHELL /bin /bash.
  • Ako zadana ljuska nije Bash, možete provjeriti je li prisutna na sustavu u jednom od direktorija navedenih u PATH varijabli okoline pomoću naredbe "which" i izvršiti je pomoću naredbe "bash": echo $ SHELL /bin /tcsh $ koji bash /bin /bash $ bash bash-203 $.Ljuska, stoga, radi interaktivno, prima ulazne podatke za svaku pojedinačnu naredbu i parametre specificirane u naredbenom retku i izvršava samu naredbu. Izlaz se prikazuje u istom terminalnom prozoru. Svaka naredba prenesena na ljusku završava pozivom na tipku Invio /Enter. Možete osloboditi nekoliko naredbi u jednom retku, odvajajući ih međusobno znakom ";". Također je moguće podijeliti umetanje naredbe u dva ili više redaka, završavajući sa svakim intermedijeromred s znakom "".

    Apikalne, dvostruke i stražnje noge

    Tipično, u programskim jezicima koriste se navodnici i dvostruki navodnici za razgraničenje nizova, a uporaba jednog ili drugog znaka ovisi o sintaksi usvojenoj na određenom jeziku. U skriptnim jezicima uporaba citata i povratnih veza ima drugačije značenje, a Bash u tome nije iznimka. Pojedinačni navodnici koriste se za razgraničenje nizova znakova. Interpreter nije dio sadržaja linije i jednostavno koristi niz simbola odvojenih navodnicima. Dakle, znakovi koji inače zauzimaju različitu vrijednost mogu također biti dio linije. Jedini znak koji se ne može koristiti u citiranom nizu su isti navodnici. Za definiranje takve linije potrebno ju je razgraničiti šapama. Za razdvajanje linija koriste se dvostruke linije, ali ako je niz ograničen na taj znak, interpretator izvodi takozvanu "interpolaciju" i dopušta vrijednost bilo koje varijable u regularnim izrazima Basha u retku. U praksi, ako niz koji se nalazi u dvostrukim navodnicima sadrži referencu na varijablu, tada se ime varijable u nizu zamjenjuje vrijednošću. Za ispis znakova, kao što su dvostruki navodnici ili dolari, koji bi inače bili interpretirani i uzeti drugu vrijednost, morate propisati prefiks svakog od njih kao obrnuti znak obrnute kose crte. Za ispis obrnute kose crte u nizu, ograničene dvostrukim šapama, morate okrenuti dvije obrnute kose crte. Karakter obrnutog je najkarakterističnije ponašanje,tipični za skriptne jezike, a nedostaju u glavnim programskim jezicima najviše razine. Podnožje vam omogućuje da razgraničite niz koji se interpretira kao Bash kao naredbu i mora se izvršiti vraćanjem vrijednosti izlaza istom izlaznom kanalu proizvoda.

    Primjeri naredbi

    Ako želite izvršiti ljusku tako da obrađuje slijed naredbi prikazanih u ASCII tekstualnoj datoteci:
  • $ pwd;
  • echo $ SHELL;
  • hostaname /home /marco /bin /bash aquilante $ echo & gt; $ SHELL /bin /bash
  • Ako želite pripremiti datoteku pod nazivom "script.sh" koja je pohranjena u matičnom direktoriju, sadržaj datoteke može biti sljedeći:
  • echo -n "Oggi e" il "2 date +% d /% m /% Y ,
  • Pokrenite ovu vrlo jednostavnu skriptu navodeći ime datoteke u naredbenom retku iz koje se ljuska zove:
  • $ bash script.sh Oggi e 'il 10/6/2011.
  • Ljuska također može prihvatiti niz naredbi koje se izvršavaju preko kanala koji preusmjerava izlaz druge naredbe na standardnu ​​Bash login:
  • $ cat script.sh | bash oggi e 6.10.2011.
  • Možete odabrati redak regularnih izraza Bash programa s oznakom "#!". Apsolutni put interpretera koji će se koristiti za izvršavanje skripte pokreće se izravno bez OS-a pokretanjem Bash-a i prosljeđivanjem skripte na ulaz:
  • $ cat script.sh #! d /% m /% Y $ chmod 755 script.sh $ ls -l script.sh -rwxr-xr-x 1 marco korisnici 4918 tra 23:58 script.sh $ ./script.sh Oggi e 10/6 /2011
  • U posljednjoj naredbi prethodnog primjera, izravno poziva izvršenje skripte koja je pohranjena u datoteci "script.sh" prisutnoj u trenutnom direktoriju, relativni put "./" je naveden u ime datoteke.Morate specificirati put do direktorija u kojem se nalazi izvršna skripta, jer iz sigurnosnih razloga trenutni direktorij nije na popisu direktorija u kojima bi ljuska trebala tražiti vanjske izvršne naredbe. Popis takvih direktorija je pohranjen u izrazima regularnih varijabli Bash.

    Prednosti operativnog sustava Bash

    Ovo je najučinkovitiji jezik skripte. To korisniku daje jednostavan način automatiziranja rada, ako je već upoznat s primjenom ljuske u interaktivnom načinu rada. Ako programer programira sustav, onda mora znati kako radi ljuska. Ako usporedite skripte s proučavanjem konfiguracije ili automatizacijskog sustava "yaml" ili "json", oni su mnogo svestraniji. Bash skripte su jednostavnije jer skripta radi prema zadanim postavkama. Bash je jednostavniji jezik i prisiljava programere da se usredotoče na druge složenosti sustava. Bash odlično radi za pisanje u ljusci. Sve ostalo u osnovi ili koristi ljusku za naredbe, ili implementira svoju ljusku, kopirajući dobre dijelove. Osim toga, postoje dobri konstruktori Bashovih regularnih izraza koji uvelike pojednostavljuju rad s ljuskom. S programom Bash programeri mogu koristiti interaktivna web-iskustva pomoću iskustva s Linuxom u naredbenom retku bez granica vremena i prostora. Da biste koristili ovu značajku, ne trebate stroga pravila i napore, a korisnici mogu pristupiti autentificiranoj radnoj stanici, jednim klikom Azure resursa i okruženju, čak i kada ga koriste.Azure, Azure Portal i Azure Mobile dokumentacija za mobilne priloge. Za razliku od tradicionalnog okruženja naredbenog retka, nema potrebe za instaliranjem i odabirom alata prije početka rada te možete uštedjeti vrijeme i trud koristeći Bash. Svi CLI alati kao što su tekst, montaža, spremnici i izlazni su dostupni u Bashu, a možete koristiti sigurne i jednostavne alate za provjeru autentičnosti s CLI 2.0. Pregledali smo primjere uobičajenih izraza Bash. Sretno u svladavanju!

    Povezane publikacije