Cinzas - Comando Linux - Comando Unix

NAME

intérprete de comandos sh ( shell )

SINOPSE

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

DESCRICIÓN

Sh é o intérprete de comando estándar para o sistema. A versión actual de sh está en proceso de ser modificada para cumprir coas especificacións POSIX 1003.2 e 1003.2a do shell. Esta versión ten moitas características que fan que pareza semellante nalgúns aspectos ao shell de Korn, pero non é un clon de shell Korn (ver ksh (1)). Só se incorporan a este shell as características designadas por POSIX e algunhas extensións de Berkeley. Esperamos a conformidade de POSIX polo tempo que se libera BSD 4.4. Esta páxina do home non pretende ser un tutorial ou unha especificación completa do shell.

Visión xeral

O shell é un comando que le as liñas desde un ficheiro ou o terminal, interprétaas e, xeralmente, executa outros comandos. É o programa que se está executando cando un usuario inicia sesión no sistema (aínda que un usuario pode seleccionar unha shell diferente co comando chsh (1)). O shell implementa un idioma que ten construcións de control de fluxo, unha facilidade de macro que ofrece unha variedade de funcións ademais do almacenamento de datos, xunto co historial incorporado e as capacidades de edición de liña. Incorpora moitas características para axudar o uso interactivo e ten a vantaxe de que o linguaxe interpretativo é común tanto para uso interactivo como non interactivo (scripts shell). É dicir, os comandos poden escribirse directamente no shell de execución ou poden ser colocados nun ficheiro e executar o ficheiro directamente polo shell.

Invocación

Se non hai args e se a entrada estándar da shell está conectada a un terminal (ou se a marca - i está configurada) e a opción - c non está presente, o shell é considerado como un intérprete interactivo. Un shell interactivo generalmente pide antes de cada comando e manexa os erros de programación e comando de forma diferente (como se describe a continuación). Cando se inicia por primeira vez, o shell inspecciona o argumento 0, e se comeza cun guión "-", o shell tamén se considera unha shell de inicio de sesión. Isto normalmente faise automaticamente polo sistema cando o usuario accede por primeira vez. Un shell de inicio de sesión le primeiro comandos dos ficheiros / etc / profile e .profile se existen. Se a variábel de entorno ENV está configurada na entrada dun intérprete de comandos ou está configurada no ficheiro .profile dun intérprete de inicio de sesión, o intérprete seguinte le comandos do ficheiro nomeado en ENV Polo tanto, un usuario debe poñer ordes que só se executarán a o tempo de inicio de sesión no ficheiro .profile e os comandos que se executan para cada shell dentro do ficheiro ENV . Para configurar a variable ENV en algún ficheiro, coloque a seguinte liña no seu ficheiro .profile do seu directorio persoal

ENV = $ HOME / .shinit; exportar ENV

substituíndo a `` .shinit '' calquera nome de ficheiro que desexe. Xa que o ficheiro ENV é lido para cada invocación do shell, incluíndo scripts shell e shells non interactivos, o seguinte paradigma é útil para restrinxir comandos no ficheiro ENV a invocacións interactivas. Comandos de lugar dentro do `` caso '' e `` esac '' a continuación (estes comandos descríbense máis tarde):

caso $ - in * i *)

# comandos para uso interactivo só

...

esac

Se se especificaron os argumentos da liña de comandos ademais das opcións, o shell trata o primeiro argumento como o nome dun ficheiro desde o que ler os comandos (un shell script) e os argumentos restantes son definidos como parámetros de posición do shell ($ 1 , $ 2, etc.). Se non, o shell le comandos da súa entrada estándar.

Procesamento da lista de argumentos

Todas as opcións de letra única teñen un nome correspondente que pode ser usado como argumento para a opción - o . O nome de set- o proporciónase xunto á opción de letra única na descrición a continuación. A especificación dun dash `` - '' activa a opción, mentres se usa un plus`` + '' desactiva a opción. As seguintes opcións pódense configurar desde a liña de comandos ou co set (1) builtin (descrito máis tarde).

-a allexport

Exportar todas as variables asignadas a. (UNIMPLEMENTED para 4.4alpha)

-c

Ler comandos desde a liña de comandos. Non se ler ningún comando desde a entrada estándar.

-C noclobber

Non sobrescriba os ficheiros existentes con ``> '' (UNIMPLEMENTED para 4.4alpha)

-e éxito

Se non é interactivo, saia inmediatamente se algún comando non probado falla. O estado da saída dun comando considérase probado explícitamente se o comando se usa para controlar un elif mentres ou se o comando é o operando da esquerda dun operador `` && '' ou `` || ''.

-f noglob

Desactivar a expansión do nome da ruta .

-n noexec

Se non está interactivo, lea os comandos pero non os execute. Isto é útil para comprobar a sintaxe dos scripts shell.

-ou nome

Escribe unha mensaxe no erro estándar ao tentar expandir unha variable que non está configurada, e se o shell non é interactivo, saia inmediatamente. (UNIMPLEMENTED para 4.4alpha)

-v verbose

O shell escribe a súa entrada ao erro estándar xa que se le. Útil para depurar.

-x xtrace

