Pepeo - Linux Command - Unix naredba

NAME

sh - komandni tumač ( shell )

SYNOPSIS

sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ cilj ... ]

OPIS

Sh je standardni komandni tumač za sistem. Trenutna verzija sh je u procesu promjene u skladu sa specifikacijama POSIX 1003.2 i 1003.2a za ljusku. Ova verzija ima mnoštvo funkcija koje ga u nekim pogledima vide kao Kornova ljuska, ali to nije Korn klonova Korn (vidi ksh (1)). U ovu školjku se inkorporiraju samo funkcije označene POSIX plus nekoliko Berkeley ekstenzija. Očekujemo POSIX usklađenost do trenutka izdavanja 4.4 BSD-a. Ova man-stranica nije namenjena da bude vodič ili potpunu specifikaciju shell-a.

Pregled

Šuk je komanda koja čita linije iz datoteke ili terminala, tumači ih, i generalno izvršava druge komande. To je program koji se pokreće kada se korisnik prijavljuje u sistem (iako korisnik može izabrati drugu ljusku pomoću komande chsh (1)). Šupljina primenjuje jezik koji ima konstrukcije kontrole protoka, makro objekat koji obezbeđuje različite funkcije pored skladištenja podataka, zajedno sa ugrađenim istorijskim mogućnostima i mogućnostima za uređivanje linija. Uključuje mnoge značajke za pomoć interaktivnoj upotrebi i ima prednost da je interpretativni jezik zajednički za interaktivnu i neinteraktivnu upotrebu (shell skripte). To jest, komande se mogu direktno otkucati na pokrenutu ljusku ili se mogu staviti u datoteku, a fajl može direktno izvršiti shell.

Invocation

Ako nisu prisutni nikakvi argumenti i ako je standardni ulaz shell-a priključen na terminal (ili ako je postavljena -i zastavica), a opcija -c nije prisutna, shell se smatra interaktivnom školjkom . Interaktivna ljuska obično traje prije svake naredbe i drugačije upravlja programskim i upravljačkim greškama (kao što je opisano u nastavku). Kada prvi put započne, shell proverava argument 0, a ako počinje sa dash-om, shell se takođe smatra korisničkim shell-om. To obično radi automatski od strane sistema kada se korisnik prvi put prijavljuje. Logička šifra najpre čita komande iz datoteka / etc / profile i .profile ako postoje. Ako je varijabla okruženja ENV postavljena na ulazu u ljusku ili je postavljena u .profile shell-a za prijavljivanje, shell zatim čita komande iz datoteke nazvane u ENV-u. Zbog toga, korisnik treba staviti komande koje treba izvršiti samo na vrijeme prijavljivanja u .profile datoteku i komande koje se izvršavaju za svaku školjku unutar ENV datoteke. Da biste postavili ENV- varijablu u neku datoteku, postavite sledeću liniju u vašu .profile vašeg kućnog direktorija

ENV = $ HOME / .shinit; izvoz ENV

zamenjujući "` .shinit "'bilo koje ime datoteke koje želite. Pošto se ENV datoteka čita za svako pozivanje ljuske, uključujući ljuske i neinteraktivne ljuske, sljedeća paradigma je korisna za ograničavanje komandi u ENV datoteki za interaktivne pozive. Stavite komande u "slučaj" i " esac " ispod (ove naredbe su opisane kasnije):

slučaj $ - u * i *)

# komande samo za interaktivnu upotrebu

...

esac

Ako su pored parametara komandne linije navedene opcije, onda shell opisuje prvi argument kao ime datoteke za čitanje komandi (shell skriptu), a preostali argumenti su postavljeni kao pozicijski parametri shell ($ 1 , $ 2, itd.). U suprotnom, shell pročita komande sa svog standardnog unosa.

Obrada lista argumenata

Sve opcije sa jednim slovom imaju odgovarajuće ime koje se može koristiti kao argument opcije - o . Ime - o se nalazi pored opcije za jedno slovo u dolenavedenom opisu. Određivanje crtice `` - '' uključuje ovu opciju, a korišćenje plus-a + '+' onemogućava opciju. Sledeće opcije mogu se podesiti iz komandne linije ili sa postavljenim (1) ugrađenim (opisanim kasnije).

-a aleksport

Izvozite sve promenljive dodijeljene. (UNIMPLEMENTED za 4.4alpha)

-c

Pročitajte komande iz komandne linije. Nijedna komanda neće biti čitana sa standardnog unosa.

-C noclobber

Ne prepisuj postojeće datoteke sa ``> '' (UNIMPLEMENTED za 4.4alpha)

-e errexit

Ako nije interaktivan, odmah izađite ako neuspešna naredba ne uspije. Izlazni status komande smatra se eksplicitno testiranim ako se komanda koristi za kontrolu elifa dok je ili do, ili ako je komanda levi ručni operand operatera `` && '' ili `` || ''.

-f noglob

Onemogući proširenje putanje .

-n noexec

Ako nisu interaktivni, pročitajte komande, ali ih ne izvršavajte. Ovo je korisno za proveru sintakse skriptova.

-u nounset

Napišite poruku standardnoj grešci prilikom pokušaja širenja varijable koja nije postavljena, a ako shell nije interaktivan, izađite odmah. (UNIMPLEMENTED za 4.4alpha)

-v verbose

Šukla upisuje svoj unos u standardnu ​​grešku dok se čita. Korisno za debagovanje.

-x xtrace

