Skip to main content

Cendra - Comando Linux

Anonim

NOM

sh - command intèrpret (shell)

SINOPSI

sh -/ + aCefnuvxIimqsVEbc -o nom llarg -words objectiu …

DESCRIPCIÓ

Sh és l'intèrpret d'ordres estàndard del sistema. La versió actual desh està en procés de canviar per complir amb laPOSIX Especificacions 1003.2 i 1003.2a de la closca. Aquesta versió té moltes característiques que fan que semblin semblants en alguns aspectes al shell de Korn, però no és un clon de shell de Korn (vegeu ksh (1)). Només les funcions designades perPOSIX a més d'algunes extensions de Berkeley, s'estan incorporant a aquest intèrpret d'ordres. EsperemPOSIX La conformitat del temps 4.4 BSD és alliberada. Aquesta pàgina d'home no pretén ser un tutorial o una especificació completa del shell.

Visió general

L'intèrpret d'ordres és una ordre que llegeix línies des d'un fitxer o terminal, les interpreta, i generalment executa altres ordres. És el programa que s'executa quan un usuari inicia sessió al sistema (tot i que un usuari pot seleccionar un intèrpret d'ordres diferent amb l'ordre chsh (1)). El shell implementa un llenguatge que té construccions de control de flux, una instal·lació de macros que proporciona diverses funcions, a més de l'emmagatzematge de dades, juntament amb l'historial incorporat i les capacitats d'edició de línies. Incorpora moltes característiques per a l'ús interactiu i té l'avantatge que el llenguatge interpretatiu és comú tant per a usos interactius com no interactius (scripts shell). És a dir, els comandaments es poden escriure directament a la carcassa d'execució o es poden introduir en un fitxer i el fitxer es pot executar directament per l'intèrpret d'ordres.

Invocació

Si no hi ha arguments i si l'entrada estàndard del shell està connectada a un terminal (o si el -ila bandera està establerta), i la -c l'opció no està present, el shell es considera un intèrpret d'ordres interactiu. Normalment, una casella interactiva demana abans de cada comandament i controla els errors de programació i comanda de manera diferent (tal com es descriu a continuació). Quan comença per primera vegada, el shell inspecciona l'argument 0, i si comença amb un tauler `- ', el shell també es considera un intèrpret d'inici de sessió. Això normalment es fa automàticament pel sistema quan l'usuari accedeix per primera vegada. Un shell d'inici de sessió llegeix primer els comandaments dels fitxers / etc / profile i .profile si existeixen. Si la variable d'entornENV s'estableix a l'entrada d'un intèrpret d'ordres, o està establert en el fitxer .profile d'un intèrpret d'ordres d'inici de sessió, el comandament següent llegeix les ordres del fitxer que es diu aENVPer tant, un usuari hauria de posar ordres que s'executin només en el moment d'inici de sessió al fitxer .profile, i les ordres que s'executen per a cada intèrpret dins delENV dossier. Per establir laENV variable a algun fitxer, col·loqueu la següent línia al fitxer .profile del vostre directori personal

ENV = $ HOME / .shinit; exportar ENV

substituint per `` .shinit '' qualsevol nom de fitxer que desitgeu. Des delENV es llegeix el fitxer per a cada invocació del shell, incloent scripts de shell i shells no interactius, el següent paradigma és útil per restringir ordres a laENV arxiu a invocacions interactives. Ordres de lloc dins del `` cas '' i `` esac '' a continuació (aquestes ordres es descriuen més endavant):

cas $ - in * i *)

# ordres per a ús interactiu només

esac

Si s'han especificat arguments de la línia d'ordres a part de les opcions, el shell tracta el primer argument com el nom d'un fitxer des del qual llegir ordres (un script de shell) i els arguments restants s'estableixen com a paràmetres posicionals del shell ($ 1 , $ 2, etc.). En cas contrari, el shell llegeix ordres des de la seva entrada estàndard.

Processament de llistat d'arguments

Totes les opcions de lletra única tenen un nom corresponent que es pot utilitzar com a argument a la -o opció. El conjunt -o El nom es proporciona al costat de l'opció de lletra única a la descripció següent. Si especifiqueu un dash `` - '' activa l'opció, mentre s'utilitza un valor `` + '', inhabilita l'opció. Les opcions següents es poden establir a partir de la línia d'ordres o amb el conjunt (1) builtin (descrit més endavant).

-a allexport

Exporta totes les variables assignades a. (UNIMPLEMENTED per 4.4alpha)

-c

Llegir comandaments des de la línia d'ordres. No es llegirà cap comandament a partir de l'entrada estàndard.

-C noclobber

No sobreescriure els fitxers existents amb ``> '' (UNIMPLEMENTED per 4.4alpha)

-e Ritxit

Si no és interactiu, sortiu immediatament si alguna ordre no provada falla. L'estat de sortida d'una ordre es considera provat explícitament si l'ordre s'utilitza per controlar unsi elifwhile ofins a o si l'ordre és l'operant de la mà esquerra d'un operador `` && '' o `` || ''.

-f noglob

Desactiva l'expansió de la ruta d'accés.

-n Noexec

Si no és interactiu, llegiu ordres però no les executeu. Això és útil per comprovar la sintaxi dels scripts shell.

-u substantiu

Escriviu un missatge a l'error estàndard quan intenteu expandir una variable que no estigui establerta, i si el shell no és interactiu, sortiu immediatament. (UNIMPLEMENTED per 4.4alpha)

-v verbose

El shell escriu la seva entrada a l'error estàndard a mesura que es llegeix. Útil per depurar.

-x Xtrace

Escriu cada ordre a error estàndard (precedit d'un `+ 'abans que s'executi. Útil per a la depuració.

-q file quietpro

Si el -v o -x S'han configurat les opcions, no les apliqueu en llegir els fitxers d'inicialització, essent / etc / profile.profile i el fitxer especificat per laENV variable d'entorn.

-I ignoreeof

Ignora EOF de l'entrada quan és interactiu.

-i interactiu

Força que el shell es comporti de manera interactiva.

-m monitor