Escribe cada comando para o erro estándar (precedido por un `+ 'antes de ser executado. Útil para depurar.

-Q ficheiro tranquilo

Se se fixeron as opcións - v ou - x , non se apliquen ao ler os ficheiros de inicialización, sendo / etc / profile .profile eo ficheiro especificado pola variable de ambiente ENV .

-I ignoreeof

Ignore EOF da entrada cando é interactivo.

-i interactivo

Forza o shell a comportarse de forma interactiva.

monitor m

Activar o control do traballo (configurar automaticamente cando está interactivo).

-s stdin

Ler ordes da entrada estándar (configúrase automaticamente se non hai ningún argumento de ficheiro). Esta opción non ten efecto cando se establece despois de que o shell xa comezou a executarse (isto é, co set (1)).

-V vi

Activa o editor vi (1) de liña de comas incorporado (desactiva - E se foi configurado).

-E emacs

Habilita o editor de liña de comando emacs (1) integrado (desactívase - V se foi configurado).

-b notificar

Habilita a notificación asíncrona de finalización do traballo en segundo plano. (UNIMPLEMENTED para 4.4alpha)

Estrutura léxica

O shell le a entrada en termos de liñas dun ficheiro e divídea en palabras en espazos en branco (espazos en branco e pestañas) e en certas secuencias de caracteres que son especiais para o shell chamado `` operadores ''. Hai dous tipos de operadores: operadores de control e operadores de redirección (o seu significado é discutido posteriormente). A continuación amósase unha lista de operadores:

"Operadores de control:"

& && (); ;; | ||

"Operador de redireccionamento:"

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

Citando

A cotización úsase para eliminar o significado especial de determinados caracteres ou palabras no shell, como operadores, espazos en branco ou palabras clave. Existen tres tipos de citas: comiñas simples combinadas, comiñas dobres combinadas e barra invertida.

Barra invertida

Unha barra invertida conserva o significado literal do seguinte carácter, con excepción da nova liña Aq. Unha barra invertida anterior a unha nova liña Aq trátase como unha continuación de liña.

Citas simples

Os caracteres encerrados en comiñas simples conservan o significado literal de todos os caracteres (excepto as comiñas simples, polo que é imposible poñer comiñas únicas nunha cadea cunha única cita).

Cuotas dobres

Os caracteres encerrados dentro de comiñas dobres preservan o significado literal de todos os caracteres, excepto dollarsign ($) backquote (`) e backslash (\). A barra invertida entre comiñas dobres é históricamente rara e serve para citar só os seguintes caracteres:

$ `\

Se non, permanece literal.

Palabras reservadas

As palabras reservadas son palabras que teñen un significado especial para o shell e son recoñecidas ao comezo dunha liña e despois dun operador de control. As seguintes son palabras reservadas:

! Ta elif Ta fi Ta mentres o caso Ta

outra vez Ta para Ta entón Ta {Ta}

facer Ta ata Ta ata Ta si Ta esac

O seu significado é discutido máis tarde.

Alias

Un alias é un nome e un valor correspondente establecido usando o comando aliñado (1) builtin. Sempre que se poida producir unha palabra reservada (ver arriba) e despois de comprobar as palabras reservadas, o shell verifica a palabra para ver se coincide cun alias. Se o fai, substitúeo no fluxo de entrada co seu valor. Por exemplo, se hai un alias chamado `` lf '' co valor `` ls -F '' entón a entrada:

lf foobar

converteríase

ls -F foobar

Os alias proporcionan un xeito cómodo para que os usuarios inxenuos creen ordes para comandos sen ter que aprender a crear funcións con argumentos. Tamén se poden usar para crear código lexicamente escuro. Este uso é desanimado.

Comandos

O shell interpreta as palabras que le segundo un idioma, cuxa especificación está fóra do alcance desta páxina de man (consulte o BNF no documento POSIX 1003.2). Esencialmente, porén, lerase unha liña e se a primeira palabra da liña (ou despois dun operador de control) non é unha palabra reservada, entón o shell recoñeceu un comando simple. Se non, pode que se recoñeza un comando complexo ou algunha outra construción especial.

Comandos sinxelos

Se se recoñeceu un comando simple, o shell realiza as seguintes accións:

  1. As principais palabras do formulario `` nome = valor '' son eliminadas e asignadas ao ambiente do comando simple. Os operadores de redirección e os seus argumentos (como se describe a continuación) son eliminados e gardados para procesalos.
  2. As palabras restantes son expandidas como se describe na sección chamada `` Expansións '' ea primeira palabra restante é considerada o nome do comando e está situado o comando. As palabras restantes considéranse os argumentos do comando. Se non se produciu ningún nome de comando, entón as asignacións de variables `` name = value '' recoñecidas no elemento 1 afectan o shell actual.
  3. As redireccións realízanse como se describe na seguinte sección.

Redireccións

As redireccións utilízanse para cambiar cando un comando le a entrada ou envía a súa saída. En xeral, as redireccións abren, pechan ou duplica unha referencia existente a un ficheiro. O formato xeral usado para a redirección é:

[n] redir-op file

onde redir-op é un dos operadores de redirección mencionados anteriormente. A continuación amósase unha lista das posibles redireccións. O Bq n é un número opcional, como en `3 '(non` Bq 3' que fai referencia a un descriptor de ficheiro.

[n]> ficheiro

Redireccionar a saída estándar (ou n) para arquivar.

[n]> ficheiro

O mesmo, pero anula a opción - C.

[n] >> ficheiro

Engada a saída estándar (ou n) para arquivar.

[n]

Redireccionar a entrada estándar (ou n) do ficheiro.

[n1] <& n2

Duplique a entrada estándar (ou n1) do descriptor de ficheiro n2.

[n] <& -

Pecha a entrada estándar (ou n).

[n1]> & n2

Duplicar a saída estándar (ou n1) desde n2.

[n]> & -

Pecha a saída estándar (ou n).

[n] <> ficheiro

Abre o ficheiro para ler e escribir en entrada estándar (ou n).

A seguinte redirección chámase a miúdo un `` aquí-documento ''

[n] << delimitador

aquí-doc-text ...

delimitador

Todo o texto en liñas sucesivas ata o delimitador gárdase e póñase ao alcance do comando na entrada estándar ou no descriptor de ficheiro n se se especifica. Se o delimitador especificado na liña inicial está citado, entón o texto here-doc-se trata literalmente, se non, o texto está suxeito a expansión de parámetros, substitución de comandos e expansión aritmética (como se describe na sección de "Expansións"). 'Se o operador é `` << -' 'no canto de `` <<' ', as páxinas de liderado no texto aquí-doc están desposuídas.