Napišite svaku komandu na standardnu ​​grešku (prethodi '+' prije nego što se izvrši. Korisno za debagovanje.

-q tihprofile

Ako su postavljene opcije -v ili- x , ne primenjujte ih prilikom čitanja inicijalizacijskih datoteka, to su / etc / profile .profile i datoteka koju je odredila varijabla ENV okruženja.

-I nezgodan

Ignore EOF-a sa inputa kada su interaktivni.

-i interaktivan

Približite ljusku da se ponaša interaktivno.

-m monitor

Uključite kontrolu nad radom (automatski se postavlja kada je interaktivan).

-s stdin

Pročitajte komande sa standardnog unosa (automatski se podešava ako nisu prisutni argumenti datoteke). Ova opcija nema efekta kada je postavljena nakon što je shell već počela da radi (tj. Sa setom (1)).

-V vi

Omogućite ugrađeni editor vi (1) naredbe (onemogućava - E ako je postavljeno).

-E emacs

Omogućite ugrađeni emacs (1) editor komandne linije (onemogućava - V ako je postavljeno).

-b obavestiti

Omogućite asinhrono obaveštenje o završetku zadatka posla. (UNIMPLEMENTED za 4.4alpha)

Leksička struktura

Šuma čita ulaz pomoću linija iz datoteke i prelazi na reči na praznim prostorima (praznine i tabovi), a u određenim sekvencama znakova koji su posebni za ljusku pod nazivom "operateri" Postoje dve vrste operatora: operatera za kontrolu i operaterima za preusmeravanje (njihovo značenje se razmatra kasnije). Slijedi lista operatora:

"Operatori kontrole:"

& && (); ;; | ||

"Operator preusmeravanja:"

<>> | << >> <&> & << - <>

Citiranje

Citiranje se koristi da ukloni posebno značenje određenih znakova ili reči u shell, kao što su operateri, prostrani prostor ili ključne reči. Postoje tri vrste citiranja: upareni pojedinačni citati, upareni dvostruki citati i obrnuti pošasti.

Backslash

Osnova sa zadnje strane čuva doslovno značenje sledećeg karaktera, izuzev Aq linije. Naklon ljestvice koja prethodi Aq liniji se tretira kao nastavak linije.

Single Quotes

Priloženi znakovi u pojedinačnim citatima čuvaju doslovno značenje svih znakova (izuzev pojedinačnih citata, čineći da je nemoguće staviti pojedinačne citate u niz citata sa jednim citatom).

Double Quotes

Zatvoreni znakovi unutar dvostrukih citata čuvaju doslovno značenje svih znakova, osim dolaznih ($) i (backslash) (\). Okosnica sa dvostrukim navodnicima je istorijski čudna i služi za navođenje samo sledećih znakova:

$ `\

Inače ostaje doslovno.

Rezervisane riječi

Rezervisane riječi su riječi koje imaju posebnu vrijednost za školjku i prepoznate su na početku linije i nakon operatora kontrole. Sledeće su rezervisane reči:

! Ta elif Ta fi Ta dok je slučaj Ta

drugo Ta za Ta zatim Ta {Ta}

Do Ta je učinio Ta do Ta ako je taj

Njihovo značenje se razmatra kasnije.

Aliases

Alias ​​je ime i odgovarajuća vrijednost postavljena pomoću alijanse (1) ugrađene komande. Kad god se može pojaviti rezervirana reč (vidi gore), i nakon provere rezerviranih riječi, shell proverava riječ da vidi da li se podudaraju sa pseudonimom. Ako to uradi, on ga zamenjuje u ulaznom toku sa svojom vrijednošću. Na primjer, ako postoji pseudonim nazvan `` lf '' sa vrijednošću `` ls -F '', tada ulaz:

lf foobar

postao bi

ls -F foobar

Aliases pružaju pogodan način za naivne korisnike da kreiraju stihove za naredbe bez potrebe da nauče kako kreirati funkcije sa argumentima. Takođe se mogu koristiti za kreiranje leksički nejasnog koda. Ova upotreba je obeshrabrena.

Komande

Škable tumače reči koje čitaju prema jeziku, čija je specifikacija izvan okvira ove man-stranice (pogledajte BNF u dokumentu POSIX 1003.2). U principu, ipak se čita linija i ako prva reč linije (ili nakon operatora kontrole) nije rezervirana reč, onda je shell prepoznala jednostavnu komandu. U suprotnom, možda je prepoznata kompleksna komanda ili neki drugi poseban konstrukt.

Jednostavne komande

Ako je prepoznata jednostavna komanda, shell izvršava sledeće akcije:

  1. Vodeće reči obrasca `` ime = vrijednost '' se uklanjaju i dodjeljuju u okruženje jednostavne naredbe. Operateri preusmeravanja i njihovi argumenti (kao što je opisano u nastavku) se uklanjaju i čuvaju za obradu.
  2. Preostale reči proširene su kako je opisano u odeljku pod nazivom `` Proširenja '', a prva preostala reč se smatra komandom i komanda se nalazi. Preostale reči se smatraju argumentima komande. Ako nije proizvelo nijednu komandnu oznaku, tada odredbe varijabli `` name = value '' prepoznate u stavku 1 utiču na trenutnu ljusku.
  3. Preusmeravanja se obavljaju kako je opisano u narednom odeljku.

Preusmerenja

Preusmeravanja se koriste za promjenu gdje komanda čita svoj unos ili šalje svoj izlaz. Generalno, redirekcije se otvaraju, zatvaraju ili dupliraju postojeće reference na datoteku. Ukupan format koji se koristi za preusmeravanje je:

[n] redir-op datoteka

gde je redir-op jedan od operatera za preusmeravanje pomenutih ranije. Sledi lista mogućih preusmeravanja. Bq n je opcioni broj, kao u `3 '(ne` Bq 3' koji se odnosi na deskriptor datoteke.

[n]> datoteku

Preusmerite standardni izlaz (ili n) u datoteku.

[n]> | fajl

Isto, ali preklapajte opciju - C.

[n] >> datoteka

Dodajte standardni izlaz (ili n) u datoteku.

[n]

Preusmeri standardni unos (ili n) iz datoteke.

[n1] <& n2

Duplikat standardnog unosa (ili n1) iz deskriptora datoteke n2.

[n] <&

Zatvori standardni unos (ili n).

[n1]> & n2

Dupli standardni izlaz (ili n1) iz n2.

[n]> &

Zatvori standardni izlaz (ili n).

[n] <> fajl

Otvorite datoteku za čitanje i pisanje na standardnom ulazu (ili n).

Sljedeća preusmeravanja se često nazivaju "ovde-dokument"

[n] << razdjelnik

ovde-doc-tekst ...

razdjelnik

Sva tekstova na redosledu do razdjelnika se čuva i stavlja na raspolaganje komandi na standardnom ulazu, ili deskriptor datoteke n ako je specificirano. Ako se citira ograničivač kao što je naveden na početnoj liniji, ovdje-doc-tekst se tretira bukvalno, inače je tekst podvučen ekspanziji parametara, zameni naredbe i aritmetičkom ekspanziji (kao što je opisano u odjeljku "Proširenja") 'Ako je operater `` << -' 'umjesto `` <<' ', onda se vodeći tabovi u tekstu-doc-tekstu uklanjaju.

Pretraživanje i izvršenje

Postoje tri vrste komandi: shell funkcije, ugrađene komande i normalni programi - i naredba se traži (po imenu) u tom redosledu. Svaki od njih se izvršava na drugi način.

Kada se izvrši šolja funkcija, svi parametri pozicioniranja shell-a (osim $ 0, koji ostaje nepromenjen) postavljeni su na argumente funkcije shell-a. Varijable koje su eksplicitno postavljene u okruženje komande (stavljanjem zadataka njima prije naziva funkcije) postaju lokalni za funkciju i podešavaju se na date vrijednosti. Zatim se izvršava naredba data u definiciji funkcije. Pozicijski parametri se vraćaju na njihove prvobitne vrijednosti kada komanda završi. Ovo se sve dešava unutar trenutne ljuske.

Izgradjene šuplje se izvršavaju interno za školjku, a bez novog procesa.

U suprotnom, ako se komandno ime ne poklapa sa funkcijom ili je ugrađeno, komanda se traži kao normalan program u datotečnom sistemu (kao što je opisano u sledećem odeljku). Kada se izvrši normalan program, shell pokreće program, prenosi argumente i okruženje programu. Ako program nije normalna izvršna datoteka (tj. Ako se ne započne sa "magičnim brojem" čija je ASCII reprezentacija "#!", Tako execve (2) vrati Er ENOEXEC onda) shell će tumačiti program u subhell. Dječija granata će se ponovo inicijalizirati u ovom slučaju, tako da će efekat biti kao da je nova ljuska bila pozvana da se nosi sa ad-hoc skriptom, osim što će se lokacija hašnih komandi lociranih u roditeljskoj školi zapamtiti od strane dete.

Imajte na umu da se prethodne verzije ovog dokumenta i izvorni kod sasvim pogrešno i sporadično odnose na shell skriptu bez magičnog broja kao "postupak okvira".

Pretraživanje puteva

Prilikom lociranja komande, shell prvo izgleda da vidi da li ima tu funkciju shell-a. Onda potražuje izgrađenu komandu pod tim imenom. Ako se ne pronađe izgrađena komanda, dešava se jedna od dve stvari:

  1. Imena komandi koja sadrže kosu traku jednostavno su izvršena bez obavljanja bilo kakvih pretraga.
  2. Škaplja traži svaku stavku u PATH- u za naredbu. Vrijednost PATH varijable bi trebala biti niz unosa razdvojenih kolonama. Svaka stavka se sastoji od naziva direktorijuma. Sadašnji direktorijum može biti implicitno naznačen nazivom praznog direktorija, ili eksplicitno u jednom periodu.

Command Exit Status

Svaka komanda ima status izlaza koji može uticati na ponašanje drugih komandi shell-a. Paradigma je da komanda izlazi sa nula za normalno ili uspješno, a ne nula za neuspjeh, grešku ili lažnu indikaciju. Na stranici čovjeka za svaku naredbu treba navesti različite izlazne šifre i ono što podrazumijevaju. Pored toga, ugrađene komande vraćaju izlazne kodove, kao i izvršenu funkciju shell-a.

Kompleksne komande

Kompleksne komande su kombinacije jednostavnih komandi sa kontrolnim operaterima ili rezervisanim rečima, zajedno stvarajući veću složenu komandu. Općenito, komanda je jedna od sljedećih:

  • jednostavna komanda
  • cjevovod
  • listu ili liste složenih materijala
  • komplikovana komanda
  • definicija funkcije

Osim ako nije drugačije naznačeno, status izlaza komande je zadnja jednostavna komanda koju izvršava komanda.

Cjevovodi

Naftovod je niz jedne ili više komandi odvojenih od strane kontrolora. | Standardni izlaz sve osim poslednje komande je povezan sa standardnim ulazom sledeće naredbe. Standardni izlaz poslednje komande naslijeđen je iz ljuske, kao i obično.

Format za gasovod je:

[!] command1 [| command2 ...]

Standardni izlaz komande1 povezan je sa standardnim ulazom komande2. Standardni ulaz, standardni izlaz ili obe komande se smatraju dodeljenim od strane cjevovoda pre nego što se preusmeravanje odredi operaterima za preusmeravanje koji su deo komande.

Ako gasovod nije u pozadini (o čemu se kasnije govori), shell čeka sve komande da se završe.

Ako rezervisana reč! ne prethode cevovodu, status izlaska je status izlaza poslednje komande navedene u plinovodu. U suprotnom, status izlaska je logična NOT statusa izlaska poslednje komande. To jest, ako zadnja komanda vrati nulu, status izlaza je 1; ako poslednja komanda vraća više od nule, status izlaza je nula.

Zbog toga što se dodeljivanje cjevovoda standardnim ulaznim ili standardnim izlazom ili oba odvija prije preusmeravanja, može se promijeniti preusmeravanjem. Na primjer:

$ command1 2> & 1 | command2

šalje standardni izlaz i standardnu ​​grešku komande1 na standardni unos komande2.

A; ili terminator dovodi do toga da se prethodna AND-OR-lista (opisana sledeća) izvršava sekvencijalno; a & uzrokuje asinhrono izvršavanje prethodne AND-OR-liste.

Imajte na umu da, za razliku od nekih drugih granata, svaki proces u cjevovodu je dijete ljuske koja se poziva (osim ako je ona izgrađena, u tom slučaju ona se izvršava u trenutnoj školi - ali svaki efekat koji ga ima na okolinu je obrisan).

Komande pozadine -

Ako komandu prekine operator kontrole ampersand (&), shell izvršava komandu asinhrono - tj., Shell ne čeka da komanda završi pre nego što izvrši sledeću naredbu.

Format za pokretanje naredbe u pozadini je:

command1 & [command2 & ...]

Ako shell nije interaktivan, standardni unos asinhronih komandi je podešen na / dev / null

Liste - Generalno govoreći

Lista je niz nula ili više naredbi odvojenih novim linijama, tačkama zarezima ili ampersands-om, a opciono prekinuta od strane jednog od ova tri znaka. Komande na listi izvršavaju se po redosledu upisa. Ako komandom sledi ampersand, shell otvara komandu i odmah nastavi na sledeću naredbu; u suprotnom čeka da komanda prestane pre nego što pređe na sledeću.

Operatori liste kratkih spojeva

`` && '' i `` || '' su AND-OR liste operatora. `` && '' izvršava prvu komandu, a zatim izvršava drugu naredbu ako je izlazni status prve naredbe nula. `` || '' je sličan, ali izvršava drugu naredbu ako je status izlaza prve naredbe nula. `` && '' i `` || '' imaju isti prioritet.

Kontrola protoka - ako, dok, za slučaj

Sintaksa komande ako je

ako je lista
zatim popis
[elif lista
zatim popis] ...
[drugu listu]
fi

Sintaksa komande while je

dok listu
uradi listu
završeno

Dve liste se izvršavaju više puta dok je status izlaza prve liste nula. Sve dok komanda nije slična, ali ima reč sve dok se ne koristi, što ga čini ponavljanjem sve dok status izlaza prve liste nije nula.

Sintaksa komande za

za promenljivu riječ ...
uradi listu
završeno

Reči su proširene, a zatim se lista izvršava više puta sa promenljivom koja je postavljena na svaku reč. učiniti i učiniti može se zameniti sa `` {'' i ``} ''

Sintaksa komande break i nastavi

break [broj]
nastavi [broj]

Pauza prekida num najteže za petlje ili dok su. Nastavite sa sledećom iteracijom unutrašnje petlje. One se implementiraju kao ugrađene komande.

Sintaksa komande slučaja je

slučaj riječi u
obrazac) ;;
...
esac

