Cendra - Comando Linux - Comando Unix

NOM

sh - command intèrpret ( shell )

SINOPSI

sh [- / + aCefnuvxIimqsVEbc ] [- o nom llarg ] -words [ target ... ]

DESCRIPCIÓ

Sh és l'intèrpret d'ordres estàndard del sistema. La versió actual de sh està en procés de ser modificada per ajustar-se a les especificacions POSIX 1003.2 i 1003.2a del shell. 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 s'incorporen a aquesta casilla les característiques designades per POSIX més algunes extensions de Berkeley. Esperem que la compatibilitat amb POSIX sigui alliberada pel 4.4. BSD. 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 l'indicador - i està establert), i l'opció - c 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'entorn ENV s'estableix a l'entrada d'un intèrpret d'ordres o s'estableix en el fitxer .profile d'un intèrpret d'ordres d'inici de sessió, el shell següent llegeix les ordres del fitxer denominat ENV. Per tant, un usuari hauria de posar comandes que només s'executaran a el temps d'inici de sessió al fitxer .profile i les ordres que s'executen per cada shell dins del fitxer ENV . Per establir la variable ENV en un 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. Atès que el fitxer ENV es llegeix per cada invocació del shell, incloent scripts shell i shells no interactius, el paradigma següent és útil per restringir les ordres del fitxer ENV 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 l'opció - o . El nom del conjunt s'ofereix 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).

-un 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 èxit

Si no és interactiu, sortiu immediatament si alguna ordre no provada falla. L'estat de sortida d'una ordre es considera que es prova explícitament si l'ordre s'utilitza per controlar un si elif mentre o fins i tot si l'ordre és l'operació 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.

-un nom propi

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 fitxer silenciós

Si s'han configurat les opcions - v or - x , no les apliqui quan llegiu els fitxers d'inicialització, que són / etc / profile.profile i el fitxer especificat per la variable d'entorn ENV .

-Jo ignoro

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é efecte quan s'estableix una vegada que el shell ja s'ha començat a executar (és a dir, amb el conjunt (1)).

-V vi

Activa 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 (desactiva - 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:

! Ta elif Ta fi Ta mentre que Ta cas

en cas contrari Ta per Ta llavors Ta {Ta}

do Ta done Ta fins 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

El shell interpreta les paraules que llegeix d'acord amb un llenguatge, l'especificació està fora de l'àmbit d'aquesta pàgina d'home (consulteu el BNF al document POSIX 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ó abans 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 l'opció C.

[n] >> fitxer

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

[n]

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 "nombre màgic", la representació ASCII és "#!", Llavors execve (2) retorna Er ENOEXEC llavors) el 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. L'intèrpret de comandaments fa una cerca de cada entrada a PATH al seu torn per l'ordre. El valor de la variable PATH ha 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 provoca que la llista AND-OR-list precedent (descrita a continuació) s'executi de manera 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 de la variable IFS , o per un si IFS no està establert.

@

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ó de camps es realitza als camps generats pel pas (1) tret que la variable IFS sigui nul·la.
  3. Expansió de nom del camí (tret que s'estableixi el conjunt - f ).
  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 d'usuari 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 de la variable HOME (el directori principal de l'usuari actual).