Busca e execución

Existen tres tipos de comandos: funcións de shell, comandos integrados e programas normais - e o comando se busca (por nome) nesa orde. Cada un deles execútase dun xeito diferente.

Cando se executa unha función de shell, todos os parámetros de posición do shell (excepto $ 0, que permanecen inalterados) están definidos nos argumentos da función shell. As variables que se colocan explícitamente no ambiente do comando (colocándoas as atribucións antes do nome da función) fanse locais para a función e están configuradas nos valores dados. A continuación, execútase o comando indicado na definición de función. Os parámetros de posición son restaurados aos seus valores orixinais cando se completa o comando. Todo isto ocorre dentro do shell actual.

As construcións Shell executáronse internamente no shell, sen xerar un novo proceso.

En caso contrario, se o nome do comando non coincide cunha función ou está integrada, o comando procúrase como un programa normal no sistema de ficheiros (como se describe na seguinte sección). Cando se executa un programa normal, o shell executa o programa, pasando os argumentos e o ambiente ao programa. Se o programa non é un ficheiro executable normal (é dicir, se non comeza co "número máxico" cuxa representación ASCII é "#!", Entón execve (2) devolve Er ENOEXEC entón) o shell interpretará o programa nun subshell. O casquete infantil reiniciarase neste caso, de xeito que o efecto será coma se se invocase un shell novo para xestionar o script shell ad hoc, excepto que a localización dos comandos hash localizados no shell principal será lembrada polo neno.

Teña en conta que as versións anteriores deste documento e o código fonte engañosamente e esporádicamente refírense a un script shell sen un número máxico como un "proceso de shell".

Busca de camiño

Ao localizar un comando, o shell primeiro mira para ver se ten un shell función por ese nome. Entón busca un comando integrado por ese nome. Se non se atopa un comando incorporado, ocorre unha das dúas cousas:

  1. Os nomes de comandos que conteñen unha barra inclinada simplemente se executan sen realizar buscas.
  2. O intérprete de ordes busca cada entrada no PATH á vez para o comando. O valor da variable PATH debe ser unha serie de entradas separadas por colóns. Cada entrada consiste nun nome de directorio. O directorio actual pode indicar implícitamente un nome de directorio baleiro ou explícitamente nun só período.

Estado de saída do comando

Cada comando ten un estado de saída que pode influír no comportamento doutros comandos de shell. O paradigma é que un comando sae con cero para o normal ou para o éxito e non cero por falta, erro ou indicación falsa. A páxina do home para cada comando debería indicar os distintos códigos de saída e o que significan. Ademais, os comandos integrados devolven códigos de saída, así como unha función de shell executada.

Comandos complexos

Os comandos complexos son combinacións de comandos simples con operadores de control ou palabras reservadas, xuntas creando un comando complexo máis grande. En xeral, un comando é un dos seguintes:

  • comando simple
  • canalización
  • lista ou lista de compostos
  • comando composto
  • definición de función

A menos que se indique o contrario, o estado de saída dun comando é o último comando simple executado polo comando.

Pipelines

Un gasoduto é unha secuencia dun ou máis comandos separados polo operador de control. A saída estándar de todos excepto o último comando está conectada á entrada estándar do seguinte comando. A saída estándar do último comando herdase do shell, como de costume.

O formato para un oleoduto é:

[!] comando1 [| comando2 ...]

A saída estándar do comando 1 está conectada á entrada estándar do comando2. A orixe da entrada, a saída estándar ou os dous comandos considéranse asignados antes de calquera redirección especificada polos operadores de redirección que forman parte do comando.

Se o gasoduto non está en segundo plano (discutido posteriormente), o shell espera que se completen todos os comandos.

Se a palabra reservada! non precede ao gasoduto, o estado de saída é o estado de saída do último comando especificado no taboleiro. Se non, o estado de saída é o NON lóxico do estado de saída do último comando. É dicir, se o último comando retorna cero, o estado de saída é 1; se o último comando retorna maior que cero, o estado de saída é cero.

Debido a que a asignación de canalización de entrada estándar ou saída estándar ou ambas teñen lugar antes da redirección, pode modificarse por redirección. Por exemplo:

$ command1 2> & 1 | comando2

envía a saída estándar e o erro estándar do comando 1 á entrada estándar do comando2.

A; ou o termi- nador fai que se execute secuencialmente a lista AND-OR-list precedente (descrita a continuación); a & provoca a execución asíncrona da lista AND-OR-precedente.

Teña en conta que, a diferenza dalgunhas outras cunchas, cada proceso no taboleiro é un fillo da casilla de invocación (a non ser que sexa un shell integrado, caso en que se executa no shell actual, pero se elimina o efecto que ten sobre o ambiente).

Comandos de fondo -

Se o comando finaliza un comando polo operador de control ampersand (&), a shell executa o comando de xeito asíncrono, é dicir, o shell non espera que o comando finalice antes de executar o seguinte comando.

O formato para executar un comando en segundo plano é:

comando1 e [comando2 & ...]

Se o shell non é interactivo, a entrada estándar dun comando asíncrono está configurada en / dev / null

Listas - Falando en xeral

A lista é unha secuencia de cero ou máis comandos separados por liñas novas, puntos coma punto ou amperios e opcionalmente rescindido por un destes tres caracteres. Os comandos dunha lista executáronse na orde en que están escritos. Se o comando é seguido por un & ampersand; o shell comeza o comando e procede inmediatamente ao seguinte comando; do contrario agarda que o comando termine antes de pasar ao seguinte.

Operadores de listas de curtocircuítos