Uzorak može zapravo biti jedan ili više obrasca (pogledajte Shell Sheme opisane kasnije), razdvojene znakom `` '.

Grupisanje komandi zajedno

Komande se mogu grupisati pisanjem ili

(lista)

ili

{list;

Prvi od njih izvršava komande u podsklopu. Komande ugrađene u grupu (liste) neće uticati na trenutnu školjku. Druga forma ne krije drugu školjku, tako da je malo efikasnija. Kombinovanje komandi na ovaj način omogućava vam da preusmerite svoj izlaz kao da su jedan program:

{printf hello; printf world \ n ";}> pozdrav

Funkcije

Sintaksa definicije funkcije je

ime () naredbe

Definicija funkcije je izvršni izraz; kada se izvrši, instalira funkciju pod imenom i vraća status izlaza nule. Komanda je obično lista smeštena između `` {'' i ``} ''

Varijable se mogu proglasiti lokalnim funkcijama pomoću lokalne komande. Ovo bi trebalo da se pojavi kao prvi izraz funkcije, a sintaksa je

lokalna [promenljiva | -] ...

Lokalni se implementira kao izgrađena komanda.

Kada se varijabla postane lokalna, ona naslijeđuje početnu vrijednost i izvozi i readonly zastave iz varijable sa istim imenom u okolini, ako ih ima. Inače, varijabla je u početku neispravna. Šaka koristi dinamički opseg, tako da ako promenite x lokalnu funkciju f, a zatim nazovite funkciju g, reference na varijablu x napravljeno unutar g će se odnositi na promenljivu x deklarisanu unutar f, a ne na globalnu varijablu nazvanu x .

Jedini poseban parametar od kojeg se može učiniti lokalno je `` - '' Izrada `` - '' lokalnih opcija šupljina koja se menja preko komande koja se nalazi unutar funkcije koja se vraća na prvobitne vrijednosti kada se funkcija vraća.

Sintaksa komande za povratak je

povratak [exitstatus

On prekida funkciju koja se trenutno izvršava. Povratak se implementira kao ugrađena komanda.

Varijable i parametri

Šaka održava skup parametara. Parametar označen nazivom se naziva promenljiva. Prilikom pokretanja, ljuska pretvara sve promenljive okruženja u varijable ljuske. Nove varijable se mogu postaviti koristeći obrazac

ime = vrednost

Varijable postavljene od strane korisnika moraju imati ime koje se sastoji isključivo od abeceda, brojeva i podčrtava - prvi ne sme biti numerički. Parametar se takođe može označiti brojem ili posebnim karakterom kao što je objašnjeno u nastavku.

Pozicijski parametri

Pozicijski parametar je parametar označen brojem (n> 0). Šupljina to u početku postavlja na vrijednosti argumenata komandne linije koje prate naziv skripti. Set (1) ugrađen može se koristiti i za podešavanje ili resetovanje.

Posebni parametri

Poseban parametar je parametar koji označava jedan od sledećih specijalnih znakova. Vrednost parametra je navedena pored njenog karaktera.

*

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija javlja u dvostrukom citiranom nizu, ona se širi na jedno polje sa vrijednošću svakog parametra odvojenog prvim karakterom IFS varijable ili sa ako je IFS neisključen.

@

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija javlja u dvostrukim navodnicima, svaki pozicijski parametar se širi kao poseban argument. Ako ne postoje parametri pozicije, ekspanzija @ generira nulte argumente, čak i kada je @ dvostruko citiran. Ono što u osnovi znači, na primjer, ako je $ 1 "abc" i $ 2 je "def ghi" onda Qq $ @ proširuje dva argumenta:

abc def ghi

#

Proširuje se na broj pozicijskih parametara.

?

Proširuje se u status izlaska najnovijeg plinovoda.

- (Hyphen.)

Proširuje se u trenutne zastave opcija (nazivi opcija sa jednim slovom ukršteni u niz) kao što je navedeno u invokaciji, postavljena ugrađena komanda ili implicitno od strane ljuske.

$

Proširuje se u ID procesa pokrenutog shell-a. Poddrška zadržava istu vrijednost od $ kao i svog roditelja.

!

Proširuje se u ID procesa najnovije komande pozadine izvršene iz trenutne ljuske. Za gasovod, ID procesa je onaj zadnje komande u plinovodu.

0 (nula)

Proširuje se u naziv shell ili skripti.

Proširenje riječi

Ova klauzula opisuje razne ekspanzije koje se izvode na riječi. Nisu sve ekspanzije obavljene na svakoj reči, kako je objašnjeno kasnije.

Tilde ekspanzije, proširenja parametara, zamene naredbi, aritmetičke ekspanzije i uklanjanje citata koji se javljaju unutar jedne riječi proširuju se na jedno polje. To je samo razdvajanje polja ili proširenje putanje koje mogu kreirati više polja iz jedne riječi. Jedini izuzetak od ovog pravila je proširenje specijalnog parametra @ unutar dvostrukih citata, kao što je gore opisano.

Redosled širenja reči je:

  1. Proširenje tilde, proširenje parametara, zamjena naredbi, aritmetička ekspanzija (sve se to dešava istovremeno).
  2. Razdvajanje polja vrši se na poljima koja se generišu korakom (1), osim ako je promenljiva IFS nula.
  3. Proširenje putanje (osim ako nije podešeno - f je na snazi).
  4. Citat Removal.

Znak $ se koristi da uvede proširenje parametara, supstituciju naredbe ili aritmetičku procenu.

Proširenje Tilde (zamena kućnog direktorija korisnika)

Riječ koja počinje nekvalifikovanim znakom tilde (~) podložna je ekspanziji tilde. Svi likovi do kosine (/) ili na kraju reči tretiraju se kao korisničko ime i zamenjuju se kućnim direktorijumom korisnika. Ako korisničko ime nedostaje (kao u ~ / foobar), tilda se zamenjuje vrijednošću HOME varijable (kućni direktorij trenutnog korisnika).

Širenje parametara

Format za širenje parametara je sledeći:

gde se izraz sastoji od svih znakova sve dok se ne uklapa sa ``} '' bilo kojim ``} '' escapea sa kosom ili sa citiranim nizom, a karakteri u ugrađenim aritmetičkim ekspanzijama, zamjenama komandi i promenljivim proširenjima se ne ispituju pri određivanju uparivanje ``} ''