Expansió de paràmetres

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

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:

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.

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.

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.

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.

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.

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.

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.

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.

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.

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 reemplaça 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ó. (Inserides s abans del final de la sortida no s'eliminen, però, durant la divisió de camps, es poden traduir a s, depenent del valor de IFS i citant que estigui vigent).

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 l' IFS com a delimitador i utilitza els delimitadors per dividir els resultats de l'ampliació de paràmetres i la substitució de comandaments en els camps.

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

Llevat que s'estableixi l'indicador - f , 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 (per exemple, 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 s'especifica name = string , el shell defineix el nom del àlies amb la cadena de valor Si s'especifica el nom , s'imprimeix el valor del nom d' àlies. Sense arguments, l' àlies incorporat imprimeix els noms i valors de tots els àlies definits (vegeu unalias)

bg [ treball] ...

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

ordre command 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 apareix una entrada per a CDPATH en l'entorn de l'ordre cd o la variable de closca CDPATH està establerta i el nom del directori no comença amb una barra inclinada, es cercaran els directoris llistats a CDPATH per al directori especificat. El format de CDPATH és el mateix que el de PATH En un intèrpret d'ordres interactiu, la comanda cd 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è s'ha utilitzat el mecanisme CDPATH o perquè s'ha creu un enllaç simbòlic.

cadena d' avaluació ...

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

exec [ command 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 l'ordre exec es marca com a permanent, de manera que no es desfà quan finalitza l'ordre exec .

sortir [ sortir de l' estat ]

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

nom d' exportació ...

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 l'opció - p especificada, la sortida es formatarà adequadament per a ús no interactiu.

fc [- e editor ] [ primer [ últim ]]

fc -l [- nr ] [ primer [ últim ]]

fc -s [ vell = nou ] [ primer ]

El fc builtin enumera, o edita i torna a executar, les ordres introduïdes prèviament 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 la variable PATH . El valor de la variable FCEDIT s'utilitza com a valor predeterminat quan no s'especifica e . Si FCEDIT és nul o no s'estableix, s'utilitza el valor de la variable EDITOR . Si EDITOR é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, com afectada 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 dels comandaments enumerats (amb - l o editats (amb ni - 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 determina el valor de la variable HISTSIZE . 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 l'opció - l .

-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 = nou operant no s'especifica també amb - s, la cadena del primer operand no pot contenir un signe igual integrat.

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.

fg [ job ]

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

getopts optstring var

La comanda POSIX getopts , que no s'ha de confondre amb els Labors Bell (bypass obtinguts) (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.

L'ordre getopts deprava la utilitat getopt (1) més antiga a causa del seu tractament d'arguments que contenen espais en blanc.

Els getopts builtin es poden utilitzar per obtenir opcions i els seus arguments des d'una llista de paràmetres. Quan s'hi 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 índex de la variable de shell OPTIND Quan s'inclou el shell, OPTIND s'inicialitza a 1. Per a cada opció que requereixi un argument, els getopts builtin la col·locaran a la variable shell shell OPTARG Si no es permet una opció a la optstring , OPTARG quedarà desactivada.

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 en ``? '' Getopts llavors desactiva OPTARG i escriu la sortida a l'error estàndard. En especificar un coma com el primer caràcter de optstring, tots els errors seran ignorats.

Es retorna un valor zero quan s'aconsegueix l'última opció. Si no hi ha cap argument restant, getopts establirà var a l'opció especial, `` - '' altrament, establirà 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: f
fer
cas $ f in
a | b) flag = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; sortida 1 ;;
esac
fet
shift `expr $ OPTIND - 1`

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

fitxer d'arxiu cmd -argumentar
fitxer de fitxer cmd-a-c arg
cmd -carg -un fitxer de fitxer
cmd-a-càrrega - fitxer

hash -rv command ...

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

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

jobid [ job ]

Imprimiu la identificació del procés dels processos del lloc de treball. Si s'omet l'argument del treball, 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 de pwd continuarà imprimint el nom antic del directori.

llegeix [- p indica ] [- r ] variable ...

L'indicatiu s'imprimeix si s'especifica l'opció- p 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 de IFS que els separaven) s'assignen a l'última variable. Si hi ha més variables que peces, les variables restants s'assignen a la cadena nul·la. La lectura incorporada indicarà l'èxit a menys que es trobi a EOF a l'entrada, en aquest cas es retorna un fracàs.

Per defecte, tret que s'especifica l'opció- r , la barra invertida `` \ '' actua com a caràcter d'escapament, cosa que provoca 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.

nom de lectura ...

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 l'opció - p especificada, la sortida es formatarà adequadament per a ús no interactiu.

establir [{- opcions | + opcions | - arg ... ]

L'ordre set executa 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 comptes d'utilitzar setvar setvar es pretén que s'utilitzi en funcions que assignen valors a variables que passen els noms com a paràmetres.)

canviar [ n ]

Canvieu els paràmetres de posició n vegades. Un canvi 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ó, el canvi produirà 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.

senyal d' acció de trampa ...

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 el senyal és 0, l'acció s'executa quan surt la casella. l'acció pot ser nul·la o `` - '' la primera 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. La comanda trampa no té efecte en les senyals que s'han ignorat 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 no s'especifica - H ni - S , es mostrarà el límit suau o tots dos límits s'establiran. 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 ] [ name ]

Si s'especifica el nom , el complement suprimeix aquest àlies. Si s'especifica a, s'esborren tots els àlies.

esborreu el 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 [ feina ]

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ó de línia de comandaments

Quan sh s'utilitza de manera interactiva des d'un terminal, la comanda actual i l'historial de comandaments (vegeu fc en Sx Builtins) es poden editar usant l'edició de línia de comandaments en mode vi. Aquesta manera utilitza comandaments, descrits a continuació, similars a un subconjunt dels descrits a la pàgina de vi man. L'ordre 'set' -o vi habilita l'edició en mode vi i col·loqueu sh en el mode d'inserció de vi. Amb vi mode habilitat, sh es pot canviar entre el mode d'inserció i el mode d'ordre. L'editor no està descrit íntegrament aquí, però serà en un document posterior. És similar a la de vi: escrivint Aq ESC us llançarà al mode d'ordre VI. En fer clic a Aq retornar al mode d'ordre passarà la línia al shell.

Important: utilitzeu l' ordre man ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.