`` && '' e `` || '' son operadores de listas de AND-OR. `` && '' executa o primeiro comando e, a continuación, executa o segundo comando, o estado de saída do primeiro comando é cero. `` || '' é semellante, pero executa o segundo comando o estado de saída do primeiro comando non é cero. `` && '' e `` || '' teñen a mesma prioridade.

Construcións de control de fluxo: se, mentres, para, caso

A sintaxe do comando if é

se a lista
a continuación, lista
[lista elif
a continuación, lista] ...
[outra lista]
fi

A sintaxe do comando while é

mentres listas
facer unha lista
feito

As dúas listas executáronse repetidamente mentres o estado de saída da primeira lista é cero. O comando ata que é semellante, pero ten a palabra ata en lugar de tempo, o que fai que se repita ata que o estado de saída da primeira lista sexa cero.

A sintaxe do comando for command é

por variable en palabra ...
facer unha lista
feito

As palabras son expandidas e, a continuación, a lista execútase repetidamente coa variable definida en cada palabra á súa vez. facer e facer pode ser substituído por `` {'' e ``) ''

A sintaxe do comando break e continue é

rompe [num]
continuar [num]

Break remata o número máis interno para ou mentres loops. Continúa continúa coa seguinte iteración do circuíto interno. Estes son implementados como comandos integrados.

A sintaxe do comando caso é

palabra do caso en
patrón) lista ;;
...
esac

O patrón pode realmente ser un ou máis patróns (vexa os patróns de Shell descritos máis tarde), separados por `` '' caracteres.

Agrupando Comandos Xuntos

Os comandos poden agruparse escribindo tamén

(lista)

ou

{lista;

O primeiro destes executa os comandos nun subshell. Os comandos builtin agrupados nunha (lista) non afectan o shell actual. O segundo formulario non fork outro shell así que é un pouco máis eficiente. Agrupar comandos deste xeito permítelle redirixir a súa saída coma se fosen un programa:

{printf hello; printf world \ n ";}> saúdo

Funcións

A sintaxe dunha definición de función é

nome () comando

Unha definición de función é unha declaración executable; cando se executa instálase unha función chamada nome e devolve un estado de saída de cero. O comando é normalmente unha lista entre `` {'' e ``) ''

As variables poden ser declaradas como locais nunha función empregando un comando local. Isto debería aparecer como a primeira declaración dunha función e a sintaxe é

local [variable | -] ...

Local execútase como un comando integrado.

Cando se fai unha variable local, herda o valor inicial e as bandeiras exportadas e de lectura da variable con o mesmo nome no ámbito circundante, se hai un. En caso contrario, a variable non está inicialmente establecida. O shell usa un alcance dinámico, de xeito que se fai a variable x local para que funcione f, que entón chama a función g, as referencias á variable x feitas dentro de g refírense á variable x declarada dentro de f, non á variable global chamada x .

O único parámetro especial do que se pode facer local é `` - '' Facendo `` - '' local todas as opcións de shell que se cambien a través do comando set dentro da función para ser restauradas aos seus valores orixinais cando a función volva.

A sintaxe do comando de devolución é

devolver [saída de estado

Termina a función de execución actualmente. O regreso é implementado como un comando integrado.

Variables e parámetros

O shell mantén un conxunto de parámetros. Un parámetro denotado por un nome chámase variable. Cando se inicia, o shell converte as variables de entorno en variables de shell. As novas variables pódense configurar usando o formulario

nome = valor

As variables establecidas polo usuario deben ter un nome composto exclusivamente por alfabetos, números e guións baixos, o primeiro dos cales non debe ser numérico. Un parámetro tamén pode ser denotado por un número ou por un carácter especial como se explica a continuación.

Parámetros posicionais

Un parámetro posicional é un parámetro denotado por un número (n> 0). O shell configura estes inicialmente nos valores dos seus argumentos de liña de comando que seguen o nome do script shell. O conxunto (1) builtin tamén se pode usar para configurar ou restablecerlos.

Parámetros especiais

Un parámetro especial é un parámetro denotado por un dos seguintes caracteres especiais. O valor do parámetro está listado xunto ao seu carácter.

*

Expande aos parámetros de posición, a partir dunha. Cando a expansión prodúcese dentro dunha cadea de dúas citas, expándese a un único campo co valor de cada parámetro separado polo primeiro carácter da variable IFS ou por un se o IFS está desactivado.

@

Expande aos parámetros de posición, a partir dunha. Cando a expansión ocorre dentro de comiñas dobres, cada parámetro de posición expande como un argumento separado. Se non hai parámetros de posición, a expansión de @ xera argumentos cero, mesmo cando @ está cotizada dúas veces. O que isto significa basicamente, por exemplo, é se $ 1 é `` abc '' e $ 2 é `` def ghi '' entón Qq $ @ se expande aos dous argumentos:

abc def ghi

#

Expande ao número de parámetros de posición.

¿?

Expande ao estado de saída do gasoduto máis recente.

- (Guión).

Expande aos parámetros da opción actual (os nomes das opcións de letra única concatenados nunha cadea) como se especifica na invocación, polo comando set builtin ou implícitamente polo shell.

$

Expande ao ID do proceso do shell invocado. Un subshell conserva o mesmo valor de $ que o seu pai.

!

Expandirase ao ID do proceso do comando de fondo máis recente executado desde o shell actual. Para unha tubería, o ID do proceso é o do último comando.

0 (cero).

Expande ao nome do shell ou o shell script.

Expansións de palabras

Esta cláusula describe as diversas expansións que se realizan nas palabras. Non se realizan todas as expansións en cada palabra, como se explica máis adiante.

As expansións de Tilde, as expansións de parámetros, as substitucións de comandos, as expansións aritméticas e as eliminacións de cotas que se producen dentro dunha única palabra expandense a un único campo. É só unha división de campo ou unha ampliación de camiño que pode crear varios campos dunha única palabra. A única excepción a esta regra é a expansión do parámetro especial @ dentro de comiñas dobres, como se describiu anteriormente.

A orde de expansión da palabra é:

  1. Expansión de Tilde, Expansión de parámetros, Substitución de comandos, Expansión aritmética (todos estes ocorren ao mesmo tempo).
  2. A división de campo realízase nos campos xerados polo paso (1) a menos que a variable IFS sexa nula.
  3. Expansión de nome de camiño (a menos que o conxunto - f estea en vigor).
  4. Eliminación de cotas.

O carácter $ úsase para introducir a expansión de parámetros, a substitución de comandos ou a avaliación aritmética.

Expansión de Tilde (substituíndo o directorio persoal do usuario)

Unha palabra que comeza con un carácter de táctil sen cotización (~) está suxeita á expansión da tila. Todos os caracteres ata unha barra (/) ou o final da palabra son tratados como nome de usuario e son substituídos polo directorio persoal do usuario. Se falta o nome de usuario (como en ~ / foobar) o tilde substitúese co valor da variable HOME (o directorio persoal do usuario actual).

Expansión de parámetros

O formato para a ampliación de parámetros é o seguinte:

onde a expresión consiste en todos os caracteres ata que a coincidencia ``} '' Any ``} '' escapase cunha barra invertida ou dentro dunha cadea citada, e os caracteres en expansións aritméticas incrustado, substitucións de comandos e expansións variables non se examinan para determinar a coincidindo con ``} ''