Najjednostavniji oblik širenja parametara je:

Vrednost, ako postoji, parametra je zamenjena.

Ime parametra ili simbol može biti zatvoreno u brakove, koje su opcionalne, osim za parametre pozicije sa više od jedne cifre ili kada parametru prati znak koji se može tumačiti kao dio imena. Ako se ekspanzija parametra odvija unutar dvostrukih citata:

  1. Širenje puta se ne vrši na rezultatima ekspanzije.
  2. Razdvajanje polja se ne vrši na rezultatima ekspanzije, sa izuzetkom @.

Pored toga, proširenje parametara se može modificirati pomoću jednog od sledećih formata.

Koristite podrazumevane vrednosti. Ako je parametar neisključen ili nultan, širenje reči je zamenjeno; u suprotnom, vrednost parametra se zamenjuje.

Dodeli podrazumevane vrijednosti. Ako je parametar neisključen ili nultan, proširenje reči dodeljuje se parametru. U svim slučajevima, konačna vrednost parametra je zamenjena. Na ovakav način se mogu dodijeliti samo varijable, ne pozicioni parametri ili specijalni parametri.

Navesti grešku ako je Null ili Unset. Ako je parametar neisključen ili nultan, proširenje reči (ili poruka koja je naznačila je neisključena ako je riječ izostavljena) piše se u standardnu ​​grešku i shell izlazi sa nultom izlaznom statusom. U suprotnom, vrednost parametra je zamenjena. Interaktivna školjka ne mora izlaziti.

