NUME
sh - comandă interpret (shell)
REZUMAT
SH -/ + ACefnuvxIimqsVEbc -o longname -words țintă …
DESCRIERE
Sh este interpreta standard de comandă pentru sistem. Versiunea curentă aSH este în curs de a fi modificat pentru a se conforma cuPOSIX 1003.2 și 1003.2a pentru cochilie. Această versiune are multe caracteristici care fac ca aceasta să pară asemănătoare în unele privințe cu shell-ul Korn, dar nu este o clona de coajă Korn (a se vedea ksh (1)). Numai caracteristicile desemnate dePOSIX plus câteva extensii Berkeley, sunt încorporate în această coajă. Ne așteptămPOSIX conformitatea cu data de lansare 4.4 BSD. Această pagină de om nu este destinată să fie un tutorial sau o specificație completă a coajă.
Prezentare generală
Coajă este o comandă care citește linii fie dintr-un fișier, fie din terminal, le interpretează și, în general, execută alte comenzi. Este programul care se execută atunci când un utilizator se loghează în sistem (deși un utilizator poate selecta un shell diferit cu comanda chsh (1)). Cochilia implementează o limbă care are construcții de control al fluxului, o facilitate macro care oferă o varietate de caracteristici în plus față de stocarea datelor, împreună cu capabilitățile de editare istorică și de linie. Acesta include multe caracteristici care ajută la utilizarea interactivă și are avantajul că limba interpretativă este comună atât pentru utilizarea interactivă, cât și pentru cea non-interactivă (scripturile shell). Adică, comenzile pot fi introduse direct în shell-ul care rulează sau pot fi puse într-un fișier, iar fișierul poate fi executat direct de shell.
Invocare
În cazul în care nu există nici un flag și dacă intrarea standard a carcasei este conectată la un terminal (sau dacă -eusteagul este setat), și -c opțiunea nu este prezentă, shell-ul este considerat o coajă interactivă. O coajă interactivă solicită, în general, înaintea fiecărei comenzi și manipulează erorile de programare și de comandă diferit (după cum este descris mai jos). La prima pornire, shell-ul inspectează argumentul 0, iar dacă începe cu o bara `- ', shell-ul este, de asemenea, considerat o coajă de conectare. Acest lucru este în mod normal făcut automat de sistem atunci când utilizatorul se loghează mai întâi. O cochilie de autentificare citește mai întâi comenzi din fișierele / etc / profile și .profile dacă există. Dacă variabila de mediuENV este setată la intrarea într-un shell sau este setată în fișierul .profile al unei corespondențe, shell-ul următor citește comenzi din fișierul numit înENVPrin urmare, un utilizator ar trebui să plaseze comenzi care urmează să fie executate numai la data de conectare în fișierul .profile și comenzi care sunt executate pentru fiecare shell în interiorulENV fişier. Pentru a setaENV variabilă la un anumit fișier, plasați următoarea linie în fișierul .profile al directorului dvs. de acasă
ENV = $ HOME / .shinit; export ENV
înlocuind cu numele "` .shinit '' orice nume de fișier pe care îl doriți. Din moment ceENV fișierul este citit pentru fiecare invocare a shell-ului, inclusiv scripturile shell și shell-urile neinteractive, următoarea paradigmă este utilă pentru restricționarea comenzilor înENV fișier la invocări interactive. Comutați comenzile în `` case '' și `esac '' de mai jos (aceste comenzi sunt descrise mai târziu):
cazul $ - în * i *)
# comenzi numai pentru utilizare interactivă
…
ESAC
Dacă au fost specificate argumentele liniei de comandă în afară de opțiuni, shell-ul tratează primul argument ca fiind numele unui fișier din care să citească comenzile (un script shell), iar argumentele rămase sunt setate ca parametri poziționali ai shell-ului ($ 1 , $ 2, etc). În caz contrar, shell-ul citește comenzi de la intrarea sa standard.
Procesarea listei de argumente
Toate opțiunile cu o singură literă au un nume corespunzător care poate fi folosit ca argument pentru -o opțiune. Decorul -o numele este furnizat lângă opțiunea de o singură literă din descrierea de mai jos. Specificând o bordură `` - '', opțiunea este activată, în timp ce folosiți un plus `` + '' dezactivează opțiunea. Următoarele opțiuni pot fi setate din linia de comandă sau cu setul (1) încorporat (descris mai târziu).
-A allexport
Exportați toate variabilele alocate. (NEIMPLEMENTAT pentru 4,4 alfa)
-c
Citiți comenzi din linia de comandă. Nu vor fi citite comenzi de la intrarea standard.
-C noclobber
Nu suprascrieți fișierele existente cu ``> '' (UNIMPLEMENTED pentru 4.4alpha)
-e errexit
Dacă nu este interactiv, ieșiți imediat dacă o comandă netestată eșuează. Starea de ieșire a unei comenzi este considerată a fi testată în mod explicit dacă comanda este utilizată pentru a controla o comandădacă elifwhile saupana cand sau dacă comanda este operandul stâng al unui operator `` && '' sau `` || ''.
-f noglob
Dezactivați extinderea numelui de cale.
-N noexec
Dacă nu interactiv, citiți comenzi, dar nu le executați. Acest lucru este util pentru verificarea sintaxei scripturilor shell.
-u nounset
Scrieți un mesaj la eroarea standard când încercați să extindeți o variabilă care nu este setată și dacă shell-ul nu este interactiv, ieșiți imediat. (NEIMPLEMENTAT pentru 4,4 alfa)
-v prolix
Coaja își scrie intrarea la eroarea standard pe măsură ce este citită. Util pentru depanare.
-X xtrace
Scrieți fiecare comandă la eroarea standard (precedată de un "+" înainte de a fi executată.) Util pentru depanare.
-q quietprofile
În cazul în care -v sau -X au fost setate, nu le aplica la citirea fișierelor de inițializare, acestea fiind / etc / profile .profile și fișierul specificat deENV variabilă de mediu.
-I IGNOREEOF
Ignorați EOF-urile de la intrare atunci când sunt interactive.
-i interactiv
Forțează shell-ul să se comporte interactiv.
-m Monitor
Activați controlul funcției (setat automat când este interactiv).
-s stdin
Citiți comenzile de la intrarea standard (setați automat dacă nu există argumente de fișier). Această opțiune nu are efect atunci când este setată după ce shell-ul a început deja să funcționeze (adică cu set (1)).
-V vi
Activați editorul de linii de comandă built-in vi (1) (dezactivează -E dacă a fost setat).
-E emacs
Activați editorul liniei de comandă built-in emacs (1) (dezactivează -V dacă a fost setat).
-b notifica
Activați notificarea asincronă a finalizării lucrării de fundal. (NEIMPLEMENTAT pentru 4,4 alfa)
Structura lexicală
Shell citește intrări în termeni de linii dintr-un fișier și o sparge în cuvinte în spații albe și în anumite secvențe de caractere care sunt speciale pentru shell-ul numit "operatori". Există două tipuri de operatori: operatorii de control și operatorii de redirecționare (sensul acestora este discutat mai târziu). În continuare este o listă de operatori:
"Operatori de control:"
& && ( ) ; ;; | || "Operator de redirecționare:" < > >| << >> <& >& <<- <>
Citarea se utilizează pentru a elimina semnificația specială a anumitor caractere sau cuvinte în shell, cum ar fi operatorii, spațiul alb sau cuvintele cheie. Există trei tipuri de citare: potrivite citate unice, citate duble potrivite și backslash. O retroscurgere păstrează semnificația literală a următorului caracter, cu excepția liniei Aq newline. O retrosamblare care precede o linie nouă Aq este tratată ca o continuare a liniei. Închiderea caracterelor în citate unică păstrează semnificația literală a tuturor caracterelor (cu excepția citatelor simple, ceea ce face imposibilă introducerea cotelor unice într-un șir unic citat). Închiderea caracterelor în cadrul citatelor duble păstrează semnificația literală a tuturor caracterelor, cu excepția dolarii ($) și a backslash-ului (). Înapoi în interiorul ghilimelelor duble este istoric ciudat și servește doar pentru a cita următoarele caractere: $ ` În caz contrar, rămâne literal. Cuvintele rezervate sunt cuvinte care au înțeles special asupra cochiliei și sunt recunoscute la începutul unei linii și după un operator de control. Următoarele sunt cuvintele rezervate: ! Taelif Ta fi Ta în timp ce Ta caz altfel Tapentru Ta Ta Ta {Ta} Tatăa făcut Ta până la Ta dacă Ta esac Sensul lor este discutat mai târziu. Un alias este un nume și o valoare corespunzătoare setată folosind comanda construită în alias (1). Ori de câte ori poate apărea un cuvânt rezervat (vezi mai sus) și după verificarea cuvintelor rezervate, shell-ul verifică cuvântul pentru a vedea dacă se potrivește cu un alias. În caz contrar, îl înlocuiește în fluxul de intrare cu valoarea sa. De exemplu, dacă există un alias numit `` lf '' cu valoarea `` ls-F '', atunci intrarea: Dacă foobar ar deveni ls -F foobar Aliasurile oferă un mod convenabil pentru utilizatorii naivi de a crea contorii pentru comenzi fără a trebui să învețe cum să creeze funcții cu argumente. Ele pot fi, de asemenea, folosite pentru a crea codul lexical obscur. Această utilizare este descurajată. Cochilistul interpretează cuvintele pe care le citează în funcție de o limbă, a cărei specificație este în afara scopului acestei pagini manuale (se referă la BNF înPOSIX Documentul 1003,2). În esență, o linie este citită și dacă primul cuvânt al liniei (sau după un operator de control) nu este un cuvânt rezervat, atunci shell-ul a recunoscut o comandă simplă. În caz contrar, poate fi recunoscută o comandă complexă sau o altă construcție specială. Dacă o comandă simplă a fost recunoscută, shell-ul efectuează următoarele acțiuni: Cuvintele de bază ale formularului "name = value" sunt desprinse și atribuite mediului în care se află comanda simplă. Operatorii de redirecționare și argumentele lor (după cum este descris mai jos) sunt desprinse și salvate pentru procesare. Cuvintele rămase sunt extinse așa cum este descris în secțiunea numită "Extensii" și primul cuvânt rămas este considerat numele comenzii și comanda este localizată. Cuvintele rămase sunt considerate argumentele comenzii. Dacă nu s-a produs niciun nume de comandă, atunci asignările variabilei `` name = value '' recunoscute la punctul 1 afectează shell-ul curent. Redirecționările sunt efectuate conform descrierii din secțiunea următoare. redirecționări Redirecționările sunt folosite pentru a schimba unde o comandă își citește intrarea sau își trimite ieșirea. În general, redirecționările deschid, închid sau duplică o referință existentă la un fișier. Formatul global utilizat pentru redirecționare este: n redir-op Unde redir-op este unul dintre operatorii de redirecționare menționați anterior. În continuare este o listă a posibilelor redirecționări. Bq n este un număr opțional, ca în '3' (nu `Bq 3 'care se referă la un descriptor de fișier. n> fișier Redirecționați ieșirea standard (sau n) la fișier. n> | fişier Același lucru, dar suprascrie -C opțiune. n >> fișier Adăugați ieșirea standard (sau n) în fișier. n <fișier Redirecționați intrarea standard (sau n) din fișier. n1 <& n2 Duplicată intrare standard (sau n1) din descriptorul de fișiere n2. n <& - Închideți intrarea standard (sau n). n1> & n2 Efectul duplicat standard (sau n1) de la n2. n> & - Închideți ieșirea standard (sau n). n <> fișier Deschideți fișierul pentru citirea și scrierea pe intrarea standard (sau n). Următoarea redirecționare este adesea numită "aici-document" n << delimiter aici-doc text … delimitator Tot textul de pe liniile succesive până la delimiter este salvat și pus la dispoziția comenzii pe intrarea standard sau descriptorul de fișiere n dacă este specificat.Dacă se specifică delimitatorul specificat pe linia inițială, textul here-doc este tratat literal, altfel textul este supus extinderii parametrilor, substituției comenzilor și expansiunii aritmetice (așa cum este descris în secțiunea despre "Extensii") "Dacă operatorul este` `<< - '' în loc de` `<< '', atunci tab-urile din fișierul here-doc sunt desprinse. Există trei tipuri de comenzi: funcții shell, comenzi încorporate și programe normale - iar comanda este căutată (după nume) în ordinea respectivă. Fiecare dintre ele sunt executate într-un mod diferit. Când se execută o funcție shell, toți parametrii de poziționare a coajă (cu excepția lui $ 0, care rămâne neschimbat) sunt setați la argumentele funcției shell. Variabilele care sunt plasate explicit în mediul de comandă (prin plasarea atribuțiilor lor înaintea numelui funcției) sunt făcute la nivel local pentru funcție și sunt setate la valorile date. Apoi se execută comanda dată în definiția funcției. Parametrii poziționali sunt restabiliți la valorile inițiale când comanda este finalizată. Toate acestea se întâmplă în shell-ul curent. Instalațiile Shell sunt executate intern pe coajă, fără a crea un nou proces. În caz contrar, dacă numele comenzii nu corespunde unei funcții sau nu este încorporat, comanda este căutată ca un program normal în sistemul de fișiere (așa cum este descris în secțiunea următoare). Când se execută un program normal, shell-ul rulează programul, trecând argumentele și mediul în program. Dacă programul nu este un fișier executabil normal (adică dacă nu începe cu "numărul magic" al căruiASCII reprezentarea este "#!", deci execve (2) returnează Er ENOEXEC atunci) shell-ul va interpreta programul într-un subshell. În acest caz, shell-ul copilului se va reinitializa, astfel încât efectul va fi ca și cum ar fi fost invocată o nouă shell pentru a gestiona scriptul ad-hoc shell, cu excepția faptului că locația comenzilor hashed localizate în shell-ul părinte va fi reținută de către copil. Rețineți că versiunile anterioare ale acestui document și codul sursă înseși se referă în mod înșelător și sporadic la un script de shell, fără un număr magic, ca fiind "procedura shell". Când localizați o comandă, shell-ul mai întâi caută să vadă dacă are o funcție shell prin acel nume. Apoi caută o comandă încorporată de acel nume. Dacă nu se găsește o comandă încorporată, se întâmplă una din cele două lucruri: Numele de comenzi care conțin o slash sunt executate pur și simplu fără a efectua căutări. Shell caută fiecare intrare înCALE în schimb, pentru comanda. Valoarea luiCALEvariabila ar trebui să fie o serie de intrări separate de colonii. Fiecare intrare constă dintr-un nume de director. Directorul curent poate fi indicat implicit printr-un nume de director gol sau explicit printr-o singură perioadă. Starea de ieșire a comenzii Fiecare comandă are o stare de ieșire care poate influența comportamentul altor comenzi ale shell-ului. Paradigma este că o comandă iese la zero cu normală sau cu succes, și non-zero pentru eșec, eroare sau o indicație falsă. Pagina man pentru fiecare comandă trebuie să indice diferitele coduri de ieșire și ce înseamnă ele. În plus, comenzile încorporate returnează codurile de ieșire, la fel ca și funcția shell shell executată. Comenzile complexe sunt combinații de comenzi simple cu operatori de control sau cuvinte rezervate, creând împreună o comandă mai complexă. În general, o comandă este una dintre următoarele: Dacă nu se specifică altfel, starea de ieșire a unei comenzi este cea a ultimei comenzi simple executate de comandă. O conductă este o secvență a uneia sau mai multor comenzi separate de operatorul de control |. Emisia standard a tuturor comenzilor, cu excepția ultimei comenzi, este conectată la intrarea standard a următoarei comenzi. Ieșirea standard a ultimei comenzi este moștenită din shell, ca de obicei. Formatul unei conducte este: ! comandă1 comanda2 … Ieșirea standard a comenzii1 este conectată la intrarea standard a comenzii2. Intrarea standard, ieșirea standard sau ambele comenzi sunt considerate atribuite de conducte înainte de orice redirecționare specificată de operatorii de redirecționare care fac parte din comandă. Dacă conducta nu este în fundal (discutată mai târziu), shell-ul așteaptă ca toate comenzile să se finalizeze. Dacă cuvântul rezervat! nu precede conducta, starea de ieșire este starea de ieșire a ultimei comenzi specificate în conductă. În caz contrar, starea de ieșire este logica NU a stării de ieșire a ultimei comenzi. Adică, dacă ultima comandă returnează zero, starea de ieșire este 1; dacă ultima comandă returnează mai mult de zero, starea de ieșire este zero. Deoarece asignarea conductei de intrare standard sau de ieșire standard sau ambele are loc înainte de redirecționare, aceasta poate fi modificată prin redirecționare. De exemplu: $ comanda1 2> & 1 | comanda2 trimite atât ieșirea standard, cât și eroarea standard a comenzii1 la intrarea standard a comenzii2. A ; sau Rețineți că, spre deosebire de alte tipuri de cochilii, fiecare proces din conductă este un copil al shell-ului invocat (cu excepția cazului în care este shell builtin, caz în care se execută în shell - dar orice efect pe care îl are asupra mediului este șters). Dacă o comandă este terminată de operatorul de control ampersand (&), shell-ul execută comanda asincron - adică shell-ul nu așteaptă terminarea comenzii înainte de a executa următoarea comandă. Formatul pentru rularea unei comenzi în fundal este: command1 & command2 & … Dacă shell-ul nu este interactiv, intrarea standard a unei comenzi asincrone este setată la / dev / null O listă este o secvență de comenzi zero sau mai multe, separate prin linii noi, punct sau virgulă sau ampersand, și opțional oprită de unul dintre aceste trei caractere. Comenzile dintr-o listă sunt executate în ordinea în care sunt scrise. Dacă comanda este urmată de un ampersand, shell-ul pornește comanda și trece imediat la următoarea comandă; altfel așteaptă terminarea comenzii înainte de a trece la următoarea. `` && '' și `` || '' sunt operatori din lista AND-OR. `` && '' execută prima comandă și apoi execută a doua comandă dacă statusul de ieșire al primei comenzi este zero. `` || '' este similar, dar execută a doua comandă dacă statusul de ieșire al primei comenzi este nenul. `` && '' și `` || 'ambele au aceeași prioritate. Sintaxa comenzii if este în cazul în care lista apoi listați listă elif apoi lista … altă listă Fi Sintaxa comenzii în timp este în timp ce lista face lista Terminat Cele două liste sunt executate în mod repetat, în timp ce starea de ieșire a primei liste este zero. Comanda "până" este similară, dar are cuvântul până la locul lui, ceea ce o face să se repete până când starea de ieșire a primei liste este zero. Sintaxa comenzii pentru este pentru variabilă în cuvânt … face lista Terminat Cuvintele sunt extinse, iar lista este executată în mod repetat, cu variabila setată la fiecare cuvânt la rândul său. a face și a făcut poate fi înlocuit cu "` {'și ``}' ' Sintaxa comenzii pauză și continuă este rupe num continuă num Pauza termină numarul cel mai intim pentru sau în timp ce buclele. Continuarea continuă cu următoarea iterație a celei mai interioare buclă. Acestea sunt implementate ca comenzi încorporate. Sintaxa comenzii casei este cuvânt de caz în model) lista ;; … ESAC Modelul poate fi de fapt unul sau mai multe modele (a se vedea modelele Shell descrise mai târziu), separate de caracterele `` ''. Comenzile pot fi grupate fie prin scriere (listă) sau {list; Primul dintre acestea execută comenzile într-un subshell. Comenzile încorporate grupate într-o listă nu vor afecta shell-ul curent. Cea de-a doua formă nu are o altă coajă, deci este puțin mai eficientă. Combinarea comenzilor în acest fel vă permite să redirecționați ieșirea lor ca și când ar fi fost un program: {printf salut; printf lume n ";}> salut funcţii Sintaxa unei definiții a funcției este comanda nume () O definiție a funcției este o instrucțiune executabilă; când se execută, instalează o funcție denumită nume și returnează o stare de ieșire de zero. Comanda este în mod normal o listă cuprinsă între `` `` și ``} '' Variabilele pot fi declarate ca fiind locale la o funcție utilizând o comandă locală. Aceasta ar trebui să apară ca prima declarație a unei funcții, iar sintaxa este local variabilă - … Local este implementat ca o comandă încorporată. Când o variabilă este făcută locală, ea moștenește valoarea inițială și steagurile exportate și citite din variabila cu același nume în domeniul de aplicare din jur, dacă există una. În caz contrar, variabila este inițial dezactivată. Shell-ul folosește scoping dinamic, astfel încât dacă facem variabila x locală să funcționeze f, care apoi apelează funcția g, referințele la variabila x făcută în g se vor referi la variabila x declarată în interiorul f, nu la variabila globală numită x . Singurul parametru special pe care îl putem face local este `` - '' '' '' '' '' orice opțiune de corespondență locală care este schimbată prin comanda set în interiorul funcției care urmează să fie restabilită la valorile inițiale atunci când funcția revine. Sintaxa comenzii de retur este returnați exitstatus Termina funcția de execuție curentă. Returnul este implementat ca o comandă încorporată. Cochilii mențin un set de parametri. Un parametru desemnat de un nume se numește o variabilă. La pornire, shell-ul transformă toate variabilele de mediu în variabile de shell. Noi variabile pot fi setate folosind formularul name = valoarea Variabilele stabilite de utilizator trebuie să aibă un nume care constă numai din alfabetică, numerică și subliniere - primul dintre acestea nu trebuie să fie numeric. Un parametru poate fi, de asemenea, notat cu un număr sau un caracter special așa cum se explică mai jos. Un parametru pozițional este un parametru marcat cu un număr (n> 0). Cochilie le stabilește inițial la valorile argumentelor liniei de comandă care urmează numele scriptului shell. Setul (1) încorporat poate fi utilizat și pentru setarea sau resetarea acestuia. Un parametru special este un parametru indicat de unul dintre următoarele caractere speciale. Valoarea parametrului este afișată lângă caracterul său. * Se extinde la parametrii de poziție, pornind de la unul. Atunci când extinderea are loc într-un șir dublu-citat, acesta se extinde într-un singur câmp cu valoarea fiecărui parametru separat de primul caracter alIFS variabilă sau prin @ Se extinde la parametrii de poziție, pornind de la unul.Atunci când expansiunea are loc în cadrul ghilimelelor duble, fiecare parametru pozițional se extinde ca argument separat. Dacă nu există parametri poziționali, extinderea lui @ generează argumente zero, chiar dacă @ este dublă cotată. Ce înseamnă, de exemplu, dacă $ 1 este `` abc '' și $ 2 este `` def ghi '', apoi Qq $ @ se extinde la cele două argumente: abc def ghi # Se extinde la numărul de parametri poziționali. ? Extinde la starea de ieșire a celei mai recente conducte. - (Hyphen.) Extinde la flag-urile opțiunii curente (numele opțiunilor dintr-o singură literă sunt concatenate într-un șir) așa cum este specificat în invocare, prin setarea comenzii încorporate sau implicit prin shell. $ Extinde la ID-ul procesului shell-ului invocat. Un subshell păstrează aceeași valoare ca $ ca și părintele său. ! Extinde la ID-ul procesului cea mai recentă comandă de fundal executată din shell-ul curent. Pentru o conductă, ID-ul procesului este acela al ultimei comenzi din conductă. 0 (Zero.) Extinde la numele shell-ului sau al shell-ului. Extensiile de cuvinte Această clauză descrie diferitele extinderi care sunt efectuate pe cuvinte. Nu toate extensiile sunt efectuate pe fiecare cuvânt, după cum se explică mai târziu. Extensii Tilde, extensii de parametri, substituții de comandă, expansiuni aritmetice și eliminări de citare care se produc într-un singur cuvânt, extinse la un singur câmp. Este vorba doar de divizare în câmp sau de extindere a căii care poate crea mai multe câmpuri dintr-un singur cuvânt. Singura excepție de la această regulă este extinderea parametrului special @ în cadrul ghilimelelor duble, după cum sa descris mai sus. Ordinea extinderii cuvântului este: Extinderea Tilde, Extinderea parametrilor, Înlocuirea comenzilor, Extinderea aritmetică (toate acestea se produc în același timp). Divizarea câmpului se efectuează pe câmpurile generate de pasul (1), cu excepția cazului în careIFS variabila este nulă. Extinderea numelui de cale (dacă nu este setat -f este în vigoare). Citat Removal. Caracterul $ este folosit pentru a introduce expansiunea parametrilor, substituirea comenzilor sau evaluarea aritmetică. Un cuvânt care începe cu un caracter tilde necotat (~) este supus extinderii tilde. Toate caracterele până la slash (/) sau la sfârșitul cuvântului sunt tratate ca un nume de utilizator și sunt înlocuite cu directorul de domiciliu al utilizatorului. Dacă numele de utilizator lipsește (ca în ~ / foobar), tilda este înlocuită cu valoarea lui ACASĂ variabilă (directorul de acasă al utilizatorului actual). Formatul pentru extinderea parametrilor este după cum urmează: $ {Expresie} unde expresia constă din toate caracterele până când potrivirea ``} '' Orice ``} '' a scăpat de o backslash sau într-un șir cotat, iar caracterele în expansiuni aritmetice embedded, substituții de comandă și extensii variabile nu sunt examinate în determinarea potrivirea ``} '' Cea mai simplă formă de extindere a parametrilor este: $ {Parametru} Valoarea, dacă este cazul, a parametrului este înlocuită. Numele parametrului sau simbolul poate fi inclus în bretele, care sunt opționale, cu excepția parametrilor poziționali cu mai mult de o cifră sau atunci când parametrul este urmat de un caracter care ar putea fi interpretat ca parte a numelui. Dacă apare o extindere a parametrilor în interiorul citatelor duble: Extinderea numelui de cale nu se efectuează pe rezultatele extinderii. Divizarea câmpului nu se efectuează pe rezultatele extinderii, cu excepția lui @. În plus, o extindere a parametrilor poate fi modificată utilizând unul dintre următoarele formate. $ {Parametru:} de de cuvinte Utilizați valorile implicite. Dacă parametrul este dezactivat sau nul, expansiunea cuvântului este înlocuită; în caz contrar, valoarea parametrului este înlocuită. $ {Parametru: = cuvânt} Alocați valorile implicite. Dacă parametrul este dezactivat sau nul, extinderea cuvântului este atribuită parametrului. În toate cazurile, valoarea finală a parametrului este înlocuită. Numai variabilele, nu parametrii poziționali sau parametrii specifici, pot fi atribuite în acest fel. $ {Parametru: cuvânt} Indicați eroarea dacă este nulă sau dezactivată. Dacă parametrul este dezactivat sau nul, extensia cuvântului (sau un mesaj care indică faptul că acesta este dezactivat dacă cuvântul este omis) este scris la eroarea standard și shell-ul iese cu o stare de ieșire nonzero. În caz contrar, valoarea parametrului este înlocuită. O coajă interactivă nu trebuie să iasă. $ {Parametru: + cuvânt} Utilizați valoarea alternativă. Dacă parametrul este dezactivat sau nul, nul este înlocuit; altfel, extinderea cuvântului este înlocuită. În extensiile de parametri afișate anterior, utilizarea colonului în format duce la un test pentru un parametru care este dezactivat sau nul; omiterea colonului duce la un test pentru un parametru care este doar dezactivat. $ {#} Parametru String Length. Lungimea în caractere a valorii parametrului. Următoarele patru varietăți de extindere a parametrilor prevăd procesarea subreverselor. În fiecare caz, pentru a evalua tiparele, se utilizează notația de potrivire a tiparelor (a se vedea modelele Shell), mai degrabă decât notarea expresiei regulate. Dacă parametrul este * sau @, rezultatul expansiunii este nespecificat. Închiderea șirului complet de extindere a parametrilor în ghilimele duble nu determină citarea următoarelor patru tipuri de caractere de tip, în timp ce citarea caracterelor din cadrul bretelelor are acest efect. $ {Parametru% cuvânt} Scoateți cel mai mic model de sufix. Cuvântul este extins pentru a produce un model. Extensia parametrilor are ca rezultat parametrul, cu cea mai mică porțiune a sufixului, potrivită cu modelul șters. $ {Parametru %% cuvânt} Eliminați cel mai mare model de sufix.Cuvântul este extins pentru a produce un model. Extinderea parametrilor are drept rezultat parametrul, cea mai mare parte a sufixului fiind potrivită cu modelul șters. $ {Parametru # cuvânt} Eliminați cel mai mic model de prefix. Cuvântul este extins pentru a produce un model. Extensia parametrilor duce apoi la parametru, cu cea mai mică porțiune a prefixului, potrivită cu modelul șters. $ {Parametru ## cuvânt} Eliminați cel mai mare model de prefix. Cuvântul este extins pentru a produce un model. Extensia parametrilor duce apoi la parametru, cea mai mare parte a prefixului fiind potrivită cu modelul șters. Comandă de înlocuire Comanda de substituție permite ieșirea unei comenzi să fie înlocuită în locul numelui comenzii în sine. Înlocuirea comenzii are loc atunci când comanda este închisă după cum urmează: $ (Comanda) sau Po versiunea `` coperta``` Pc: `command` Carcasa extinde substituția comenzii executând comanda într-un mediu subshell și înlocuind înlocuirea comenzii cu ieșirea standard a comenzii, eliminând secvențele de una sau mai multe Extinderea aritmetică oferă un mecanism pentru evaluarea unei expresii aritmetice și substituirea acesteia cu valoarea acesteia. Formatul pentru expansiunea aritmetică este după cum urmează: $ ((Expresie)) Expresia este tratată ca și cum ar fi în dublu-ghilimele, cu excepția faptului că un dublu-citat în interiorul expresiei nu este tratat special. Carcasa extinde toate jetoanele în expresia de extindere a parametrilor, înlocuirea comenzilor și eliminarea citărilor. Apoi, shell-ul tratează acest lucru ca o expresie aritmetică și înlocuiește valoarea expresiei. După expansiunea parametrilor, înlocuirea comenzilor și expansiunea aritmetică, shell-ul scanează rezultatele extinderilor și înlocuirilor care nu au apărut în dublă citate pentru împărțirea câmpului și pot rezulta mai multe câmpuri. Cochilia tratează fiecare caracter al luiIFS ca un delimiter și folosiți delimitatorii pentru a împărți rezultatele câmpurilor în expansiunea parametrilor și în substituirea comenzilor. Cu excepția cazului în care -f flagul este setat, generarea numelui fișierului se efectuează după ce divizarea cuvântului este finalizată. Fiecare cuvânt este privit ca o serie de modele, separate de tăieturi. Procesul de expansiune înlocuiește cuvântul cu numele tuturor fișierelor existente ale căror nume pot fi formate prin înlocuirea fiecărui model cu un șir care se potrivește cu modelul specificat. Există două restricții: în primul rând, un model nu poate corespunde unui șir care conține o slash și în al doilea rând un model nu poate corespunde unui șir care începe cu o perioadă, cu excepția cazului în care primul caracter al modelului este o perioadă. Următoarea secțiune descrie modelele utilizate atât pentru Extinderea căii de cale, cât și pentru comanda casetei (1). Un model este format din caractere normale, care se potrivesc cu ele însele, și meta-caractere. Meta-caracterele sunt `` `` `` `` `` `? '' Și` `'' Aceste personaje își pierd înțelesurile speciale dacă sunt citate. Atunci când se efectuează o înlocuire de comandă sau variabilă și semnul dolarului sau cotația inversă nu sunt citate dublu, valoarea variabilei sau a ieșirii comenzii este scanată pentru aceste caractere și acestea sunt transformate în meta-caractere. Un asterisc (`` * '') corespunde oricărui șir de caractere. Un semn de întrebare se potrivește cu un singur caracter. Un bracket stânga (`` '') introduce o clasă de caractere. Sfârșitul clasei de caractere este indicat de un (`` '') dacă `` '' lipsește, apoi `` '' se potrivește cu `` '', mai degrabă decât introducerea unei clase de caractere. O clasă de caractere se potrivește cu oricare dintre caracterele dintre parantezele pătrate. O serie de caractere pot fi specificate folosind un semn minus. Clasa de caractere poate fi completată făcând un punct de exclamare primul caracter al clasei de caractere. Pentru a include un `` '' într-o clasă de caractere, faceți primul caracter afisat (după ``! '' Dacă există). Pentru a include un semn minus, face primul sau ultimul caracter enumerat Această secțiune listează comenzile încorporate care sunt încorporate deoarece trebuie să efectueze o operație care nu poate fi efectuată printr-un proces separat. Pe lângă acestea, există și alte câteva comenzi care pot fi construite pentru eficiență (de exemplu, ecou 1). : O comandă nulă care returnează o valoare de ieșire 0 (adevărată). . fişier Comenzile din fișierul specificat sunt citite și executate de shell. alias Nume = șir … Dacă name = string este specificat, shell-ul definește aliasul Nume cu valoare şir Dacă e așa Nume este specificat, valoarea aliasului Nume este imprimat. Cu nici un argument,alias builtin imprimă numele și valorile tuturor aliaselor definite (a se vedeaunalias) bg loc de munca … Continuați lucrările specificate (sau lucrarea curentă dacă nu sunt oferite nicio lucrare) în fundal. comanda comanda arg … Executați comanda încorporată specificată. (Acest lucru este util când aveți o funcție shell cu același nume ca o comandă încorporată.) CD director Treceți la directorul specificat (implicit$ HOME) Dacă o înregistrare pentruCDPATH apare în mediulCD comanda sau variabila shellCDPATH este setat și numele directorului nu începe cu o slash, apoi directoarele listate înCDPATH va fi căutat pentru directorul specificat. FormatulCDPATH este aceeași cu cea a luiCALE Într - o coajă interactivă,CD comanda va imprima numele directorului la care a fost schimbat, daca aceasta este diferita de numele pe care la dat userul. Acestea pot fi diferite fie pentru căCDPATH a fost folosit mecanismul sau pentru că a fost traversată o legătură simbolică. eval şir… Concatenați toate argumentele cu spații. Apoi reevaluați și executați comanda. Exec comanda arg … Cu excepția cazului în care comanda este omisă, procesul shell-ului este înlocuit cu programul specificat (care trebuie să fie un program real, nu un shell builtin sau o funcție). Orice redirecționări peExeccomenzile sunt marcate ca permanente, astfel încât acestea să nu fie anulate cândExec comandă finisaje. Ieșire exitstatus Terminați procesul de coajă. Dacă exitstatus este dat ca fiind statutul de ieșire al cochiliei; în caz contrar se utilizează starea de ieșire a comenzii precedente. export Nume… export -p Numele specificate sunt exportate astfel încât acestea să apară în mediul comenzilor ulterioare. Singura modalitate de a dezimportiva o variabilă este de ao dezactiva. Cochilizatorul permite setarea valorii unei variabile în același timp exportată prin scriere nume de export = valoare Cu nici un argument, comanda de export afișează numele tuturor variabilelor exportate. Cu -popțiunea specificată, ieșirea va fi formatată corespunzător pentru utilizare non-interactivă. fc-e editor primul ultimul fc-1 -nr primul ultimul fc-s vechi = nou primul fc liste instalate sau editate și re-execută, comenzi introduse anterior într-o coajă interactivă. E editor Utilizați editorul numit de editor pentru a edita comenzile. Șirul de editor este un nume de comandă, supus căutării prinCALE variabil. Valoarea înFCEDIT variabila este utilizată ca implicită atunci când -e nu este specificat. DacăFCEDIT este nulă sau neschimbată, valoarea luiEDITOR variabilă. DacăEDITOR este null sau unset, ed (1) este folosit ca editor. -l (ell) Listează comenzile mai degrabă decât invocând un editor pe ele. Comenzile sunt scrise în ordinea indicată de primul și ultimul operand, afectate de -r cu fiecare comandă precedată de numărul de comandă. -N Suprimați numerele de comandă atunci când listează cu -l. -r Reveniți ordinea comenzilor listate (cu -L sau editate (fără niciunul -L nici -s) -s Re-executați comanda fără a invoca un editor. primul ultimul Selectați comenzile care trebuie listate sau editate. Numărul de comenzi anterioare care pot fi accesate este determinat de valoarea luiHISTSIZE variabil. Valoarea primei sau ultimei sau a ambelor sunt una dintre următoarele: + Număr Un număr pozitiv reprezentând un număr de comandă; numerele de comandă pot fi afișate cu -L opțiune. -număr Un număr zecimal negativ reprezentând comanda care a fost executată anterior de numărul de comenzi. De exemplu, -1 este comanda imediat precedentă. şir Un șir indicând cea mai recentă comandă introdusă, care începe cu acel șir. În cazul în care operandul vechi = nou nu este specificat și cu -s forma de șir a primului operand nu poate conține un semn egal încorporat. Următoarele variabile de mediu afectează executarea fc: FCEDIT Numele editorului de utilizat. HISTSIZE Numărul de comenzi anterioare care sunt accesibile. fg loc de munca Mutați lucrarea specificată sau lucrarea curentă în prim-plan. getopts optstring var POSIX getopts comanda, pentru a nu fi confundat cu Bell Labs - getopt derivat (1). Primul argument ar trebui să fie o serie de litere, fiecare dintre care poate fi opțional urmată de un colon pentru a indica că opțiunea necesită un argument. Variabila specificată este setată la opțiunea parsată. getopts command deprecates utilitatea getopt (1) mai veche din cauza manipularii argumentelor care conțin spații albe. getopts builtin poate fi folosit pentru a obține opțiuni și argumentele lor dintr-o listă de parametri. Când este invocată,getopts plasează valoarea următoarei opțiuni din șirul de opțiuni din lista din variabila shell specificată de var și este indexul în variabila shellOPTIND Când shell-ul este invocat,OPTIND este inițializată la 1. Pentru fiecare opțiune care necesită un argument,getopts builtin îl va plasa în variabila shellOPTARG Dacă nu este permisă o opțiune în optstring atunciOPTARG vor fi dezactivate. optstring este un șir de litere de opțiune recunoscute. Dacă o literă este urmată de un colon, este de așteptat ca opțiunea să aibă un argument care poate sau nu să fie separat de acesta de spațiu alb. Dacă un caracter de opțiune nu este găsit în cazul în care se așteaptă,getopts va stabili variabila var la un ``? ''getopts va fi apoi dezactivatOPTARG și să scrie ieșire la eroarea standard. Specificând un colon ca primul caracter al lui optstring toate erorile vor fi ignorate. O valoare nenuloasă este returnată la atingerea ultimei opțiuni. Dacă nu există argumente rămase,getopts va stabili var la opțiunea specială, `` - '' altfel, se va seta var la ``? '' Următorul fragment de cod arată cum s-ar putea procesa argumentele pentru o comandă care poate lua opțiunile a și b și opțiunea c care necesită un argument. în timp ce getopts abc: fdocazul $ f ina | b) flag = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; ieșirea 1;ESACTerminatschimb `expr $ OPTIND - 1` Acest cod va accepta oricare dintre următoarele ca fiind echivalent: cmd-fișier de fișiercmd -a -c fisier fisier argcmd -carg - fișier de fișiercmd -a -carg - fișier de fișier hash -rv comanda… Cochilul menține o tabelă de tip hash care își amintește locațiile comenzilor. Cu nici un fel de argumente,hașiș comanda imprimă conținutul acestui tabel. Intrări care nu au fost analizate de la ultimaCD comenzile sunt marcate cu un asterisc; este posibil ca aceste intrări să fie nevalide. Cu argumente,hașiș comanda elimină comenzile specificate din tabela hash (dacă nu sunt funcții) și apoi le localizează. Cu -v opțiunea hash tipărește locațiile comenzilor pe măsură ce le găsește. The -r opțiunea determină comanda hash să ștergă toate intrările din tabela hash, cu excepția funcțiilor. jobid loc de munca Imprimați id-urile de proces ale proceselor din lucrare. În cazul în care loc de munca argumentul este omis, se utilizează postul curent. locuri de munca Această comandă afișează toate procesele de fundal care sunt copii ai procesului actual de shell. PWD Imprimați directorul curent. Comanda încorporată poate să difere de programul cu același nume, deoarece comanda încorporată își amintește ce este directorul curent, în loc să îl recompune de fiecare dată. Acest lucru face mai repede. Cu toate acestea, dacă directorul curent este redenumit, versiunea încorporată aPWD va continua să imprime numele vechi al directorului. citit-p prompt -r variabil… Promptul este tipărit dacă -p este specificată opțiunea și intrarea standard este un terminal. Apoi se citește o linie din intrarea standard. Linia nouă descendentă este ștearsă din linie, iar linia este împărțită așa cum este descrisă în secțiunea de divizare a cuvintelor de mai sus, iar piesele sunt atribuite variabilelor în ordine. Trebuie specificată cel puțin o variabilă. Dacă există mai multe piese decât variabilele, piesele rămase (împreună cu caracterele dinIFS care le-a separat) sunt atribuite ultimei variabile. Dacă există mai multe variabile decât piesele, variabilelor rămase li se atribuie șirul nul.citit builtin va indica succesul dacă nu se întâlnește EOF pe intrare, caz în care se va întoarce defecțiunea. Implicit, cu excepția cazului în care -r opțiunea este specificată, coloana vertebrală `` '' acționează ca un caracter de evacuare, determinând ca următorul caracter să fie tratat literal. În cazul în care un backslash este urmat de o nouă linie, lăsarea înapoi și noua linie vor fi șterse. numai citire Nume… readonly -p Denumirile specificate sunt marcate ca fiind numai citite, astfel încât acestea să nu poată fi modificate sau deconectate ulterior. Cochilie permite ca valoarea unei variabile să fie setată în același timp, fiind marcată doar prin scriere readonly name = value Cu nici un argument, comanda readonly afișează numele tuturor variabilelor numai pentru citire. Cu -p opțiunea specificată, ieșirea va fi formatată corespunzător pentru utilizare non-interactivă. a stabilit { -opțiuni | + opțiuni - arg … a stabilit comandă efectuează trei funcții diferite. Fără argumente, el afișează valorile tuturor variabilelor shell. În cazul în care sunt oferite opțiuni, acesta stabilește indicatoarele de opțiune specificate sau le șterge conform descrierii din secțiunea numită Sx Argument Processing List. A treia utilizare a comenzii set este de a seta valorile parametrilor de poziție ai shell-ului la argumentele specificate. Pentru a modifica parametrii poziționali fără a schimba opțiunile, utilizați "-" ca primul argument pe care să-l setați. Dacă nu există niciun arge, comanda set va șterge toți parametrii poziționali (echivalenți cu executarea `` shift $ #. '' valoare variabilă Alocă valorii variabilei. (În general, este mai bine să scrieți variabila = valoare decât să o utilizațisetVar setVareste destinat a fi utilizat în funcții care atribuie valori variabilelor ale căror nume sunt transmise ca parametri.) schimb n Treceți de mai multe ori parametrii poziționali. Aschimb stabilește valoarea $1 la valoarea lui $2 valoarea a $2 la valoarea lui $3 și așa mai departe, scăderea valorii $# de unul. Dacă n este mai mare decât numărul de parametri poziționali,schimb va emite un mesaj de eroare și va ieși cu starea de returnare 2. ori Imprimați utilizatorul acumulat și timpii de sistem pentru shell și pentru procesele care rulează din shell. Starea de returnare este 0. capcană acțiune semnal… Cauza shell-ului pentru a analiza și executa acțiune atunci când oricare dintre semnalele specificate sunt primite. Semnalele sunt specificate prin numărul de semnal. Dacă semnal este0 acțiunea este executată când shell-ul iese. acțiune poate fi nulă sau `` - '' prima face ca semnalul specificat să fie ignorat, iar acesta din urmă provoacă acțiunea implicită. Atunci când shell-ul frânge un subshell, acesta resetează semnalele capturate (dar nu ignorate) la acțiunea implicită.capcană comandă nu are nici un efect asupra semnalelor ignorate la intrarea în shell. tip Nume … Interpretați fiecare nume ca o comandă și tipăriți rezoluția căutării comenzii. Posibilele rezoluții sunt: cuvântul cheie shell, alias, builtin shell, comandă, alias urmărit și nu a fost găsit. Pentru pseudonime, expansiunea aliasului este imprimata; pentru comenzi și pseudonime urmărite este imprimat numele complet al căii de comandă. ulimit-H-S -a -tfdscmlpn valoare Încercați sau stabiliți limite grele sau moi la procese sau setați noi limite.Alegerea între limita tare (care nu poate fi încălcată de nici un proces și care nu poate fi ridicată odată ce a fost redusă) și limita moale (care determină procesele să fie semnalate dar nu neapărat ucise și care poate fi ridicată) se face cu aceste steaguri: -H setați sau întrebați despre limitele greșite -S setați sau întrebați despre limitele soft. Dacă nici unul -H nici -S este specificată, este afișată limita soft sau sunt setate ambele limite. Dacă ambele sunt specificate, ultima câștigă. Limita care urmează să fie interogată sau stabilită, atunci este aleasă prin specificarea oricăruia dintre aceste steaguri: -A afișați toate limitele actuale -t afișați sau setați limita la timpul CPU (în secunde) -f afișați sau setați limita celui mai mare fișier care poate fi creat (în blocuri de 512 octeți) -d afișați sau setați limita dimensiunii segmentului de date a unui proces (în kilobyte) -s afișați sau setați limita mărimii stivei unui proces (în kilobyte) -c afișați sau setați limita la cea mai mare dimensiune a dumpului de bază care poate fi produsă (în blocuri de 512 octeți) -m afișați sau setați limita pentru memoria fizică totală care poate fi utilizată de un proces (în kilobytes) -l arătați sau setați limita pe cât de multă memorie se poate bloca un proces cu mlock (2) (în kilobyte) -p afișați sau setați limita numărului de procese pe care acest utilizator le poate avea la un moment dat -N afișați sau setați limita numărului de fișiere pe care un proces poate să le deschidă simultan Dacă nu este specificat niciunul dintre acestea, limita de dimensiune a fișierului este afișată sau setată. Dacă este specificată valoarea, limita este setată la acel număr; altfel este afișată limita curentă. Limitele unui proces arbitrar pot fi afișate sau setate utilizând utilitarul sysctl (8). umask masca Setați valoarea umask (a se vedea umask (2)) la valoarea octală specificată. Dacă argumentul este omis, se imprimă valoarea umask. unalias-A Nume Dacă Nume este specificat, shell-ul elimină acest alias. Dacă -A este specificat, toate pseudonime sunt eliminate. unset Nume… Variabilele și funcțiile specificate sunt dezactivate și neexportate. Dacă un nume dat corespunde atât variabilei, cât și funcției, variabila și funcția sunt dezactivate. aștepta loc de munca Așteptați ca lucrarea specificată să finalizeze și să returneze starea de ieșire a ultimului proces în lucrare. Dacă argumentul este omis, așteptați ca toate lucrările să se finalizeze și să reveniți la starea de ieșire de zero. CandSH este folosit interactiv de la un terminal, comanda curentă și istoria comenzii (a se vedeafc în Sx Builtins) pot fi editate folosind editarea liniei de comandă vi-mode. Acest mod utilizează comenzile descrise mai jos, asemănătoare cu o submulțime a celor descrise în pagina vi man. Comanda `set '-o vi permite editarea modului vi-mode și plasarea lui sh în modul de inserare vi. Cu vi-mode activat, sh poate fi comutat între modul de inserare și modul de comandă. Editorul nu este descris în întregime aici, ci va fi într-un document ulterior. Este similar cu vi: tastând Aq ESC vă va arunca în modul comandă VI comandă. Atacul Aq retur în modul de comandă va trece linia în shell. Folosește om comandă ( % om ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular. Citându-l
backslash
Citate unice
Citate dublă
Cuvinte rezervate
Pseudonime
comenzi
Comenzi simple
Căutarea și execuția
Căutarea căii
Comenzi complexe
conducte
Comenzile de fundal -
Liste - În general vorbind
Operatori liste de circuite scurte
Flow-Control Constructs - dacă, în timp ce, pentru caz
Gruparea comenzilor impreuna
Variabile și parametri
Parametrii poziționali
Parametrii specifici
Tilde Expansion (înlocuirea directorului de domiciliu al unui utilizator)
Extinderea parametrilor
Extinderea aritmetică
Decuparea spațiului alb (divizarea câmpului)
Extinderea numelui de cale (generarea numelui fișierului)
Shell Modele
Builtins
Modificarea liniei de comandă