A forma máis simple para a ampliación de parámetros é:

Engádese o valor, se hai, do parámetro.

O nome ou o símbolo do parámetro pode estar encerrado nas teclas, que son opcionais excepto para os parámetros posicionais con máis dun díxito ou cando o parámetro é seguido por un carácter que podería interpretarse como parte do nome. Se unha expansión de parámetro ten lugar dentro de comiñas dobres:

  1. A ampliación de nome de ruta non se realiza nos resultados da expansión.
  2. A división de campo non se realiza nos resultados da expansión, con excepción de @.

Ademais, unha expansión de parámetros pode modificarse mediante un dos seguintes formatos.

Usar valores predeterminados. Se o parámetro é desactivado ou nulo, a substitución da palabra está substituída; En caso contrario, substitúese o valor do parámetro.

Asignar valores predeterminados. Se o parámetro é desactivado ou nulo, a expansión da palabra asignarase ao parámetro. En todos os casos, o valor final do parámetro é substituído. Só se poden asignar as variables, non parámetros posicionais ou parámetros especiais.

Indique o erro se é Null ou Unset. Se o parámetro é desactivado ou nulo, a expansión da palabra (ou unha mensaxe que indica que está desactivada se omita a palabra) escríbese ao erro estándar e a shell sae con un estado de saída non cero. Se non, substitúese o valor do parámetro. Un shell interactivo non necesita saír.

Use o valor alternativo. Se o parámetro é desactivado ou non é nulo, está substituído por nulo; En caso contrario, a ampliación da palabra substitúese.

Nas expansións de parámetros que se amosan previamente, o uso de dous puntos no formato dá como resultado unha proba dun parámetro que non está establecido ou nulo; a omisión do coloné obtén unha proba para un parámetro que só se desactiva.

Lonxitude da corda. Lonxitude en caracteres do valor do parámetro.

As seguintes catro variedades de expansión de parámetros proporcionan o procesamento de subcadenas. En cada caso, emprégase a notación de coincidencia de patrón (ver Patróns de Shell), en vez de notación de expresión regular, para avaliar os patróns. Se o parámetro é * ou @, o resultado da expansión non está especificado. A inclusión da cadea de expansión de parámetros completa en comiñas dobres non fai que se citan as seguintes catro variedades de caracteres de patrón, mentres que a citación de caracteres dentro das teclas ten ese efecto.

Elimina o patrón de sufixo máis pequeno. A palabra é expandida para producir un patrón. A expansión de parámetros dá lugar a un parámetro, coa parte máis pequena do sufixo coincidente co patrón eliminado.

Elimina o patrón de sufixo máis grande. A palabra é expandida para producir un patrón. A expansión de parámetros dá lugar ao parámetro, coa maior parte do sufixo coincidente co patrón eliminado.

Elimina o patrón de prefixo máis pequeno. A palabra é expandida para producir un patrón. A expansión de parámetros resulta nun parámetro, coa parte máis pequena do prefixo correspondente co patrón eliminado.

Eliminar o patrón de prefixo máis grande. A palabra é expandida para producir un patrón. A expansión de parámetros resulta nun parámetro, coa maior porción do prefixo correspondente co patrón eliminado.

Substitución de comandos

A substitución de comandos permite substituír a saída dun comando no lugar do nome de comandos. A substitución de comandos ocorre cando o comando está incluído como segue:

$ (comando)

ou a versión de Po `` backquoted '':

`comando`

O shell expande a substitución do comando executando o comando nun contorno do subsolo e substitúe a substitución do comando coa saída estándar do comando, eliminando as secuencias dunha ou máis s ao final da substitución. (Inseridos s antes do final da saída non se eliminan; con todo, durante a división de campo, poden ser traducidos a s, dependendo do valor de IFS e citando que estea en vigor).

Expansión aritmética

A expansión aritmética proporciona un mecanismo para evaluar unha expresión aritmética e substituír o seu valor. O formato para a expansión aritmética é o seguinte:

$ ((expresión))

A expresión trátase coma se fose en comiñas dobres, agás que unha cita dobre dentro da expresión non se trata especialmente. O shell expande todos os tokens na expresión para a ampliación de parámetros, a substitución de comandos ea eliminación de presupostos.

A continuación, o shell trata isto como unha expresión aritmética e substitúe o valor da expresión.