Koristite alternativnu vrijednost. Ako je parametar nerešen ili nultan, null je supstituisan; u suprotnom, širenje reči je zamenjeno.

U prethodno prikazanim parametrima, upotreba debljine u formatu rezultira testom za parametar koji je neispravan ili nultan; izostavljanje debelog creva rezultira testom za parametar koji je isključen.

Dužina stringa. Dužina u karakterima vrijednosti parametra.

Sledeće četiri varijante širenja parametara omogućavaju obradu podloga. U svakom slučaju, oznaka koja odgovara obrazovanju (videti Shell Patterns), a ne kao običan izraz, koristi se za procjenu šablona. Ako je parametar * ili @, rezultat ekspanzije nije određen. Uključujući punu šifru ekspanzije parametara u dvostrukim navodnicima ne uzrokuje sledeće četiri varijante simbola uzoraka, dok citati znakove u grudima ima ovaj efekat.

Uklonite najmanji obrazac Suffixa. Reč je proširen kako bi se napravio obrazac. Širenje parametara zatim rezultira u parametru, pri čemu je najmanji dio sufiksa usklađen sa obrisanim obrazcem.

Uklonite najveći obrazac Suffix. Reč je proširen kako bi se napravio obrazac. Širenje parametara zatim rezultira u parametru, pri čemu najveći dio sufiksa odgovara obrisanom šablonu.

Uklonite najmanji prefiksni obrazac. Reč je proširen kako bi se napravio obrazac. Širenje parametara zatim rezultira u parametru, pri čemu se najmanji deo prefiksa poklapa sa obrisanim obrazcem.

Uklonite najveći šablon prefiksa. Reč je proširen kako bi se napravio obrazac. Širenje parametara zatim rezultira u parametru, pri čemu najveći dio prefiksa odgovara obrisanom šablonu.

Zamjena naredbe

Zamjena naredbe omogućava izmjenu izlaza komande umjesto samog komandnog imena. Zamjena naredbe se javlja kada je komanda zatvorena na sljedeći način:

$ (naredba)

ili Po `` backquoted '' verziju Pc:

`command`

Škapa proširuje zamenu naredbe izvršavajući komandu u okruženju podgrupe i zamjenjuje zamjenu naredbe s standardnim izlazom naredbe, uklanjajući sekvence jedne ili više s na kraju zamjene. (Embedded s pre kraja izlaza se ne uklanjaju, međutim, tokom razdvajanja polja, oni se mogu prevediti u s, u zavisnosti od vrednosti IFS-a i citiranja koja je na snazi.)

Aritmetička ekspanzija

Aritmetička ekspanzija pruža mehanizam za procenu aritmetičkog izraza i zamjenu njegove vrijednosti. Format aritmetičke ekspanzije je sledeći:

$ ((izraz))

Izraz se tretira kao da je u dvostrukim citatima, osim što se dvostruki citat unutar izraza ne tretira posebno. Škafa proširuje sve tokene u izrazu za ekspanziju parametara, zamenu naredbi i uklanjanje citata.

Zatim, shell ovo tretira kao aritmetički izraz i zamenjuje vrednost izraza.

Razdvajanje bijelog prostora (razdvajanje polja)

Nakon ekspanzije parametara, zamene komandi i aritmetičke ekspanzije, shell skenira rezultate ekspanzija i zamena koje se nisu pojavile u dvostrukim navodnicima za podelu polja i mogu rezultirati više polja.