Activa el control de feina (s'estableix automàticament quan és interactiu).

-s stdin

Llegeix comandaments de l'entrada estàndard (s'estableix automàticament si no hi ha cap argument d'arxiu present). Aquesta opció no té cap efecte quan s'estableix quan el shell ja ha començat a executar (és a dir, amb el conjunt (1)).

-V vi

Habiliteu l'editor de línia d'ordres vi (1) incorporat (deshabilita -E si s'ha configurat).

-E Emacs

Activa l'editor de línia d'ordres emacs (1) incorporat (deshabilita -V si s'ha configurat).

-b notificar

Activa la notificació asíncrona de la finalització del treball de fons. (UNIMPLEMENTED per 4.4alpha)

Estructura lèxica

El shell llegeix l'entrada en termes de línies d'un arxiu i la descompon en paraules en espais en blanc (blanks i pestanyes) i en certes seqüències de caràcters especials al shell anomenats `` operadors ''. Hi ha dos tipus d'operadors: operadors de control i operadors de redirecció (el seu significat es discuteix més endavant). A continuació es mostra una llista d'operadors:

"Operadors de control:"

& && ( ) ; ;; | ||

"Operador de redirecció:"

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

Cites

La cotització s'utilitza per eliminar el significat especial de certs caràcters o paraules al shell, com ara operadors, espais en blanc o paraules clau. Hi ha tres tipus de cites: les cometes simples combinades, les cometes dobles combinades i la barra invertida.

Barra invertida

Una barra invertida conserva el significat literal del següent caràcter, a excepció de la nova línia Aq. Una barra invertida anterior a una nova línia d'Aq es tracta com una continuació de línia.

Cites simples

La inclusió de caràcters en cites simples conserva el significat literal de tots els caràcters (excepte les cometes simples, cosa que impossibilita la publicació d'una cometes en una cadena d'un sol citat).

Quotes dobles

La inclusió de caràcters dins de les cometes dobles conserva el significat literal de tots els caràcters, excepte dollarign ($) backquote (`) i barra invertida (). La barra invertida dins de les cometes dobles és històricament estranya i només serveix per citar els següents caràcters:

$ `

En cas contrari, queda literal.

Paraules reservades

Les paraules reservades són paraules que tenen un significat especial al shell i són reconegudes al principi d'una línia i després d'un operador de control. Les següents són paraules reservades:

! TaElif Ta fi Ta, mentre que el cas Ta

sinó Taper Ta llavors Ta {Ta}

do Tafet Ta fins a Ta si Ta esac

El seu significat es discuteix més endavant.

Àlies

Un àlies és un nom i un valor corresponent establert amb l'ordre alias (1) builtin. Sempre que es pugui produir una paraula reservada (vegeu més amunt), i després de comprovar les paraules reservades, el shell comprova la paraula per veure si coincideix amb un àlies. Si ho fa, el reemplaça a la seqüència d'entrada amb el seu valor. Per exemple, si hi ha un àlies anomenat `` lf '' amb el valor `` ls -F '', llavors l'entrada:

lf foobar

es convertiria

ls -F foobar

Els àlies proporcionen una manera pràctica perquè els usuaris ingenus creïn ordres per a ordres sense haver d'aprendre a crear funcions amb arguments. També es poden utilitzar per crear un codi obscè lèxicament. Aquest ús es desanima.

Ordres

L'intèrpret de comandaments interpreta les paraules que llegeix d'acord amb un llenguatge, l'especificació del qual està fora de l'àmbit d'aquesta pàgina de l'home (consulteu el BNF alPOSIX Document 1003.2). Essencialment, però, es llegeix una línia i si la primera paraula de la línia (o després d'un operador de control) no és una paraula reservada, la shell ha reconegut un comandament simple. En cas contrari, s'ha pogut reconèixer una comanda complexa o alguna altra construcció especial.

Ordres simples

Si s'ha reconegut un comandament senzill, el shell realitza les accions següents:

  1. Les paraules principals del formulari `` name = value '' són eliminades i assignades a l'entorn de l'ordre simple. Els operadors de redirecció i els seus arguments (tal com es descriu a continuació) es despullen i es guarden per al seu processament.

  2. Les paraules restants s'expandeixen tal com es descriu a la secció anomenada `` Expansions '' i la primera paraula restant es considera el nom de l'ordre i es troba la comanda. Les paraules restants es consideren els arguments de la comanda. Si no s'ha produït cap nom de comanda, les assignacions de variables "` name = value '' reconegudes a l'ítem 1 afecten el shell actual.

  3. Les redireccions es realitzen tal i com es descriu a la següent secció.

Redireccions

Les redireccions s'utilitzen per canviar on una ordre llegeix la seva entrada o envia la seva sortida. En general, les redireccions obren, tanquen o duplica una referència existent a un fitxer. El format general utilitzat per a la redirecció és:

n redir-op file

on Redir-op és un dels operadors de redirecció anteriorment esmentats. A continuació es mostra una llista de possibles redireccions. El Bq n és un número opcional, com en `3 '(no` Bq 3' que fa referència a un descriptor de fitxer.

n> fitxer

Redirigeix ​​la sortida estàndard (o n) per a l'arxiu.

n> | dossier

Igual, però anul · la la -C opció.

n >> fitxer

Afegiu la sortida estàndard (o n) al fitxer.

n <fitxer

Redirigir l'entrada estàndard (o n) del fitxer.

n1 <& n2

Duplica l'entrada estàndard (o n1) del descriptor de fitxer n2.

n <& -

Tanqueu l'entrada estàndard (o n).

n1> & n2

Duplica la sortida estàndard (o n1) de n2.

n> & -

Tanqueu la sortida estàndard (o n).

n <> fitxer

Obriu el fitxer per llegir i escriure en una entrada estàndard (o n).

La següent redirecció sovint s'anomena `` aquí-document ''

n << delimitador

aquí-doc-text …

delimitador

Tot el text en línies successives fins al delimitador es guarda i es posa a disposició de l'ordre en l'entrada estàndard, o el descriptor de fitxer n si s'especifica.Si el delimitador especificat a la línia inicial es cita, el text here-doc-text es tracta literalment, en cas contrari el text està subjecte a l'expansió dels paràmetres, la substitució de comandaments i l'expansió aritmètica (tal com es descriu a la secció de "Expansions") 'Si l'operador és `` << -' 'en comptes de `` <<' ', les pestanyes de lideratge en el document here-doc són eliminades.

Cerca i execució

Hi ha tres tipus d'ordres: funcions de shell, comandaments integrats i programes normals, i la comanda es busca (per nom) en aquest ordre. Es executen d'una manera diferent.

Quan s'executa una funció de shell, tots els paràmetres posicionals del shell (excepte els $ 0, que no es modifiquen) s'estableixen als arguments de la funció shell. Les variables que es col·loquen explícitament en l'entorn de la comanda (posant-ne assignacions abans del nom de la funció) es fan locals a la funció i s'estableixen als valors donats. A continuació, s'executa l'ordre donada en la definició de funció. Els paràmetres de posició es restauren als seus valors originals quan es completa l'ordre. Tot això passa dins del shell actual.

Les característiques construïdes per Shell s'executen internament al shell, sense generar un procés nou.

En cas contrari, si el nom de la comanda no coincideix amb una funció o està integrada, la comanda es busca com un programa normal en el sistema de fitxers (tal com es descriu a la següent secció). Quan s'executa un programa normal, el shell executa el programa, passant els arguments i l'entorn al programa. Si el programa no és un fitxer executable normal (és a dir, si no comença amb el "número màgic" queASCII la representació és "#!", de manera que execve (2) retorna Er ENOEXEC llavors) la shell interpretarà el programa en un subshell. L'intèrpret d'ordres secundari es reinicialitzarà en aquest cas, de manera que l'efecte serà com si s'hagués invocat un nou intèrpret d'ordres per manipular l'script de l'intèrpret d'ordres ad hoc, excepte que la ubicació de les ordres ofegades ubicades a l'intèrpret d'ordres primari serà recordada pel nen

Tingueu en compte que les versions anteriors d'aquest document i el codi font en si erròniament i esporàdicament es refereixen a un script de shell sense un nombre màgic com a "procediment de shell".

Recorregut per rutes

Quan es localitza una ordre, el shell primer mira per veure si té una funció de shell amb aquest nom. A continuació, busca un comandament integrat amb aquest nom. Si no es troba una ordre integrada, es produeix una de les dues coses:

  1. Els noms de comandaments que contenen una barra es executen simplement sense fer cap cerca.

  2. El cercador cerca cada entrada aCAMÍ al seu torn per l'ordre. El valor de laCAMÍLa variable hauria de ser una sèrie d'entrades separades per colons. Cada entrada consta d'un nom de directori. El directori actual pot ser indicat implícitament per un nom del directori buit, o explícitament per un sol període.

Estat de sortida del comandament

Cada ordre té un estat de sortida que pot influir en el comportament d'altres ordres de shell. El paradigma és que un comandament surt amb zero per al normal o l'èxit, i no és zero per error, error o una falsa indicació. La pàgina de l'home de cada comanda hauria d'indicar els diferents codis de sortida i el que vol dir. A més, les ordres integrades retornen codis de sortida, igual que una funció de shell executada.

Comandaments complexos

Les ordres complexes són combinacions d'ordres simples amb operadors de control o paraules reservades, juntament creant un comandament complex més gran. Més generalment, una ordre és una de les següents:

  • comanda simple
  • canonada
  • llista o llista de compostos
  • comanda composta
  • definició de funció

Llevat que s'indiqui el contrari, l'estat de sortida d'un comandament és el de l'última ordre simple que executa l'ordre.

Pipelines

Una canonada és una seqüència d'un o més comandaments separats per l'operador de control. La sortida estàndard de tots, excepte l'última ordre, està connectada a l'entrada estàndard de l'ordre següent. La sortida estàndard de l'última ordre s'hereta de la shell, com és habitual.

El format d'un oleoducte és:

! command1 | comanda2 …

La sortida estàndard de la comanda 1 està connectada a l'entrada estàndard de l'ordre 2. L'entrada estàndard, la sortida estàndard o ambdós comandaments es consideren assignats per la canonada abans de qualsevol redirecció especificada pels operadors de redirecció que formen part del comandament.

Si la canonada no està en segon pla (es parla més endavant), el shell espera que es completin tots els comandaments.

Si la paraula reservada! no precedeix la canonada, l'estat de sortida és l'estat de sortida de l'última ordre especificada en el canal. En cas contrari, l'estat de sortida és el NO lògic de l'estat de sortida de l'últim comandament. És a dir, si l'última ordre retorna zero, l'estat de sortida és 1; si l'última ordre retorna més que zero, l'estat de sortida és zero.

Atès que l'assignació de canalització de l'entrada estàndard o la sortida estàndard o ambdós tenen lloc abans de la redirecció, es pot modificar mitjançant una redirecció. Per exemple:

$ command1 2> & 1 | comanda2

envia tant la sortida estàndard com l'error estàndard de l'ordre 1 a l'entrada estàndard de l'ordre 2.

A; o El terminador fa que la llista AND-OR-list precedent (descrita a continuació) s'executi de forma seqüencial; a & provoca una execució asíncrona de la llista AND-OR precedent.

Tingueu en compte que, a diferència d'alguns altres intèrprets, cada procés en el conducte és un nen de l'intèrpret d'ordres que invoca (a menys que es tracti d'un intèrpret d'ordres, en aquest cas s'executa en el intèrpret d'ordres actual, però es suprimeix qualsevol efecte sobre l'entorn).

Comandaments de fons -

Si l'operador de control ampersand (&) finalitza una comanda, la shell executa l'ordre de forma asíncrona, és a dir, el shell no espera que la comanda finalitzi abans d'executar el següent comandament.

El format per executar una comanda en segon pla és:

command1 & command2 & …

Si el intèrpret d'ordres no és interactiu, l'entrada estàndard d'un comandament asincrònic s'estableix en / dev / null

Llistes: en general parlen

Una llista és una seqüència de zero o més comandaments separats per línies noves, punts o vectors, i opcionalment acabats per un d'aquests tres caràcters. Les ordres d'una llista s'executen en l'ordre en què estan escrites. Si la comanda és seguida d'un ampersand, el shell comença el comandament i immediatament procedirà al següent comandament; en cas contrari espera que el comandament finalitzi abans de passar al següent.

Operadors de llista de curtcircuits

`` && '' i `` || '' són operadors de llistes AND-OR. `` && '' executa el primer comandament i, a continuació, executa la segona comanda, si l'estat de sortida del primer comandament és zero. `` || '' és similar, però executa la segona comanda si l'estat de sortida del primer comandament no és zero. `` && '' i `` || '' 'tenen la mateixa prioritat.

Flow-Control Constructs: si, mentre que, per, cas

La sintaxi de la comanda if és

si la llista

feu una llista

llista elif

a continuació, llista …

else list

fi

La sintaxi de la comanda while és

mentre que la llista

feu una llista

fet

Les dues llistes s'executen repetidament mentre l'estat de sortida de la primera llista és zero. La comanda fins a la mateixa és similar, però té la paraula fins que en lloc de mentre, la qual cosa fa que es repeteixi fins que l'estat de sortida de la primera llista sigui zero.

La sintaxi de la comanda for command és

per a la variable en la paraula …

feu una llista

fet

Les paraules s'expandeixen i, a continuació, la llista s'executa repetidament amb la variable establerta a cada paraula al seu torn. fer i fer es pot reemplaçar per `` {'' i ``) ''

La sintaxi de la pausa i la comanda continue és

trencar num

continue num

Break remata el número més íntim per als bucles o mentre es duplica. Continueu amb la següent iteració del bucle més íntim. Aquests s'executen com a comandaments integrats.

La sintaxi de la comanda del cas és

paraula del cas a

patró) llista;

esac

El patró pot ser, en realitat, un o més patrons (vegeu els patrons de shell descrits més endavant), separats per `` '' caràcters.

Agrupar comandaments junts

Les ordres també es poden agrupar escrivint

(llista)

o

{llista;

El primer d'ells executa les ordres en un subshell. Les ordres integrades agrupades en una (llista) no afectaran el shell actual. El segon formulari no forquilla una altra capa, de manera que és una mica més eficient. Agrupar comandaments d'aquesta manera us permetrà redirigir la seva sortida com si fossin un únic programa:

{printf hola; printf world n ";}> salutació

Funcions

La sintaxi d'una definició de funció és

nom () comanda

Una definició de funció és una declaració executable; quan s'executa, instal·la una funció anomenada nom i retorna un estat de sortida de zero. Normalment, la comanda és una llista entre `` {'' i ``) ''

Les variables es poden declarar locals en una funció utilitzant un ordre local. Això hauria d'aparèixer com la primera declaració d'una funció, i la sintaxi és

local variable | - …

Local s'implementa com a comandament integrat.

Quan es fa una variable local, hereta el valor inicial i s'exporten i es mostren indicadors de la variable amb el mateix nom en l'àmbit circumdant, si n'hi ha. En cas contrari, la variable es desactiva inicialment. El shell utilitza l'abast dinàmic, de manera que si fa la variable x local per a la funció f, que després crida a la funció g, les referències a la variable x feta a l'interior de g es refereixen a la variable x declarada a l'interior de f, no a la variable global denominat x .

L'únic paràmetre especial que es pot fer local és `` - '' Fer `` - '' local les opcions de shell que es canvien a través de l'ordre set dins de la funció que es restaurarà als seus valors originals quan la funció torni.

La sintaxi de la comanda retorn és

tornar sortir de l'estat

Finalitza la funció d'execució actual. La funció de retorn s'implementa com a comandament integrat.

Variables i paràmetres

El shell manté un conjunt de paràmetres. Un paràmetre denotat per un nom s'anomena variable. Quan s'inicia, el shell converteix totes les variables d'entorn en variables de shell. Es poden establir noves variables mitjançant el formulari

nom = valor

Les variables establertes per l'usuari han de tenir un nom format exclusivament per alfabets, números i guions baixos, el primer dels quals no ha de ser numèric. També es pot denotar un paràmetre per un número o un caràcter especial tal com s'explica a continuació.

Paràmetres posicionals

Un paràmetre de posició és un paràmetre denotat per un número (n> 0). L'intèrpret d'ordres els estableix inicialment als valors dels seus arguments de la línia d'ordres que segueixen el nom de l'script shell. El conjunt (1) builtin també es pot utilitzar per configurar-los o restablir-los.

Paràmetres especials

Un paràmetre especial és un paràmetre denotat per un dels següents caràcters especials. El valor del paràmetre es mostra al costat del seu caràcter.

*

S'expandeix als paràmetres de posició, començant per un. Quan l'expansió es produeix dins d'una cadena de dos dígits, s'expandeix a un sol camp amb el valor de cada paràmetre separat pel primer caràcter delIFS variable, o per a siIFS no està definit.

@

S'expandeix als paràmetres de posició, començant per un.Quan l'expansió es realitza dins de les cometes dobles, cada paràmetre de posició s'expandeix com un argument separat. Si no hi ha paràmetres de posició, l'expansió de @ genera arguments zero, fins i tot quan @ és doble. El que això significa bàsicament, per exemple, és que si $ 1 és `` abc '' i $ 2 és `` def ghi '', llavors Qq $ @ s'amplia als dos arguments:

abc def ghi

#

S'expandeix al nombre de paràmetres de posició.

?

S'expandeix a l'estat de sortida de la canonada més recent.

- (Guió.)

S'expandeix als indicadors de la opció actual (els noms d'opcions de lletra única concatenats en una cadena) tal com s'especifica en la invocació, per l'ordre builtin, o implícitament per l'intèrpret d'ordres.

$

S'expandeix a l'ID del procés del shell invocat. Un subshell conserva el mateix valor de $ que el seu pare.

!

S'expandeix a l'ID del procés de l'ordre de fons més recent executat des del shell actual. Per a un oleoducte, l'identificador del procés és el de l'últim comandament que hi ha al capdavant.

0 (zero).

S'expandeix al nom del shell o shell script.

Expansions de paraules

Aquesta clàusula descriu les diverses ampliacions que es realitzen a les paraules. No totes les expansions es realitzen en cada paraula, tal com s'explica més endavant.

Les ampliacions de Tilde, les ampliacions de paràmetres, les substitucions de comandes, les expansions aritmètiques i les eliminacions de cotitzacions que es produeixen dins d'una sola paraula s'expandeixen a un sol camp. És només una divisió de camp o una extensió de nom de ruta que pot crear diversos camps d'una sola paraula. L'única excepció a aquesta regla és l'expansió del paràmetre especial @ dins de les cometes dobles, tal com s'ha descrit anteriorment.

L'ordre de l'expansió de paraules és:

  1. Expansió de Tilde, Expansió de paràmetres, Substitució de comandaments, Expansió aritmètica (tots aquests es produeixen al mateix temps).

  2. La divisió del camp es realitza en els camps generats pel pas (1) tret que elIFS la variable és nul·la.

  3. Expansió de nom del camí (tret que s'estableixi -f està en vigor).

  4. Eliminació de pressupostos.

El caràcter $ s'utilitza per introduir l'ampliació de paràmetres, la substitució de comandaments o l'avaluació aritmètica.

Expansió de Tilde (substituint el directori personal d'un usuari)

Una paraula que comença amb un caràcter de caràcter no especificat (~) està subjecte a l'expansió de la tilde. Tots els caràcters fins a una barra inclinada (/) o al final de la paraula es tracten com a nom d'usuari i se substitueixen pel directori principal de l'usuari. Si falta el nom d'usuari (com a ~ / foobar), la tilde se substitueix pel valor del INICI variable (el directori principal de l'usuari actual).

Expansió de paràmetres

El format per a l'ampliació de paràmetres és el següent:

$ {expression}

on l'expressió es compon de tots els caràcters fins que la coincidència ``) '' Any ``) '' escapa per una barra invertida o dins d'una cadena citada, i no s'examinen els caràcters d'expansions aritmètiques incrustades, substitucions de comandaments i expansions variables. coincidint amb ``} ''

La forma més simple per a l'ampliació de paràmetres és:

$ {parameter}

El valor, si n'hi ha, del paràmetre és substituït.

El nom o símbol del paràmetre es pot incloure amb claus, que són opcionals excepte per a paràmetres de posició amb més d'un dígit o quan el paràmetre és seguit d'un caràcter que es podria interpretar com a part del nom. Si es produeix una expansió de paràmetre dins de les cometes dobles:

  1. L'expansió del nom del camí no es realitza en els resultats de l'expansió.

  2. La divisió de camps no es realitza en els resultats de l'expansió, amb l'excepció de @.

A més, es pot modificar una expansió de paràmetres mitjançant un dels formats següents.

$ {paràmetre: -word}

Utilitza valors predeterminats. Si el paràmetre no està definit o nul, l'extensió de la paraula està substituïda; en cas contrari, el valor del paràmetre està substituït.

$ {parameter: = word}

Assigna valors predeterminats. Si el paràmetre no està definit o nul, l'extensió de paraula s'assigna al paràmetre. En tots els casos, el valor final del paràmetre és substituït. Només es poden assignar variables, no paràmetres posicionals o paràmetres especials.

$ {paràmetre:? paraula}

Indiqueu un error si és Null o Unset. Si el paràmetre no està definit o nul, l'extensió de la paraula (o un missatge que indica que no s'estableix si s'omet la paraula) s'escriu en un error estàndard i la casella es surt amb un estat de sortida no diferent. En cas contrari, el valor del paràmetre està substituït. Una carcassa interactiva no necessita sortir.

$ {paràmetre: + paraula}

Utilitza el valor alternatiu. Si el paràmetre no està definit o nul, el valor nul és substituït; en cas contrari, l'ampliació de la paraula està substituïda.

En les ampliacions de paràmetres que es mostren anteriorment, l'ús del còlon en el format resulta en una prova per a un paràmetre que no es posa o no; L'omissió del còlon dóna com a resultat una prova d'un paràmetre que només s'estableix.

$ {# paràmetre}

Longitud de cadena. La longitud dels caràcters del valor del paràmetre.

Les següents quatre varietats d'expansió de paràmetres proporcionen el processament de la subcadena. En cada cas, s'utilitza la notació de coincidència de patrons (vegeu els patrons de Shell), en comptes de la notació d'expressió regular, per avaluar els patrons. Si el paràmetre és * o @, el resultat de l'expansió no està especificat. La inclusió de la cadena d'expansió de paràmetres completa en cometes dobles no provoca que es mostrin les quatre varietats següents de caràcters de patrons, mentre que citar caràcters a les claus té aquest efecte.

$ {paràmetre% paraula}

Treure el patró de sufix més petit. La paraula s'expandeix per produir un patró. L'expansió del paràmetre resulta en el paràmetre, amb la part més petita del sufix coincident amb el patró eliminat.

$ {paràmetre %% word}

Treure el patró de sufix més gran.La paraula s'expandeix per produir un patró. L'expansió del paràmetre dóna lloc al paràmetre, amb la part més gran del sufix coincident amb el patró eliminat.

$ {paràmetre # paraula}

Treure el patró de prefix més petit. La paraula s'expandeix per produir un patró. L'expansió del paràmetre resulta en el paràmetre, amb la part més petita del prefix corresponent amb el patró eliminat.

$ {paràmetre ## paraula}

Treure el patró de prefix més gran. La paraula s'expandeix per produir un patró. L'expansió del paràmetre resulta en el paràmetre, amb la part més gran del prefix corresponent amb el patró eliminat.

Substitució de comandaments

La substitució de comandaments permet substituir la sortida d'una comanda en lloc del nom de la comanda. La substitució d'ordres es produeix quan el comandament s'inclou de la manera següent:

$ (ordre)

o Po `` backquoted '' versió Pc:

`command`

L'intèrpret d'ordres expandeix la substitució de comandaments executant la comanda en un entorn subshell i substitueix la substitució de comandaments amb la sortida estàndard de la comanda, eliminant seqüències d'una o més s al final de la substitució. (Incrustat s abans del final de la sortida no s'eliminen; No obstant això, durant la divisió de camp, es pot traduir a s, depenent del valor deIFS i citant que està en vigor.)

Expansió aritmètica

L'expansió aritmètica proporciona un mecanisme per avaluar una expressió aritmètica i substituir el seu valor. El format d'expansió aritmètica és el següent:

$ ((expressió))

L'expressió es tracta com si es tractés de cometes dobles, llevat que una cita doble dins de l'expressió no es tracti especialment. L'intèrpret d'ordres expandeix tots els tokens en l'expressió per a l'ampliació de paràmetres, la substitució de comandaments i l'eliminació de quotes.

A continuació, el casquet tracta aquest com una expressió aritmètica i substitueix el valor de l'expressió.

Divisió d'espai blanc (divisió de camps)

Després de l'ampliació de paràmetres, la substitució de comandaments i l'expansió aritmètica, el shell explora els resultats d'expansions i substitucions que no es van produir en cometes dobles per a la divisió de camps i es poden generar diversos camps.

La closca tracta cada caràcter de laIFS com a delimitador i utilitzeu els delimitadors per dividir els resultats de l'ampliació de paràmetres i la substitució de comandaments en camps.

Expansió de nom del camí (generació de noms de fitxer)

A menys que -f S'estableix la bandera, la generació de noms de fitxer es realitza després de completar la divisió de paraules. Cada paraula es veu com una sèrie de patrons, separats per barra inclinada. El procés d'expansió substitueix la paraula amb els noms de tots els fitxers existents, els noms dels quals es poden formar reemplaçant cada patró amb una cadena que coincideixi amb el patró especificat. Hi ha dues restriccions: en primer lloc, un patró no pot coincidir amb una cadena que contingui una barra inclinada, i segon, un patró no pot coincidir amb una cadena que comença amb un període, tret que el primer caràcter del patró sigui un període. A la secció següent es descriuen els patrons utilitzats tant per l'Expansió de Nom de Path com per a l'ordre Case (1).

Patrons de shell

Un patró consisteix en caràcters normals, que coincideixen, i meta-caràcters. Els meta-caràcters són ``! '' `` * '' ``? '' I `` '' Aquests caràcters perden els seus significats especials si són citats. Quan es realitza la substitució de comandaments o de variables i el signe de dòlar o les cometes posteriors no són dobles, el valor de la variable o la sortida de la comanda s'escaneja per a aquests caràcters i es converteixen en meta-caràcters.

Un asterisc (`` * '') coincideix amb qualsevol cadena de caràcters. Un signe d'interrogació coincideix amb qualsevol caràcter únic. Un claudàtor esquerre (`` '') introdueix una classe de caràcter. El final de la classe de caràcter s'indica amb un (``) '') si falta el ``) '', llavors el `` '' coincideix amb un `` '' en lloc d'introduir una classe de caràcter. Una classe de caràcters coincideix amb qualsevol dels caràcters entre els claudàtors. Es pot especificar un rang de caràcters amb un signe menys. La classe de caràcters es pot complementar fent un signe d'admiració el primer caràcter de la classe de caràcter.

Per incloure un `` '' en una classe de caràcters, converteix-lo en el primer caràcter que apareix (després del ``! '' Si n'hi ha). Per incloure un signe menys, configureu-lo com el primer o últim caràcter que es mostra

Builtins

Aquesta secció mostra les ordres integrades que es construeixen perquè necessiten realitzar una operació que no es pot realitzar mitjançant un procés diferent. A més d'aquests, hi ha diversos comandaments que es poden construir per obtenir l'eficiència (p. Ex., Eco 1).

:

Un comandament null que retorna un valor de sortida 0 (veritable).

. dossier

Les comandes del fitxer especificat són llegides i executades pel shell.

àlies nom = cadena …

Si nom = cadena s'especifica, el shell defineix l'àlies nom amb valor cadena Si és just nom s'especifica, el valor de l'àlies nom està imprès. Sense arguments, elàlies builtin imprimeix els noms i valors de tots els àlies definits (vegeuunalias)

bg feina …

Continueu els treballs especificats (o el treball actual si no es donen feines) en segon pla.

comandament ordre arg …

Executeu l'ordre builtin especificada. (Això és útil quan teniu una funció de shell amb el mateix nom que una ordre builtin).

cd directori

Canvieu al directori especificat (per defecte$ HOME) Si hi ha una entrada per aCDPATH apareix a l'entorn de lacd ordre o la variable shellCDPATH s'estableix i el nom del directori no comença amb una barra inclinada, a continuació, els directoris llistats aCDPATH es cercarà el directori especificat. El format deCDPATH és el mateix que el deCAMÍ En un intèrpret interactiu, elcd la comanda imprimirà el nom del directori que realment ha canviat si això és diferent del nom que l'usuari va donar. Aquests poden ser diferents ja sigui perquè elCDPATH es va utilitzar el mecanisme o perquè es va creuar un enllaç simbòlic.

eval corda …

Concatenar tots els arguments amb espais. Torneu a analitzar i executar la comanda.

exec ordre arg …

A menys que s'omet el comandament, el procés de shell es reemplaça amb el programa especificat (que ha de ser un programa real, no un shell integrat ni una funció). Qualsevol redirecció de laexecLes ordres es marquen com a permanents, de manera que no es desfà quan laexec acaba el comandament.

sortir estat de sortida

Finalitzeu el procés de shell. Si estat de sortida es dóna que s'utilitza com a estat de sortida del shell; en cas contrari, s'utilitza l'estat de sortida de l'ordre anterior.

exportació nom…

exportació -p

Els noms especificats s'exporten de manera que apareguin a l'entorn dels comandaments posteriors. L'única manera d'exportar una variable és desactivar-la. El shell permet establir el valor d'una variable al mateix temps que s'exporta escrivint

nom d'exportació = valor

Sense arguments, la comanda d'exportació enumera els noms de totes les variables exportades. Amb el -popció especificada que la sortida serà formateada adequadament per a ús no interactiu.

fc-e editor primer últim

fc -l -nr primer últim

fc -s antic = nou primer

Elfc llistes integrades o edicions i reexecutes, comandes prèviament introduïdes en un intèrpret d'ordres interactiu.

-i editor

Utilitzeu l'editor nomenat per l'editor per editar les ordres. La cadena de l'editor és un nom de comanda, subjecte a la cerca a través de laCAMÍ variable. El valor en elFCEDIT La variable s'utilitza com a valor predeterminat quan:e no s'especifica. SiFCEDIT és nul o no s'estableix, el valor de laEDITOR S'utilitza la variable. SiEDITOR és nul o no, ed (1) s'utilitza com a editor.

-l (ell)

Llista els comandaments en comptes d'invocar un editor en ells. Les ordres estan escrites en la seqüència que indiquen els primers i últims operands, que es veuen afectats per:r amb cada ordre precedit pel número de comanda.

-n

Suprimiu els nombres de comandaments quan feu una llista amb -l.

-r

Inverteixi l'ordre de les ordres enumerades (amb -l o editat (amb cap d'ells)l ni -s)

-s

Torneu a executar l'ordre sense invocar un editor.

primer

últim

Seleccioneu les ordres a la llista o a editar. El nombre de comandaments anteriors als quals es pot accedir està determinat pel valor delHISTSIZE variable. El valor del primer o de l'últim o dels dos és un dels següents:

+ número

Un número positiu que representa un número de comanda; Els números de comanda es poden mostrar amb el -l opció.

-nombre

Un nombre decimal negatiu que representa la comanda que s'executava nombre d'ordres prèviament. Per exemple, -1 és l'ordre immediatament anterior.

cadena

Una cadena que indica l'ordre més recentment introduïda que comença amb aquesta cadena. Si el vell = operant nou no s'especifica també amb -s el format de cadena del primer operand no pot contenir un signe d'igual incrustació.

Les següents variables d'entorn afecten l'execució de fc:

FCEDIT

Nom de l'editor a utilitzar.

HISTSIZE

El nombre de comandaments anteriors que són accessibles.

F g treball

Mou la feina especificada o el treball actual al primer pla.

getopts optstring var

ElPOSIX getopts ordre, no confondre amb el Bell Labs - getopt derivat (1).

El primer argument ha de ser una sèrie de lletres, cadascuna de les quals pot ser seguida opcionalment per un còlon per indicar que l'opció requereix un argument. La variable especificada s'estableix a l'opció analitzada.

Elgetopts l'ordre deprecates de la utilitat getopt (1) més antiga a causa del seu tractament d'arguments que contenen espais en blanc.

Elgetopts es pot utilitzar per obtenir opcions i els seus arguments des d'una llista de paràmetres. Quan s'invoca,getopts col·loca el valor de la següent opció de la cadena d'opcions a la llista de la variable de shell especificada per var i és l'índex de la variable shellOPTIND Quan es invoca el intèrpret d'ordres,OPTIND s'inicialitza a 1. Per a cada opció que requereix un argument, elgetopts builtin la col·locarà a la variable shellOPTARG Si no es permet una opció en el optstring llavorsOPTARG es desactivarà.

optstring és una cadena de lletres d'opció reconegudes. Si una lletra és seguida per dos punts, s'espera que l'opció tingui un argument que pot o no estar separat d'ell per espai en blanc. Si no es troba un caràcter d'opció on s'espera,getopts establirà la variable var a un ``? ''getopts després s'establiràOPTARG i escriu la sortida a l'error estàndard. En especificar un coma com a primer caràcter de optstring s'ignoraran tots els errors.

Es retorna un valor zero quan s'aconsegueix l'última opció. Si no hi ha arguments restants,getopts s'establirà var a l'opció especial, `` - '', en cas contrari, s'establiran var a ``? ''

El següent fragment de codi mostra com es pot processar els arguments d'una ordre que pot prendre les opcions a i b i l'opció c que requereix un argument.

mentre que getopts abc: ffercas $ f ina | b) flag = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; sortida 1 ;;esacfetshift `expr $ OPTIND - 1`

Aquest codi acceptarà qualsevol de les següents com a equivalent:

fitxer d'arxiu cmd -argumentarfitxer de fitxer cmd-a-c argcmd -carg -un fitxer de fitxercmd-a-càrrega - fitxer

hash -rv comandament…

El shell manté una taula hash que recorda les ubicacions dels comandaments. Sense arguments, lahash comanda imprimeix els continguts d'aquesta taula. Entrades que no s'han vist des de l'últimcd Les ordres estan marcades amb un asterisc; és possible que aquestes entrades siguin invàlides.

Amb arguments, elhash comanda elimina les ordres especificades de la taula hash (tret que siguin funcions) i, a continuació, les localitzi. Amb el -v opció, el hash imprimeix les ubicacions de les ordres tal com les troba. El -r L'opció fa que l'ordre hash elimini totes les entrades de la taula hash excepte les funcions.

treballant treball

Imprimiu la identificació del procés dels processos del lloc de treball. Si el treball S'omet l'argument, s'utilitza el treball actual.

treballs

Aquesta ordre mostra tots els processos de fons que són fills del procés de shell actual.

pwd

Imprimiu el directori actual. L'ordre builtin pot diferir del programa del mateix nom perquè l'ordre builtin recorda el que el directori actual és en lloc de tornar a compilar-lo cada vegada. Això fa que sigui més ràpid. Tanmateix, si es canvia el nom del directori actual, la versió integrada depwd continuarà imprimint el nom antic del directori.

llegir-p prompt -r variable …

L'indicatiu s'imprimeix si el -p S'ha especificat l'opció i l'entrada estàndard és un terminal. Després es llegeix una línia de l'entrada estàndard. La nova línia final s'elimina de la línia i la línia es divideix tal com es descriu a la secció sobre la divisió de paraules a dalt, i les peces s'assignen a les variables en ordre. Cal especificar com a mínim una variable. Si hi ha més peces que variables, les peces restants (juntament amb els caràcters a)IFS que els separava) s'assignen a l'última variable. Si hi ha més variables que peces, les variables restants s'assignen a la cadena nul·la. Elllegir El valor incorporat indicarà l'èxit a menys que es trobi a EOF a l'entrada, en aquest cas es torna a fallar.

Per defecte, llevat que el -r S'ha especificat l'opció, la barra invertida `` '' actua com a caràcter d'escapament, fent que el següent caràcter es tracti literalment. Si una barra invertida és seguida d'una línia nova, la barra invertida i la línia nova se suprimiran.

Llegeix només nom…

readonly -p

Els noms especificats es marquen com a només lectura, de manera que no es poden modificar ni esborrar posteriorment. L'intèrpret d'ordres permet establir el valor d'una variable al mateix temps que es marca com a només lectura mitjançant l'escriptura

readonly name = value

Sense arguments, la comanda readonly enumera els noms de totes les variables de només lectura. Amb el -p opció especificada que la sortida serà formateada adequadament per a ús no interactiu.

conjunt { -opcions | + opcions | - arg …

Elconjunt comanda fa tres funcions diferents.

Sense arguments, enumera els valors de totes les variables de shell.

Si es donen opcions, estableix els indicadors d'opció especificats o els aclareix tal com es descriu a la secció anomenada Processament de la llista d'arguments Sx.

El tercer ús de l'ordre set és establir els valors dels paràmetres de posició del shell en els arguments especificats. Per canviar els paràmetres de posició sense canviar cap opció, utilitzeu `` - '' com el primer argument a establir. Si no hi ha arguments disponibles, l'ordre del conjunt esborrarà tots els paràmetres de posició (equivalent a executar `` canviar $ $ ''. ''

valor variable

Assigna valor a la variable. (En general, és millor escriure variable = valor en lloc d'utilitzarsetvar setvarestà pensat per utilitzar-se en funcions que assignen valors a variables, els noms es passen com a paràmetres.)

canvi n

Canvieu els paràmetres de posició n vegades. Acanvi estableix el valor de $1 al valor de $2 el valor de $2 al valor de $3 i així successivament, disminuint el valor de $# per un. Si n és major que la quantitat de paràmetres de posició,canvi emetrà un missatge d'error i sortirà amb l'estat de retorn 2.

temps

Imprimiu els temps d'usuari i sistema acumulats per a l'intèrpret d'ordres i per a processos executats des del intèrpret d'ordres. L'estat de devolució és 0.

trampa acció senyal …

Causa que l'intèrpret d'ordres analitzi i executi l'acció quan es rebi qualsevol de les senyals especificades. Les senyals s'especifiquen per un número de senyal. Si senyal és0 l'acció s'executa quan surt la closca. acció pot ser nul o `` - '' el primer fa que se ignori el senyal especificat i aquest últim fa que es prenguin les accions predeterminades. Quan el shell esborreu un subshell, restablirà els senyals atrapats (però no ignorats) a l'acció predeterminada. Eltrampa La comanda no té efecte en els senyals ignorats en l'entrada al shell.

escriu nom …

Interpreteu cada nom com a comandament i imprimiu la resolució de la cerca d'ordres. Les possibles resolucions són: paraula clau de shell, àlies, integració de shell, comandament, àlies de seguiment i no trobat. Per àlies s'imprimeix l'expansió d'àlies; per comandes i àlies seguits s'imprimeix el camí complet de la comanda.

ulimit-H -S -a -tfdscmlpn valor

Consulta o estableix els límits durs o bruts dels processos o estableix nous límits.L'elecció entre el límit dur (que no es pot violar cap procés i que no es pot augmentar una vegada que s'ha reduït) i el límit suau (que provoca que els processos siguin senyalitzats, però no necessàriament morts i que es puguin augmentar) es fa amb aquestes banderes:

-H

establir o consultar límits difícils

-S

establir o consultar límits suaus. Si cap d'ells -H ni -S s'especifica, es mostra el límit suau o tots dos límits s'estableixen. Si s'especifiquen ambdues, guanyarà l'últim.

El límit que cal interrogar o configurar, llavors, es trifica especificant qualsevol d'aquests indicadors:

-a

Mostra tots els límits actuals

-t

mostra o estableix el límit del temps de la CPU (en segons)

-f

mostra o estableix el límit en el fitxer més gran que es pot crear (en blocs de 512 bytes)

-d

mostrar o establir el límit en la mida del segment de dades d'un procés (en kilobytes)

-s

mostra o estableix el límit en la mida de la pila d'un procés (en kilobytes)

-c

mostra o estableix el límit de la mida del dipòsit del nucli més gran que es pot produir (en blocs de 512 bytes)

-m

mostra o estableix el límit de la memòria física total que pot ser utilitzat per un procés (en kilobytes)

-l

mostra o estableix el límit de la quantitat de memòria que un procés pot bloquejar amb mlock (2) (en kilobytes)

-p

mostra o estableix el límit en la quantitat de processos que aquest usuari pot tenir alhora

-n

mostra o estableix el límit en els fitxers de número que pot obrir un procés alhora

Si no s'especifica cap d'aquests, és el límit de la mida del fitxer que es mostra o s'estableix. Si s'especifica el valor, el límit s'estableix en aquest número; en cas contrari es mostrarà el límit actual.

Els límits d'un procés arbitrari es poden mostrar o establir utilitzant la utilitat sysctl (8).

umask màscara

Establiu el valor de umask (vegeu umask (2)) al valor octal especificat. Si s'omet l'argument, s'imprimeix el valor umask.

unalias-a nom

Si nom s'especifica, el shell suprimeix aquest àlies. Si -a s'especifica, s'eliminen tots els àlies.

sense configurar nom…

Les variables i funcions especificades no estan establertes i no s'exporten. Si un nom determinat correspon tant a una variable com a una funció, tant la variable com la funció no s'estableixen.

espera treball

Espereu que la tasca especificada es completi i retorni l'estat de sortida de l'últim procés en el treball. Si s'omet l'argument, espereu que es completin tots els treballs i que retorni un estat de sortida de zero.

Edició d