División de espazo branco (división de campo)

Despois da expansión de parámetros, a substitución de comandos ea expansión aritmética, o shell explora os resultados das expansións e substitucións que non se produciron en comiñas dobres para a división de campos e pode xerar varios campos.

A casca trata cada carácter do IFS como un delimitador e usa os delimitadores para dividir os resultados da ampliación de parámetros e substitución de comandos en campos.

Expansión de nome de camiño (xeración de nome de ficheiro)

A menos que se configure a marca - f , a xeración de nomes de ficheiro realízase despois de completar a división de palabras. Cada palabra vese como unha serie de patróns, separados por barras. O proceso de expansión substitúe a palabra cos nomes de todos os ficheiros existentes cuxos nomes poden formarse substituíndo cada patrón cunha cadea que coincide co estándar especificado. Hai dúas restricións respecto diso: primeiro, un patrón non pode coincidir cunha cadea que contén unha barra horizontal, e segundo, un patrón non pode coincidir cunha cadea que comeza cun período a non ser que o primeiro carácter do patrón sexa un período. A seguinte sección describe os patróns utilizados para a Expansión dos nomes de Path eo comando case (1).

Patróns Concha

Un patrón consiste en caracteres normais que se unen a si mesmos e con metacarlos. Os meta-personaxes son ``! '' `` * '' ``? '' E `` ['' Estes personaxes perden os seus significados especiais se son citados. Cando se realiza unha substitución de comando ou variable e as comiñas de sinal ou de volta non son dobres cotizadas, o valor da variable ou a saída do comando é escaneado para estes personaxes e convertéronse en meta-caracteres.

Un asterisco (`` * '') coincide con calquera cadea de caracteres. Un signo de interrogación coincide con calquera personaxe. Un bracket esquerdo (`` ['') introduce unha clase de carácter. O final da clase de caracteres indica un (``) '') se falta o ``] '' falta entón o `` ['' coincide cunha `` ['' no canto de introducir unha clase de carácter. A clase de carácter coincide con calquera dos caracteres entre os corchetes. Pode especificarse un rango de caracteres usando un signo menos. A clase de carácter pode ser complementada facendo un signo de exclamación o primeiro carácter da clase de carácter.

Para incluír unha ``] '' nunha clase de personaxes, faga o primeiro carácter enumerado (despois do ``! '' Se hai algunha). Para incluír un signo menos, faino o primeiro ou último carácter indicado

Builtins

Esta sección enumera os comandos integrados que están integrados porque necesitan realizar algunha operación que non pode ser realizada por un proceso separado. Ademais destes, hai outros comandos que poden estar integrados para a eficiencia (por exemplo, o eco 1).

:

Un comando nulo que retorna un valor de saída 0 (verdadeiro).

. ficheiro

Os comandos no ficheiro especificado son lidos e executados polo shell.

alias [ nome [ = cadea ... ]]

Se se especifica name = string , o shell define o nome do alias coa cadea de valor Se só se especifica o nome, imprímese o valor do nome do alias. Sen argumentos, o alias incorporado imprime os nomes e os valores de todos os alias definidos (ver unalias)

bg [ traballo] ...

Continúa os traballos especificados (ou o traballo actual se non se proporcionan traballos) en segundo plano.

comando comando arg ...

Executa o comando builtin especificado. (Isto é útil cando tes unha función de shell co mesmo nome que un comando builtin).

cd [ directorio ]

Cambia ao directorio especificado (predeterminado $ HOME) Se aparece unha entrada para o CDPATH no ambiente do comando cd ou a variábel shell é un CDPATH establecido e o nome do directorio non comeza cunha barra, entón procuraranse os directorios listados en CDPATH para o directorio especificado. O formato de CDPATH é o mesmo que o de PATH. Nun shell interactivo, o comando cd imprimirá o nome do directorio que realmente cambiou se isto é diferente do nome que o usuario deu. Estes poden ser diferentes ben porque se utilizou o mecanismo CDPATH ou porque se cruzou unha ligazón simbólica.

cadea eval ...

Concatenar todos os argumentos con espazos. A continuación, repita e executa o comando.

exec [ comando arg ... ]

A menos que se omite o comando, o proceso de shell substitúese co programa especificado (que debe ser un programa real, non unha shell construída nin funcionar). Calquera redirección do comando exec está marcada como permanente, de xeito que non se desfacer cando finalice o comando exec .

saír [ saída de estado ]

Termina o proceso de shell. Se se dá o estado de saída emprégase como estado de saída do shell; doutro xeito emprégase o estado de saída do comando precedente.

nome de exportación ...

exportación -p

Os nomes especificados son exportados para que aparezan no ambiente de comandos posteriores. A única forma de exportar unha variable é desconectada. O shell permite establecer o valor dunha variable ao mesmo tempo que se exporta escribindo

export name = value

Sen argumentos o comando de exportación enumera os nomes de todas as variables exportadas. Coa opción - p especificada, a saída formatarase adecuadamente para o uso non interactivo.

fc [- e editor ] [ primeiro [ último ]]

fc -l [- nr ] [ primeiro [ último ]]

fc -s [ vello = novo ] [ primeiro ]

O fc builtin listas, ou edita e re-executa, comandos previamente ingresados ​​nun shell interactivo.

-e editor

Use o editor nomeado polo editor para editar os comandos. A cadea de editor é un nome de comando, suxeita a busca mediante a variable PATH . O valor da variable FCEDIT úsase como predeterminado cando non se especifica e. Se FCEDIT é nulo ou non establecido, empregarase o valor da variable EDITOR . Se EDITOR é nulo ou non establecido, ed (1) úsase como editor.

-l (el)

Lista os comandos en vez de invocar un editor neles. Os comandos están escritos na secuencia indicada polos primeiros e últimos operandos, como os afectados por - r con cada comando precedido polo número de comando.

-n

Suprime números de comando cando se inclúa con -l.

-r

Inverte a orde dos comandos listados (con - l ou editados (nin - l nin - s)

-s

Reexame o comando sen invocar un editor.

primeira

último

Seleccione os comandos para listar ou editar. O número de comandos previos aos que se pode acceder determínase polo valor da variable HISTSIZE . O valor de primeiro ou último ou ambos son un dos seguintes:

[+] número

Un número positivo que representa un número de comando; Os números de comando pódense mostrar coa opción - l .

-número

Un número decimal negativo que representa o comando que se executou o número de comandos previamente. Por exemplo, -1 é o comando inmediatamente anterior.

cordel

Unha cadea que indica o comando máis recente introducido que comeza con esa cadea. Se o vello = operando novo non se especifica tamén con - s o formulario de cadea do primeiro operando non pode conter un sinal igual incorporado.

As seguintes variables de ambiente afectan á execución de fc:

FCEDIT

Nome do editor a empregar.

HISTSIZE

O número de comandos anteriores que son accesibles.

fg [ traballo ]

Mova o traballo especificado ou o traballo actual ao primeiro plano.

getopts optstring var

O comando getopts de POSIX , para non confundirse cos Bell Labs ( bypassed getopt) (1).

O primeiro argumento debe ser unha serie de letras, cada unha das cales pode ser seguida opcionalmente por dous puntos para indicar que a opción require un argumento. A variable especificada está definida na opción analizada.

O comando getopts desactiva a utilidade getopt anterior (1) debido á súa manipulación de argumentos que conteñen espazo en branco.

Os getopts builtin poden usarse para obter as opcións e os seus argumentos a partir dunha lista de parámetros. Cando se invoca, getopts coloca o valor da seguinte opción da cadea de opción na lista na variable shell que var especificou e é o índice da variábel shell OPTIND Cando se invoca o shell, OPTIND está inicializado en 1. Para cada opción que require un argumento, os getopts builtin colocándoo na variable de shell OPTARG Se non se permite unha opción no optstring entón OPTARG será desactivado.

optstring é unha cadea de letras de opción recoñecidas. Se unha letra é seguida por dous puntos, espérase que a opción teña un argumento que pode ou non estar separado do espazo branco. Se non se atopa un carácter de opción onde se espera, getopts establecerá a variável var a ``? '' Getopts entón desactivará OPTARG e escreberá a saída estándar. Ao especificar un coma como o primeiro carácter de optstring todos os erros serán ignorados.

Recibe un valor non cero cando se alcanza a última opción. Se non hai argumentos restantes, getopts establecerá var para a opción especial, `` - '' doutro xeito, establecerá var para ``? ''

O seguinte fragmento de código mostra como se pode procesar os argumentos para un comando que pode tomar as opcións [a] e [b] ea opción [c] que require un argumento.

mentres gotopts abc: f
facer
caixa en $ f
a | b) bandeira = $ f ;;
c) carg = $ OPTARG ;;
\?) eco $ USAGE; saída 1;
esac
feito
shift `expr $ OPTIND - 1`