Šarka tretira svaki karakter IFS-a kao razdjelnik i koristi razdjelnike da podijeli rezultate ekspanzije parametara i zamjene komandi u polja.

Proširenje putanje (generisanje imena datoteke)

Osim ako nije postavljena zastavica - f , generisanje imena datoteke se vrši nakon završetka riječi riječi. Svaka reč se posmatra kao niz obrazaca, razdvojenih kosinama. Proces ekspanzije zamenjuje reč sa imenima svih postojećih datoteka čija se imena mogu formirati zamenom svakog obrazca nizom koji odgovara određenom obrazcu. Postoje dva ograničenja: prvo, obrazac ne može da se podudara s nizom koji sadrži crticu, a drugo, obrazac ne može da se podudara s nizom koji počinje sa određenim periodom, osim ako je prvi karakter uzorka period. Sledeći odeljak opisuje obrasce koji se koriste za opciju Pathname Expansion i komanda (1).

Shell Patterns

Uzorak se sastoji od normalnih znakova koji se podudaraju i meta-karaktera. Metapodaci su ``!! '' `` * ''``??' 'I `` [' 'Ovi likovi gube svoja posebna značenja ako su citirani. Kada se izvrši komanda ili varijabilna supstitucija, a znakovi za dolar ili zadnje citate nisu dvostruki citirani, vrednost varijable ili izlaz komande se skenira za ove znakove i oni se pretvaraju u meta-karaktere.

Zvezdica (`` * '') odgovara nizu znakova. Pitanje o pitanju odgovara svakom pojedinačnom karakteru. Levi nosač (`` ['') uvodi klasu znakova. Kraj klase znakova je označen sa (``] '') ako nedostaje ``] '' onda tada `` ['' odgovara na '' ['' umjesto uvođenje klase znakova. Klasa karaktera odgovara bilo kojem od znakova između kvadratnih zagrada. Niz znakova može biti specificiran pomoću znak minus. Klasa karaktera može biti upotpunjena stvaranjem uzvičnog tačke prvog karaktera klase znakova.

Da uključite ``] '' u grupu znakova, učinite da je prvi znak naveden (nakon "`! "Ako postoji). Da biste uključili znak minus, učinite ga prvim ili poslednjim znakom

Ugrađeni

Ovaj odeljak navodi ugrađene komande koje su ugrađene jer im je potrebno izvršiti neku operaciju koja se ne može izvršiti posebnim procesom. Pored ovih, postoji i nekoliko drugih komandi koji mogu biti ugrađeni za efikasnost (npr. Echo 1).

:

Nula komanda koja vraća 0 (istinitu) izlaznu vrijednost.

. fajl

Komande u navedenoj datoteki čita i izvršava shell.

alias [ ime [ = string ... ]]

Ako je specificirano ime = string , shell definira ime alijansa s nizom vrijednosti. Ako je samo naznačeno, vrijednost imena alijaske se odštampa. Bez argumenata, ugrađeni alijansi odštampaju imena i vrijednosti svih definisanih pseudonima (pogledajte unalias)

bg [ posao] ...

Nastavite određene poslove (ili trenutni posao ako se ne daju zadaci) u pozadini.

naredba naredbe arg ...

Izvršite specificiranu ugrađenu naredbu. (Ovo je korisno kada imate funkciju shell-a sa istim imenom kao i komanda builtin.)

cd [ direktorijum ]

Prebacite se na navedeni direktorijum (podrazumevani $ HOME) Ako se unese unos CDPATH- a u okruženje naredbe cd ili se podesi varijabla CDPATH i ime imenika ne počinje sa kosom, tada će se pretraživati ​​u CDPATH- u za navedeni direktorijum. Format CDPATH je isti kao i kod PATH-a. U interaktivnoj školi, cd naredba će odštampati ime direktorija u kojem je zapravo prešao ako se to razlikuje od imena koje je korisnik dao. Ovo se može razlikovati bilo zato što je korišćen CDPATH mehanizam ili je prešla simbolička veza.

eval string ...

Približite sve argumente sa razmacima. Zatim re-parse i izvrši naredbu.

exec [ naredba arg ... ]

Osim ako komanda nije izostavljena, proces shella se zamenjuje navedenim programom (koji mora biti pravi program, a ne ugrađen ili funkcionalan). Bilo koja preusmjeravanja na naredbu exec su označena kao trajna, tako da se ne poništavaju kada se izvršava naredba exec .

izlaz [ exitstatus ]

Prekinite proces školjke. Ako je dat exitstatus, koristi se kao status izlaza ljuske; u suprotnom se koristi status izlaza prethodne komande.

izvoz ime ...

izvoz -p

Navedena imena se izvoze tako da se pojavljuju u okruženju narednih komandi. Jedini način da se ne izvozi varijabla je da ga unesete. Šoku dozvoljava da vrijednost varijable bude postavljena u isto vrijeme kada se izvozi pisanjem

export name = vrednost

Bez argumenata, komanda za izvoz navodi imena svih izvezenih varijabli. Sa navedenom opcijom - p , izlaz će biti pravilno formatiran za neinteraktivnu upotrebu.

fc [- e editor ] [ prvi [ posljednji ]]

fc -l [- nr ] [ prva [ posljednja ]]

fc -s [ staro = novo ] [ prvo ]

Fc ugrađene liste, ili izmene i ponovno izvršavaju, komande prethodno unete u interaktivni shell.

urednik

Koristite urednika kojeg imenuje urednik da biste uredili komande. Niz urednika je komandno ime, podložno pretrazi preko promenljive PATH . Vrednost u promeni FCEDIT se koristi kao podrazumevano kada - e nije specificirano. Ako je FCEDIT nula ili nije postavljena, koristi se varijabla EDITOR . Ako je EDITOR nula ili nije postavljena, ed (1) se koristi kao urednik.

-l (ell)

Navedite komande umesto da pozivate urednika na njima. Komande se pišu u sekvenci koju ukazuju prvi i posljednji operandi, kao što je pogođeno - r sa svaku naredbu koju prethodi komandni broj.

-n

Zaustavljanje komandnih brojeva prilikom listinga sa -l.

-r

Obrnuti redosled naredjenih komandi (sa - l ili uređenim (sa ni - l niti - s)

-s

Ponovo izvršite naredbu bez pozivanja urednika.

prvo

poslednji

Izaberite komande za popisivanje ili uređivanje. Broj prethodnih komandi kojima se može pristupiti određuje se vrijednošću promenljive HISTSIZE . Vrednost prvog ili poslednjeg ili oba je jedno od sledećih:

[+] broj

Pozitivni broj koji predstavlja komandni broj; komandni brojevi mogu biti prikazani sa opcijom - l .

-broj

Negativni decimalni broj koji predstavlja komandu koja je izvršila broj komandi ranije. Na primjer, -1 je odmah prethodna naredba.

string

Niz koji ukazuje na poslednju unetu naredbu koja počinje sa tom nizom. Ako stari = novi operand nije naveden sa - s string oblik prvog operanda ne može sadržati znak ugrađenog znaka jednakosti.

Sledeće varijable okoline utiču na izvršenje fc:

FCEDIT

Ime urednika koji će se koristiti.

HISTSIZE

Broj prethodnih komandi koji su dostupni.

fg [ posao ]

Pomerite navedeni zadatak ili trenutni zadatak u prvi plan.

getopts optstring var

POSIX getopts komanda, a ne biti zbunjena sa Bell Labs -operiranim getopt (1).

Prvi argument treba da bude serija slova, od kojih svaka može opcionalno pratiti debelo crevo koje ukazuje na to da opcija zahteva argument. Navedena varijabla je postavljena na opciju razdvojene.

Komanda getopts zastupa starije pomoćne funkcije getopt (1) zbog svoje obrade argumenata koji sadrže prazne prostore.

Ugrađeni getopti se mogu koristiti za dobijanje opcija i njihovih argumenata sa liste parametara. Kada se pozovu, getopts stavlja vrijednost sljedeće opcije iz string stringa u listi u varijablu koja je navedena od var i ona je indeks u varijabli ljuske OPTIND Kada se shell koristi, OPTIND se inicijalizuje na 1. Za svaku opciju koja zahtijeva argument, getopts builtin će ga staviti u varijablu ljuske OPTARG Ako opcija nije dozvoljena u opstringu, onda će OPTARG biti isključen.

optstring je niz priznatih opcionih slova. Ako pismo sledi dvotačka, opcija se očekuje da ima argument koji se može ili ne mora odvojiti od njega u praznom prostoru. Ako se ne očekuje znak opcije gdje se očekuje, getopts će postaviti varijablu na ``?? '' Getopts će onda unetirati OPTARG i napisati izlaz u standardnu ​​grešku. Preciziranjem debljine kao prvog karaktera opstringa sve greške će biti ignorisane.

Nulta vrijednost se vraća kada se dostigne zadnja opcija. Ako ne postoje preostali argumenti, getopts će postaviti var na posebnu opciju, `` - '' u suprotnom će postaviti var na ``? ''

Sledeći fragment koda pokazuje kako se mogu procesirati argumenti za naredbu koja može uzeti opcije [a] i [b] i opciju [c] koja zahtijeva argument.

dok se getopts abc: f
da
slučaj $ f in
a | b) zastava = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; izlaz 1 ;;
esac
završeno
shift `expr $ OPTIND - 1`

Ovaj kod će prihvatiti bilo koje od slijedećih riječi kao ekvivalentne:

cmd -acarg datoteka datoteke
datoteku datoteke cmd -a -c arg
cmd -carg -a datoteku datoteke
cmd -a -carg - datoteka datoteka

hash -rv komanda ...

Šaka drži hašnu tablicu koja se pamti lokacije komandi. Bez ikakvih argumenata, komanda hash ispisuje sadržaj ove tabele. Unosi koji nisu pregledani od zadnje naredbe cd -a označeni su zvjezdicom; moguće je da ovi unosi budu nevažeći.

Sa argumentima, komanda hash uklanja određene komande iz hash table (osim ako nisu funkcije), a zatim ih locira. Sa opcijom - v , heš štampa lokacije komandi dok ih pronađe. Opcija -r dovodi komandu hash da obriše sve unose u tabeli hašiša, osim funkcija.

jobid [ posao ]

Odštampajte identifikacioni proces procesa procesa u poslu. Ako je argument za posao izostavljen, trenutni zadatak se koristi.

posao

Ova komanda prikazuje sve pozadinske procese koji su deca trenutnog procesa šverca.

pwd

Odštampajte trenutni direktorijum. Izgradjena komanda može se razlikovati od programa sa istim imenom jer ugrađena komanda pamti ono što je trenutni direktorij, a ne svaki put. Ovo čini bržu. Međutim, ako se trenutni direktorij preimenuje, ugrađena verzija pwd će nastaviti da štampa staro ime za direktorij.

pročitajte [- p prompt ] [- r ] varijablu ...

Poziv se štampa ako je opcija -p opcija i standardni ulaz je terminal. Onda se linija čita sa standardnog unosa. Zadnja linija je obrisana iz linije i linija je podeljena, kako je opisano u odjeljku za podelu riječi iznad, a dijelovi se dodjeljuju promenljivim redosledom. Treba navesti najmanje jednu varijablu. Ako ima više komada od varijabli, ostali dijelovi (zajedno sa znakovima u IFS-u koji su ih razdvojili) dodeljuju se poslednjoj varijabli. Ako ima više varijabli od komada, preostalim varijablama se dodjeljuje null string. Čitanje ugrađeno će ukazati na uspeh osim ako se EOF ne nađe na ulazu, u kom slučaju se greška vraća.

Podrazumevano, ukoliko nije specificirana opcija - r , backslash `` \ '' deluje kao znak za izbjegavanje, što uzrokuje bukvalno slijedeći znak. Ako za koloseksticu sledi nova linija, backslash i nova linija će biti izbrisana.

readonly name ...

readonly -p

Navedena imena su označena kao samo za čitanje, tako da ih ne mogu kasnije modifikovati ili uneseti. Šoku dozvoljava da vrijednost varijable bude postavljena istovremeno kada je označena samo za čitanje pisanjem

readonly name = vrednost

Bez argumenata, komanda readonly navodi imena svih varijabli samo za čitanje. Sa navedenom opcijom - p , izlaz će biti pravilno formatiran za neinteraktivnu upotrebu.

podesite [{- opcije | + opcije | - arg ... ]

Komanda podešena vrši tri različite funkcije.

Bez argumenata, navodi se vrijednosti svih varijabli ljuske.

Ako su date opcije, postavlja specificirane opcije za zastave ili ih briše kako je opisano u odeljku pod nazivom Sx Argument List Processing.

Treća upotreba zadatog komande je postavljanje vrednosti parametara pozicioniranja ljuske na specificirane argumente. Da biste promenili pozicijske parametre bez menjanja bilo kakvih opcija, koristite `` - '' kao prvi argument koji ste postavili. Ako nijedan argument nije prisutan, zadata komanda će obrisati sve parametre pozicioniranja (ekvivalentno izvršavanju `` shift $ #. ''

varijabilna vrijednost

Dodjeljuje vrijednost promenljivoj. (Uopšteno, bolje je pisati varijablu = vrijednost umjesto korištenja setvar setvar namjerava se koristiti u funkcijama koje dodjeljuju vrijednosti varijablama čije su imena prenijete kao parametri.)

smjena [ n ]

Promenite pozicijske parametre n puta. Smjena postavlja vrijednost od $ 1 vrijednosti od $ 2 vrijednosti od $ 2 do vrijednosti od $ 3 i tako dalje, smanjujući vrijednost $ # za jedan. Ako je n veći od broja pozicijskih parametara, pomeranje će izdati poruku o grešci i izaći sa statusom povrata 2.

puta

Odštampajte akumulirani broj korisnika i sistem vremena za ljusku i za procese koji se pokreću iz ljuske. Povratni status je 0.

trap akcijski signal ...

Uzmite ljusku za parse i izvršite akciju kada se primi neki od navedenih signala. Signali su specificirani brojevima signala. Ako je signal 0 , akcija se izvršava kada granata izlazi. akcija može biti nula ili `` - '' što prvi uzrokuje da se navedeni signal ignoriše, a drugi uzrokuje podrazumevanu akciju. Kada se shell otvori poddrška , on resetuje zarobljene (ali ne zanemarene) signale na podrazumevanu akciju. Komanda za zamenu nema uticaja na signale koji su ignorisani prilikom unosa u ljusku.

tip [ ime ... ]

Interpretirajte svako ime kao komandu i odštampajte rezoluciju pretraživanja naredbe. Moguće rezolucije su: ključna riječ shell, alias, shell builtin , command, tracked alias i nije pronađen. Za nadimke ispisuje se širenje alijansa; za komande i nadgledane nadimke se štampa potpuna putanja komande.

ulimit [- H -S ] [- a-tfdscmlpn [ vrednost ]]

Upitajte ili postavite tvrdu ili meku granicu u procesima ili postavite nove granice. Izbor između tvrdog ograničenja (koji ne može da krši proces i koji se ne može podići nakon što je spušten) i meki limit (koji uzrokuje da se procesi signaliziraju ali ne moraju nužno ubijati i koji se mogu podići) vrši se sa ove zastave:

-H

postaviti ili raspitati se o tvrdim granicama

-S

postaviti ili raspitati se o mekim granicama. Ako nije naveden ni - H niti - S , prikazuje se mekana granica ili se podešavaju obe granice. Ako su oba navedena, zadnja pobeda.

Limit koji će se ispitivati ​​ili postaviti, onda je izabran određivanjem bilo koje od ovih zastava:

-a

pokaži sve trenutne granice

-t

pokažite ili podesite ograničenje na vreme CPU-a (u sekundama)

-f

pokažite ili postavite ograničenje na najveću datoteku koja se može kreirati (u blokovima od 512 bajtova)

-d

pokažite ili postavite ograničenje veličine procesa procesa (u kilobajtima)

-s

pokažite ili postavite ograničenje veličine stuba procesa (u kilobajtovima)

-c

pokažite ili postavite graničnu vrijednost na najvećoj veličini deponije veličine koja se može proizvesti (u 512-bajtnim blokovima)

-m

pokažite ili postavite ograničenje na ukupnu fizičku memoriju koja može da koristi proces (u kilobajtovima)

-l

pokažite ili postavite ograničenje na koliko memorije proces može zaključati s mlock (2) (u kilobajtima )

-p

pokažite ili postavite ograničenje broja procesa koji ovaj korisnik može imati istovremeno

-n

pokažite ili postavite ograničenje za datoteke sa brojevima koji proces može biti otvoren odjednom

Ako nijedan od ovih nije naveden, to je granica veličine datoteke koja je prikazana ili postavljena. Ako je vrednost određena, granica je podešena na taj broj; u suprotnom se prikazuje trenutna granica.

Ograničenja proizvoljnog procesa mogu se prikazati ili podesiti koristeći sysctl (8) uslužni program.

umask [ mask ]

Podesite vrijednost umask (pogledajte umask (2)) na određenu oktalnu vrijednost. Ako je argument izostavljen, vrijednost umask se štampa.

unalias [- a ] [ naziv ]

Ako je ime naznačeno, shell otklanja taj alijas. Ako je - a specificirano, svi alijasi se uklanjaju.

unset name ...

Navedene varijable i funkcije su isključene i neeksportirane. Ako određeno ime odgovara i varijabli i funkciji, i varijabla i funkcija su neisključeni.

čekati [ posao ]

Sačekajte da navedeni posao završi i vratite status izlaznog zadnjeg procesa u poslu. Ako je argument izostavljen, sačekajte da se svi zadaci završe i da vratite status izlaza nule.

Uređivanje komandne linije

Kada se interaktivno koristi s terminala, trenutna komanda i istorija naredbi (pogledajte fc u Sx Ugradjenim) mogu se uređivati ​​pomoću uređaja u vi-mode komandnoj liniji. Ovaj režim koristi naredbe, opisane ispod, slične podmenu onih opisanih na stranici vi man. Komanda `set '-o vi omogućava vi-mode modu i stavlja sh u režim vi insertiranja. Sa omogućenim vi-režimom, sh se može prebaciti između režima ubacivanja i komandnog režima. Urednik ovde nije opisan u potpunosti, već će biti u kasnijom dokumentu. Slično je vi: kucanje AQ ESC će vas baciti u komandni režim VI komande. Uklanjanje Aq-a dok se u komandnom režimu prenese linija do ljuske.

Važno: Koristite komandu čovjeka ( % čovjek ) da biste videli kako se na vašem računaru koristi komanda.