Este código aceptará o seguinte como equivalente:

ficheiro de ficheiro cmd -acarg
ficheiro de ficheiro cmd-a-c arg
cmd-carga-un arquivo de ficheiro
cmd-a-carga - ficheiro de ficheiro

comando hash -rv ...

O shell mantén unha táboa hash que recorda as localizacións dos comandos. Sen ningún tipo de argumentos, o comando hash imprime os contidos desta táboa. As entradas que non foron miradas desde o último comando cd están marcadas cun asterisco; é posible que estas entradas sexan válidas.

Con argumentos, o comando hash elimina os comandos especificados da táboa hash (a non ser que sexan funcións) e logo localízaos. Coa opción - v , o hash imprime as localizacións das ordes mentres as atopa. A opción - r fai que o comando hash elimine todas as entradas da táboa hash excepto as funcións.

jobid [ job ]

Imprimir a ID do proceso dos procesos no traballo. Se se omite o argumento de traballo, úsase o traballo actual.

traballos

Este comando lista todos os procesos de fondo que son fillos do proceso de shell actual.

pwd

Imprimir o directorio actual. O comando builtin pode diferir do programa do mesmo nome porque o comando builtin recorda o que o directorio actual está en vez de recomputalo cada vez. Isto fai que sexa máis rápido. Non obstante, se se cambia o nome do directorio actual, a versión integrada de pwd continuará a imprimir o nome antigo para o directorio.

lea [ --p ] prompt [- r ] variable ...

O indicador está impreso se se especifica a opción - p ea entrada estándar é un terminal. Entón lévase unha liña dende a entrada estándar. A nova liña final elimínase da liña e a liña divídese como se describe na sección de división de palabras anterior e as pezas están asignadas ás variables en orde. Debe especificarse polo menos unha variable. Se hai máis pezas que variables, as pezas restantes (xunto cos caracteres de IFS que as separaron) están asignadas á última variable. Se hai máis variables que pezas, as variables restantes asignaranse á cadea nula. A lectura construída indicará o éxito a menos que se atope EOF na entrada, caso en que se devolve un fallo.

De forma predeterminada, a menos que a opción - r se especifique, a barra invertida `` \ '' actúa como un carácter de escape, facendo que o seguinte carácter sexa tratado literalmente. Se unha barra invertida é seguida por unha nova liña, a barra invertida e a liña nova eliminaranse.

nome de lectura ...

readonly -p

Os nomes especificados están marcados como só de lectura, de modo que non se poden modificar ou restaurar posteriormente. O shell permite que o valor dunha variable se configure ao mesmo tempo que se marca como só lectura escribindo

readonly name = value

Sen argumentos o comando readonly lista os nomes de todas as variables só de lectura. Coa opción - p especificada, a saída formatarase adecuadamente para o uso non interactivo.

establecer [{- opcións | + opcións | - arg ... ]

O comando set executa tres funcións diferentes.

Sen argumentos, lista os valores de todas as variábeis de shell.

Se se dan as opcións, establece as bandeiras de opcións especificadas ou elimina as descritas na sección chamada Procesamento da lista de argumentos Sx.

O terceiro uso do comando set é definir os valores dos parámetros de posición do shell aos args especificados. Para cambiar os parámetros de posición sen cambiar ningunha opción, use `` - '' como o primeiro argumento a configurar. Se non hai args presentes, o comando set borrará todos os parámetros de posición (equivalente a executar `` shift $ # ''. ''

valor variable

Asigna valor a variable. (En xeral é mellor escribir variable = valor en lugar de usar setvar setvar está destinado a ser usado en funcións que asignan valores a variables cuxos nomes son pasados ​​como parámetros).

cambio [ n ]

Cambia os parámetros de posición n veces. Un cambio establece o valor de $ 1 ao valor de $ 2 o valor de $ 2 ao valor de $ 3 e así por diante, reducindo o valor de $ $ por cada un. Se n é maior que o número de parámetros posicionais, o cambio xerará unha mensaxe de erro e sairá co estado de retorno 2.

veces

Imprime os tempos de usuario e sistema acumulados para o shell e para os procesos que se executan desde o shell. O estado de retorno é 0.

sinal de acción trampa ...

Fai que a shell para analizar e executar a acción cando se reciba algún dos sinais especificados. Os sinais están especificados por número de sinal. Se o sinal é 0 a acción execútase cando a shell sae. a acción pode ser nula ou `` - '' a primeira causa que se ignore o sinal especificado e isto último fai que se tome a acción por defecto. Cando o shell desvía un subshell , restablece os sinais atrapados (pero non ignorados) na acción predeterminada. O comando de trampa non ten efecto sobre os sinais que foron ignorados ao entrar no shell.

escribe [ nome ... ]

Interpretar cada nome como comando e imprimir a resolución da busca de comandos. As resolucións posibles son: chave de chave, alias, builtin shell , comando, alias seguido e non atopado. Para alias emprégase a expansión do alias; para comandos e aliases rastrexados imprímese a ruta completa do comando.

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

Consulte ou estableza os límites duros ou bruscos dos procesos ou establece novos límites. A elección entre o límite duro (que non se pode violar ningún proceso e que non se pode aumentar unha vez que se reduciu) e o límite suave (o que provoca que os procesos sexan sinalados pero non necesariamente fosen mortos e que se poidan aumentar) faise con estas bandeiras:

-H

establecer ou preguntar sobre límites duros

-S

configurar ou consultar sobre límites brandos. Se non se especifica nin - H nor - S, móstrase o límite suave ou se configuran ambos os límites. Se se especifican ambos, obtense o último.

O límite para ser interrogado ou establecido, entón, escóllese especificando calquera destes indicadores:

-a

amosa todos os límites actuais

-t

amosar ou establecer o límite no tempo da CPU (en segundos)

-f

amosar ou establecer o límite no ficheiro máis grande que se pode crear (en bloques de 512 bytes)

-d

amosar ou establecer o límite no tamaño do segmento de datos dun proceso (en kilobytes)

-s

mostrar ou establecer o límite no tamaño da pila dun proceso (en kilobytes)

-c

amosar ou establecer o límite no maior tamaño do vertedoio central que se pode producir (en bloques de 512 bytes)

-m

mostrar ou establecer o límite sobre a memoria física total que pode usar un proceso (en kilobytes)

-l

amosar ou establecer o límite de canto memoria pode bloquear un proceso con mlock (2) (en kilobytes )

-p

amosar ou establecer o límite sobre o número de procesos que este usuario pode ter ao mesmo tempo

-n

amosar ou establecer o límite nos ficheiros de número que pode abrir un proceso á vez

Se non se especifica ningunha destas, é o límite do tamaño do ficheiro que se amosa ou configure. Se se especifica o valor, o límite axustarase a ese número; de outro xeito mostrarase o límite actual.

Os límites dun proceso arbitrario pódense amosar ou configurar mediante a utilidade sysctl (8).

umask [ máscara ]

Estableza o valor de umask (ver umask (2)) co valor octal especificado. Se o argumento é omitido, imprímese o valor umask.

unalias [- a ] [ nome ]

Se o nome está especificado, o shell elimina ese alias. Se se especifica a a, elimínanse todos os alias.

nome desactivado ...

As variables e as funcións especificadas non son exportadas e non exportadas. Se un nome dado corresponde tanto a unha variable como a unha función, a variable ea función non se atopan.

agardar [ traballo ]

Espere a completar o traballo especificado e devolver o estado de saída do último proceso no traballo. Se o argumento é omitido, agarde a que complete o traballo e regrese un estado de saída de cero.

Edición da liña de comandos

Cando sh está a ser usado de forma interactiva desde un terminal, o comando actual eo historial de comando (ver fc en Sx Builtins) pódense editar usando a edición de liña de comando de vi-mode. Este modo usa comandos, descritos a continuación, semellantes a un subconxunto dos descritos na páxina de vi man. O comando `set '-o vi habilita a edición de vi-mode e colócanse no modo de inserción de vi. Con vi-mode habilitado, sh pode ser conmutado entre o modo de inserción eo modo de comando. O editor non está descrito completo aquí, pero será nun documento posterior. É semellante ao vi: escribindo Aq ESC arroxaranos no comando VI modo de comando. Ao chamar a Aq de retorno mentres que no modo de comando pasarase a liña ao shell.

Importante: use o comando man ( % home ) para ver como se usa un comando na súa computadora particular.