Skip to main content

Ash - Comando Linux

Antiguo Tutorial Scriptin g Shell /B ash Capítulo 1.Introduccion. (Junho 2026)

Antiguo Tutorial Scriptin g Shell /B ash Capítulo 1.Introduccion. (Junho 2026)
Anonim

NOME

sh - interpretador de comandos (shell)

SINOPSE

sh -/ + aCefnuvxIimqsVEbc -o longname -words alvo …

DESCRIÇÃO

Sh é o interpretador de comandos padrão do sistema. A versão atual dosh está em processo de ser alterado para se conformar com oPOSIX 1003.2 e 1003.2a especificações para o shell. Esta versão tem muitos recursos que parecem similares em alguns aspectos ao shell Korn, mas não é um clone de shell Korn (veja ksh (1)). Apenas recursos designados porPOSIX além de algumas extensões de Berkeley, estão sendo incorporadas neste shell. Nós esperamosPOSIX Conformidade no momento em que 4.4 BSD é lançado. Esta página man não se destina a ser um tutorial ou uma especificação completa do shell.

visão global

O shell é um comando que lê linhas de um arquivo ou terminal, interpreta-as e geralmente executa outros comandos. É o programa que está sendo executado quando um usuário efetua login no sistema (embora um usuário possa selecionar um shell diferente com o comando chsh (1)). O shell implementa uma linguagem que possui construções de controle de fluxo, um recurso de macro que fornece diversos recursos além do armazenamento de dados, além de recursos integrados de histórico e edição de linha. Ele incorpora muitos recursos para auxiliar o uso interativo e tem a vantagem de que a linguagem interpretativa é comum ao uso interativo e não interativo (scripts de shell). Ou seja, os comandos podem ser digitados diretamente no shell em execução ou podem ser colocados em um arquivo e o arquivo pode ser executado diretamente pelo shell.

Invocação

Se não houver args e se a entrada padrão do shell estiver conectada a um terminal (ou se o -Eubandeira está definida), e o -c opção não está presente, o shell é considerado um shell interativo. Um shell interativo geralmente avisa antes de cada comando e lida com erros de programação e comando de maneira diferente (conforme descrito abaixo). Ao iniciar pela primeira vez, o shell inspeciona o argumento 0, e se ele começa com um traço `- 'o shell também é considerado um shell de login. Isso normalmente é feito automaticamente pelo sistema quando o usuário efetua login pela primeira vez. Um shell de login lê primeiro os comandos dos arquivos /etc/profile e .profile, se existirem. Se a variável de ambienteENV é definido na entrada para um shell, ou é definido no .profile de um shell de login, o shell em seguida lê comandos do arquivo nomeado emENVPortanto, um usuário deve colocar comandos que devem ser executados somente no momento do login no arquivo .profile e comandos que são executados para cada shell dentro do arquivo .profile.ENV Arquivo. Para definir oENV variável para algum arquivo, coloque a seguinte linha no seu .profile do seu diretório home

ENV = $ HOME / .shinit; exportação ENV

substituindo `` .shinit '' qualquer nome de arquivo que você desejar. Desde oENV arquivo é lido para cada invocação do shell, incluindo shell scripts e shells não interativos, o paradigma a seguir é útil para restringir comandos noENV arquivo para invocações interativas. Coloque comandos dentro do `` case '' e `` esac '' abaixo (estes comandos são descritos mais adiante):

case $ - in * i *)

# comandos apenas para uso interativo

esac

Se os argumentos de linha de comando além das opções tiverem sido especificados, o shell tratará o primeiro argumento como o nome de um arquivo do qual ler comandos (um shell script) e os argumentos restantes serão definidos como os parâmetros posicionais do shell ($ 1 , $ 2, etc). Caso contrário, o shell lê comandos de sua entrada padrão.

Processamento de lista de argumentos

Todas as opções de letra única têm um nome correspondente que pode ser usado como um argumento para o -o opção. O conjunto -o nome é fornecido ao lado da opção de letra única na descrição abaixo. Especificar um traço `` - '' ativa a opção, enquanto usar um sinal de adição '+' 'desativa a opção. As seguintes opções podem ser definidas a partir da linha de comando ou com o conjunto (1) incorporado (descrito mais adiante).

-uma allexport

Exportar todas as variáveis ​​atribuídas a. (UNIMPLEMENTADO para 4.4a)

-c

Leia os comandos da linha de comando. Nenhum comando será lido a partir da entrada padrão.

-C noclobber

Não sobrescreva arquivos existentes com ``> '' (UNIMPLEMENTED for 4.4alpha)

-e errexit

Se não for interativo, saia imediatamente se algum comando não testado falhar. O status de saída de um comando é considerado testado explicitamente se o comando for usado para controlarE se elifwhile ouaté ou se o comando for o operando da esquerda de um operador `` && '' ou `` || ''.

-f noglob

Desativar a expansão do nome do caminho.

-n noexec

Se não for interativo, leia os comandos, mas não os execute. Isso é útil para verificar a sintaxe dos scripts de shell.

-você nounset

Escreva uma mensagem para o erro padrão ao tentar expandir uma variável que não esteja definida e, se o shell não for interativo, saia imediatamente. (UNIMPLEMENTADO para 4.4a)

-v verbose

O shell grava sua entrada no erro padrão conforme é lido. Útil para depuração.

-x xtrace

Escreva cada comando para um erro padrão (precedido por um `+ 'antes de ser executado. Útil para depuração.

-q quietprofile

Se o -v oux opções foram configuradas, não as aplique ao ler arquivos de inicialização, como sendo / etc / profile .profile e o arquivo especificado peloENV variável de ambiente.

-EU ignoreeof

Ignore o EOF da entrada quando interativo.

-Eu interativo

Force o shell a se comportar de forma interativa.

-m monitor

Ative o controle de trabalho (definido automaticamente quando interativo).

-s stdin

Comandos de leitura da entrada padrão (configurados automaticamente se não houver argumentos de arquivo). Esta opção não tem efeito quando definida após o shell já ter iniciado a execução (ou seja, com set (1)).

-V vi

Ativar o editor de linha de comandos interno do vi (1) (desativa -E se tiver sido definido).

-E emacs

Habilite o editor de linha de comando interno do emacs (1) (desativa -V se tiver sido definido).

-b notificar

Ativar notificação assíncrona da conclusão do job em background. (UNIMPLEMENTADO para 4.4a)

Estrutura lexical

O shell lê a entrada em termos de linhas de um arquivo e divide em palavras no espaço em branco (espaços em branco e tabulações) e em determinadas sequências de caracteres que são especiais para o shell chamadas "operadores" Existem dois tipos de operadores: operadores de controle e operadores de redirecionamento (seu significado é discutido mais adiante). A seguir, uma lista de operadores:

"Operadores de controle:"

& && ( ) ; ;; | ||

"Operador de redirecionamento:"

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

Citando

A citação é usada para remover o significado especial de certos caracteres ou palavras para o shell, como operadores, espaço em branco ou palavras-chave. Existem três tipos de cotação: aspas simples combinadas, aspas duplas correspondentes e barra invertida.

Barra invertida

Uma barra invertida preserva o significado literal do caractere seguinte, com exceção da nova linha Aq. Uma barra invertida que precede uma nova linha Aq é tratada como uma continuação de linha.

Citações Únicas

Inserir caracteres entre aspas simples preserva o significado literal de todos os caracteres (exceto as aspas simples, tornando impossível colocar aspas simples em uma sequência de aspas simples).

Aspas duplas

Incluir caracteres entre aspas duplas preserva o significado literal de todos os caracteres, exceto dollarsign ($) backquote (`) e barra invertida () A barra invertida entre aspas duplas é historicamente estranha e serve para citar apenas os seguintes caracteres:

$ `

Caso contrário, permanece literal.

Palavras reservadas

Palavras reservadas são palavras que têm significado especial para o shell e são reconhecidas no início de uma linha e depois de um operador de controle. A seguir estão as palavras reservadas:

! TaElif Ta fi Ta enquanto Ta case

mais Tapara Ta, então Ta {Ta}

fazer TaTa feito até Ta se ta esac

Seu significado é discutido mais tarde.

Aliases

Um alias é um nome e um valor correspondente definidos usando o comando alias (1) builtin. Sempre que uma palavra reservada pode ocorrer (veja acima), e depois de verificar palavras reservadas, o shell verifica a palavra para ver se ela corresponde a um alias. Em caso afirmativo, ele o substitui no fluxo de entrada pelo seu valor. Por exemplo, se existe um apelido chamado `` lf '' com o valor `` ls -F '' então a entrada:

Se foobar

se tornaria

ls -F foobar

Os aliases fornecem uma maneira conveniente para usuários ingênuos criar atalhos para comandos sem precisar aprender como criar funções com argumentos. Eles também podem ser usados ​​para criar códigos lexicamente obscuros. Esse uso é desencorajado.

Comandos

O shell interpreta as palavras que lê de acordo com uma linguagem, cuja especificação está fora do escopo desta página man (consulte a BNF noPOSIX Documento 1003.2). Essencialmente, porém, uma linha é lida e se a primeira palavra da linha (ou depois de um operador de controle) não for uma palavra reservada, então o shell reconheceu um comando simples. Caso contrário, um comando complexo ou alguma outra construção especial pode ter sido reconhecida.

Comandos Simples

Se um comando simples foi reconhecido, o shell executa as seguintes ações:

  1. As palavras iniciais da forma `` name = value '' são removidas e atribuídas ao ambiente do comando simples. Os operadores de redirecionamento e seus argumentos (conforme descrito abaixo) são removidos e salvos para processamento.

  2. As palavras restantes são expandidas conforme descrito na seção chamada "Expansões" e a primeira palavra restante é considerada o nome do comando e o comando está localizado. As palavras restantes são consideradas os argumentos do comando. Se nenhum nome de comando resultar, então as atribuições de variáveis ​​`` name = value '' reconhecidas no item 1 afetam o shell atual.

  3. Os redirecionamentos são executados conforme descrito na próxima seção.

Redirecionamentos

Redirecionamentos são usados ​​para alterar onde um comando lê sua entrada ou envia sua saída. Em geral, os redirecionamentos abrem, fecham ou duplicam uma referência existente para um arquivo. O formato geral usado para redirecionamento é:

n arquivo redirecionado

Onde redirecionamento é um dos operadores de redirecionamento mencionados anteriormente. A seguir, uma lista dos possíveis redirecionamentos. O Bq n é um número opcional, como em `3 '(não` Bq 3' que se refere a um descritor de arquivo.

arquivo n>

Redirecione a saída padrão (ou n) para arquivo.

n> | Arquivo

Mesmo, mas substituir o -C opção.

n >> arquivo

Anexar saída padrão (ou n) ao arquivo.

n <arquivo

Redirecionar a entrada padrão (ou n) do arquivo.

n1 <e n2

Duplicar entrada padrão (ou n1) do descritor de arquivo n2.

n <& -

Feche a entrada padrão (ou n).

n1> & n2

Saída padrão duplicada (ou n1) de n2.

n> & -

Fechar saída padrão (ou n).

arquivo n <>

Abra o arquivo para leitura e gravação na entrada padrão (ou n).

O seguinte redirecionamento é freqüentemente chamado de `` here-document ''

n << delimitador

aqui-doc-text …

delimitador

Todo o texto em linhas sucessivas até o delimitador é salvo e disponibilizado para o comando na entrada padrão ou descritor de arquivo n, se for especificado.Se o delimitador especificado na linha inicial for citado, o texto here-doc será tratado literalmente, caso contrário, o texto será submetido a expansão de parâmetro, substituição de comandos e expansão aritmética (conforme descrito na seção sobre Expansões). 'Se o operador for `` << -' 'em vez de `` <<' ', as guias principais no texto here-doc serão removidas.

Pesquisa e Execução

Existem três tipos de comandos: funções de shell, comandos internos e programas normais - e o comando é procurado (por nome) nessa ordem. Cada um deles é executado de maneira diferente.

Quando uma função shell é executada, todos os parâmetros posicionais do shell (exceto $ 0, que permanece inalterado) são definidos para os argumentos da função shell. As variáveis ​​que são colocadas explicitamente no ambiente do comando (colocando atribuições a elas antes do nome da função) são feitas locais para a função e são definidas para os valores fornecidos. Então o comando dado na definição da função é executado. Os parâmetros posicionais são restaurados para seus valores originais quando o comando é concluído. Tudo isso ocorre dentro do shell atual.

Os builtins de shell são executados internamente ao shell, sem gerar um novo processo.

Caso contrário, se o nome do comando não corresponder a uma função ou construído, o comando será procurado como um programa normal no sistema de arquivos (conforme descrito na próxima seção). Quando um programa normal é executado, o shell executa o programa, passando os argumentos e o ambiente para o programa. Se o programa não for um arquivo executável normal (isto é, se ele não começar com o "número mágico"ASCII representação é "#!", então execve (2) retorna Er ENOEXEC então) o shell irá interpretar o programa em um subshell. O shell filho será reinicializado neste caso, de modo que o efeito será como se um novo shell tivesse sido invocado para manipular o script shell ad-hoc, exceto que o local dos comandos hash localizados no shell pai será lembrado pelo shell. criança.

Note que as versões anteriores deste documento e o próprio código-fonte se referem erroneamente e esporadicamente a um script de shell sem um número mágico como um "procedimento de shell".

Pesquisa de caminho

Ao localizar um comando, o shell primeiro verifica se ele tem uma função de shell com esse nome. Em seguida, ele procura por um comando interno com esse nome. Se um comando interno não for encontrado, uma das duas coisas acontecerá:

  1. Os nomes dos comandos que contêm uma barra são simplesmente executados sem executar nenhuma pesquisa.

  2. O shell pesquisa cada entrada emCAMINHO por sua vez, para o comando. O valor doCAMINHOvariável deve ser uma série de entradas separadas por dois pontos. Cada entrada consiste em um nome de diretório. O diretório atual pode ser indicado implicitamente por um nome de diretório vazio ou explicitamente por um único período.

Status de Saída do Comando

Cada comando possui um status de saída que pode influenciar o comportamento de outros comandos do shell. O paradigma é que um comando sai com zero para normal ou com sucesso e diferente de zero para falha, erro ou uma indicação falsa. A página man de cada comando deve indicar os vários códigos de saída e o que eles significam. Além disso, os comandos internos retornam códigos de saída, assim como uma função de shell executada.

Comandos Complexos

Comandos complexos são combinações de comandos simples com operadores de controle ou palavras reservadas, criando juntos um comando complexo maior. Mais geralmente, um comando é um dos seguintes:

  • comando simples
  • gasoduto
  • lista ou lista composta
  • comando composto
  • definição de função

Salvo indicação em contrário, o status de saída de um comando é o último comando simples executado pelo comando.

Pipelines

Um pipeline é uma sequência de um ou mais comandos separados pelo operador de controle |. A saída padrão de todos, exceto o último comando, é conectada à entrada padrão do próximo comando. A saída padrão do último comando é herdada do shell, como de costume.

O formato para um pipeline é:

! comando1 | comando2 …

A saída padrão do comando1 é conectada à entrada padrão do comando2. Considera-se que a entrada padrão, a saída padrão ou os dois comandos sejam atribuídos pelo pipeline antes de qualquer redirecionamento especificado pelos operadores de redirecionamento que fazem parte do comando.

Se o pipeline não estiver em segundo plano (discutido posteriormente), o shell aguardará a conclusão de todos os comandos.

Se a palavra reservada! não precede o pipeline, o status de saída é o status de saída do último comando especificado no pipeline. Caso contrário, o status de saída é o NOT lógico do status de saída do último comando. Ou seja, se o último comando retornar zero, o status de saída será 1; se o último comando retornar maior que zero, o status de saída será zero.

Como a atribuição de pipeline de entrada padrão ou saída padrão ou ambos ocorre antes do redirecionamento, ela pode ser modificada por redirecionamento. Por exemplo:

$ command1 2> & 1 | comando2

envia a saída padrão e o erro padrão do comando1 para a entrada padrão do comando2.

UMA ; ou O terminador faz com que a lista AND-OR precedente (descrita a seguir) seja executada sequencialmente; a & causa a execução assíncrona da lista AND-OR precedente.

Note que diferentemente de outros shells, cada processo no pipeline é filho do shell invocador (a menos que seja um shell embutido, caso em que ele é executado no shell atual - mas qualquer efeito que ele tenha no ambiente é apagado).

Comandos de fundo -

Se um comando for finalizado pelo operador de controle "e comercial" (&), o shell executará o comando de forma assíncrona - ou seja, o shell não aguardará o término do comando antes de executar o próximo comando.

O formato para executar um comando em segundo plano é:

comando1 e comando2 e …

Se o shell não for interativo, a entrada padrão de um comando assíncrono será definida como / dev / null

Listas - geralmente falando

Uma lista é uma seqüência de zero ou mais comandos separados por novas linhas, ponto-e-vírgula ou "e" comercial e, opcionalmente, terminada por um desses três caracteres. Os comandos em uma lista são executados na ordem em que são gravados. Se o comando é seguido por um E comercial, o shell inicia o comando e prossegue imediatamente para o próximo comando; caso contrário, aguarda o término do comando antes de prosseguir para o próximo.

Operadores de lista de curto-circuito

`` && '' e `` || '' são operadores de lista AND-OR. `` && '' executa o primeiro comando e, em seguida, executa o segundo comando se o status de saída do primeiro comando for zero. `` || '' é semelhante, mas executa o segundo comando se o status de saída do primeiro comando for diferente de zero. `` && '' e `` || '' ambos têm a mesma prioridade.

Construções de Controle de Fluxo - if, while, for, case

A sintaxe do comando if é

se lista

então listar

lista elif

então lista …

else list

fi

A sintaxe do comando while é

enquanto lista

fazer lista

feito

As duas listas são executadas repetidamente enquanto o status de saída da primeira lista é zero. O comando until é semelhante, mas tem a palavra até no lugar de while, o que faz com que ele se repita até que o status de saída da primeira lista seja zero.

A sintaxe do comando for é

para variável na palavra …

fazer lista

feito

As palavras são expandidas e, em seguida, a lista é executada repetidamente com a variável definida para cada palavra por vez. fazer e feito pode ser substituído por `` {'' e ``} ''

A sintaxe do comando break and continue é

quebrar num

continue num

Break termina o numérico mais interno para ou enquanto loops. Continue continua com a próxima iteração do loop mais interno. Estes são implementados como comandos incorporados.

A sintaxe do comando case é

palavra do caso em

padrão) lista ;;

esac

O padrão pode na verdade ser um ou mais padrões (veja os Padrões de Shell descritos mais adiante), separados por caracteres `` ''.

Agrupando Comandos Juntos

Os comandos podem ser agrupados escrevendo-se

(Lista)

ou

{ Lista;

O primeiro deles executa os comandos em um subshell. Comandos incorporados agrupados em uma (lista) não afetarão o shell atual. O segundo formulário não bifurca outro shell, portanto, é um pouco mais eficiente. Agrupar comandos juntos dessa maneira permite redirecionar sua saída como se fossem um programa:

{printf ola; printf world n ";}> saudação

Funções

A sintaxe de uma definição de função é

comando name ()

Uma definição de função é uma instrução executável; quando executado, instala uma função chamada name e retorna um status de saída igual a zero. O comando é normalmente uma lista entre `` {'' e ``} ''

Variáveis ​​podem ser declaradas como locais para uma função usando um comando local. Isso deve aparecer como a primeira instrução de uma função, e a sintaxe é

local variável | - …

Local é implementado como um comando interno.

Quando uma variável é feita local, ela herda o valor inicial e os flags exportados e readonly da variável com o mesmo nome no escopo adjacente, se houver um. Caso contrário, a variável é inicialmente não definida. O shell usa escopo dinâmico, de modo que se você fizer a variável x local para a função f, que então chama a função g, referências à variável x feitas dentro de g se referirão à variável x declarada dentro de f, não à variável global chamada x .

O único parâmetro especial que pode ser feito local é `` - '' Tornando `` - '' local qualquer opção de shell que é alterada através do comando set dentro da função a ser restaurada para seus valores originais quando a função retorna.

A sintaxe do comando de retorno é

return exitstatus

Termina a função atualmente em execução. O retorno é implementado como um comando interno.

Variáveis ​​e Parâmetros

O shell mantém um conjunto de parâmetros. Um parâmetro denotado por um nome é chamado de variável. Ao iniciar, o shell transforma todas as variáveis ​​de ambiente em variáveis ​​de shell. Novas variáveis ​​podem ser definidas usando o formulário

name = value

Variáveis ​​definidas pelo usuário devem ter um nome que consiste apenas em alfabéticos, numéricos e sublinhados - o primeiro deles não deve ser numérico. Um parâmetro também pode ser indicado por um número ou um caractere especial, conforme explicado abaixo.

Parâmetros posicionais

Um parâmetro posicional é um parâmetro denotado por um número (n> 0). O shell os define inicialmente para os valores de seus argumentos de linha de comando que seguem o nome do script de shell. O conjunto (1) incorporado também pode ser usado para definir ou redefini-los.

Parâmetros Especiais

Um parâmetro especial é um parâmetro denotado por um dos seguintes caracteres especiais. O valor do parâmetro é listado ao lado de seu caractere.

*

Expande para os parâmetros posicionais, a partir de um. Quando a expansão ocorre dentro de uma string de aspas duplas, ela se expande para um único campo com o valor de cada parâmetro separado pelo primeiro caractere doIFS variável, ou por um E seIFS não está definido.

@

Expande para os parâmetros posicionais, a partir de um.Quando a expansão ocorre entre aspas duplas, cada parâmetro posicional se expande como um argumento separado. Se não houver parâmetros posicionais, a expansão de @ gerará zero argumentos, mesmo quando @ tiver aspas duplas. O que isto basicamente significa, por exemplo, é se $ 1 é `` abc '' e $ 2 é `` def ghi '', então Qq $ @ expande para os dois argumentos:

abc def ghi

#

Expande para o número de parâmetros posicionais.

?

Expande para o status de saída do pipeline mais recente.

- (hífen)

Expande para os flags de opções atuais (os nomes das opções de uma única letra concatenadas em uma string), conforme especificado na chamada, pelo comando set builtin ou implicitamente pelo shell.

$

Expande para o ID do processo do shell chamado. Um subshell retém o mesmo valor de $ como seu pai.

!

Expande para o ID do processo do comando de segundo plano mais recente executado a partir do shell atual. Para um pipeline, o ID do processo é o do último comando no pipeline.

0 (zero)

Expande para o nome do shell ou shell script.

Expansões de palavras

Esta cláusula descreve as várias expansões que são executadas em palavras. Nem todas as expansões são executadas em todas as palavras, conforme explicado posteriormente.

Expansões de til, expansões de parâmetros, substituições de comandos, expansões aritméticas e remoções de cotações que ocorrem em uma única palavra se expandem para um único campo. É apenas uma divisão de campo ou expansão de nome de caminho que pode criar vários campos a partir de uma única palavra. A única exceção a essa regra é a expansão do parâmetro especial @ entre aspas duplas, conforme descrito acima.

A ordem da expansão de palavras é:

  1. Expansão de til, expansão de parâmetro, substituição de comando, expansão aritmética (todas elas ocorrem ao mesmo tempo).

  2. A divisão de campos é executada nos campos gerados pelo passo (1) a menos queIFS variável é nula.

  3. Expansão do nome do caminho (a menos que seja definido -f está em vigor).

  4. Citação Remoção

O caractere $ é usado para introduzir expansão de parâmetro, substituição de comando ou avaliação aritmética.

Expansão de til (substituindo o diretório pessoal de um usuário)

Uma palavra que começa com um caractere de til sem marca (~) está sujeita à expansão de til. Todos os caracteres até uma barra (/) ou o final da palavra são tratados como um nome de usuário e são substituídos pelo diretório pessoal do usuário. Se o nome de usuário estiver faltando (como em ~ / foobar) o til é substituído pelo valor do CASA variável (o diretório inicial do usuário atual).

Expansão de Parâmetros

O formato para expansão de parâmetro é o seguinte:

$ {expression}

onde a expressão consiste em todos os caracteres até que a correspondência ``} '' Qualquer ``} '' escapado por uma barra invertida ou dentro de uma string entre aspas, e caracteres em expansões aritméticas incorporadas, substituições de comandos e expansões variáveis, não sejam examinados na determinação da correspondência ``} ''

A forma mais simples de expansão de parâmetros é:

$ {parameter}

O valor, se houver, do parâmetro é substituído.

O nome ou símbolo do parâmetro pode ser colocado entre chaves, que são opcionais, exceto para parâmetros posicionais com mais de um dígito ou quando o parâmetro é seguido por um caractere que pode ser interpretado como parte do nome. Se uma expansão de parâmetro ocorrer dentro de aspas duplas:

  1. A expansão do nome do caminho não é executada nos resultados da expansão.

  2. A divisão de campo não é executada nos resultados da expansão, com exceção de @.

Além disso, uma expansão de parâmetro pode ser modificada usando um dos seguintes formatos.

$ {parameter: -word}

Use valores padrão. Se o parâmetro não for definido ou nulo, a expansão da palavra será substituída; caso contrário, o valor do parâmetro é substituído.

$ {parameter: = palavra}

Atribuir Valores Padrão. Se o parâmetro não for definido ou nulo, a expansão da palavra será atribuída ao parâmetro. Em todos os casos, o valor final do parâmetro é substituído. Apenas variáveis, não parâmetros posicionais ou parâmetros especiais, podem ser atribuídos dessa maneira.

$ {parameter:? word}

Indique o erro se nulo ou desfeito. Se o parâmetro não for definido ou nulo, a expansão da palavra (ou uma mensagem indicando que não está definida se a palavra for omitida) é gravada no erro padrão e o shell sai com um status de saída diferente de zero. Caso contrário, o valor do parâmetro é substituído. Um shell interativo não precisa sair.

$ {parameter: + word}

Use o valor alternativo. Se o parâmetro não for definido ou nulo, o valor null será substituído; caso contrário, a expansão da palavra é substituída.

Nas expansões de parâmetro mostradas anteriormente, o uso do sinal de dois pontos no formato resulta em um teste para um parâmetro que não está definido ou é nulo; a omissão do cólon resulta em um teste para um parâmetro que é apenas indefinido.

$ {# parameter}

Comprimento Da Corda. O comprimento em caracteres do valor do parâmetro.

As seguintes quatro variedades de expansão de parâmetro fornecem processamento de substring. Em cada caso, a notação de correspondência de padrões (consulte Padrões de Shell), em vez da notação de expressão regular, é usada para avaliar os padrões. Se o parâmetro for * ou @, o resultado da expansão não será especificado. Colocar a string de expansão de parâmetro completa entre aspas duplas não faz com que as quatro variedades de caracteres de padrão a seguir sejam citadas, enquanto que a citação de caracteres dentro das chaves tem esse efeito.

$ {parameter% word}

Remova o menor padrão de sufixo. A palavra é expandida para produzir um padrão. A expansão do parâmetro resulta em parâmetro, com a menor porção do sufixo correspondida pelo padrão excluído.

$ {parameter %% word}

Remover o maior padrão de sufixo.A palavra é expandida para produzir um padrão. A expansão do parâmetro resulta em parâmetro, com a maior parte do sufixo correspondido pelo padrão excluído.

$ {parameter # word}

Remover o menor padrão de prefixo. A palavra é expandida para produzir um padrão. A expansão do parâmetro resulta em parâmetro, com a menor parte do prefixo correspondido pelo padrão excluído.

$ {parameter ## word}

Remover o maior padrão de prefixo. A palavra é expandida para produzir um padrão. A expansão do parâmetro resulta em parâmetro, com a maior parte do prefixo correspondido pelo padrão excluído.

Substituição de Comando

A substituição de comandos permite que a saída de um comando seja substituída no lugar do próprio nome do comando. A substituição de comandos ocorre quando o comando é colocado da seguinte forma:

$ (comando)

ou Po versão `backquoted '' Pc:

`comando`

O shell expande a substituição do comando executando o comando em um ambiente subshell e substituindo a substituição do comando pela saída padrão do comando, removendo as seqüências de um ou mais s no final da substituição. (Embutido s antes do final da saída não são removidos; no entanto, durante a divisão de campo, eles podem ser traduzidos em s, dependendo do valor deIFS e citando que está em vigor.)

Expansão aritmética

A expansão aritmética fornece um mecanismo para avaliar uma expressão aritmética e substituir seu valor. O formato para expansão aritmética é o seguinte:

$ ((expressão))

A expressão é tratada como se estivesse entre aspas duplas, exceto que uma aspa dupla dentro da expressão não é tratada especialmente. O shell expande todos os tokens na expressão para expansão de parâmetro, substituição de comando e remoção de cotação.

Em seguida, o shell trata isso como uma expressão aritmética e substitui o valor da expressão.

Divisão de espaço em branco (divisão de campo)

Após expansão de parâmetro, substituição de comando e expansão aritmética, o shell examina os resultados de expansões e substituições que não ocorreram entre aspas duplas para a divisão de campo e vários campos podem resultar.

O shell trata cada caractere doIFS como um delimitador e use os delimitadores para dividir os resultados da expansão de parâmetros e a substituição de comandos em campos.

Expansão de nome de caminho (Geração de nome de arquivo)

A menos que o -f flag é definido, a geração do nome do arquivo é executada após a divisão de palavras ser concluída. Cada palavra é vista como uma série de padrões, separados por barras. O processo de expansão substitui a palavra pelos nomes de todos os arquivos existentes cujos nomes podem ser formados, substituindo cada padrão por uma cadeia que corresponda ao padrão especificado. Há duas restrições sobre isso: primeiro, um padrão não pode corresponder a uma sequência contendo uma barra e, segundo, um padrão não pode corresponder a uma cadeia que começa com um ponto, a menos que o primeiro caractere do padrão seja um ponto. A próxima seção descreve os padrões usados ​​para a expansão do nome do caminho e o comando case (1).

Padrões de Shell

Um padrão consiste em caracteres normais, que correspondem a eles e meta-caracteres. Os metacaracteres são ``! '' `` * '' ``? '' E `` '' Esses caracteres perdem seus significados especiais se forem citados. Quando a substituição de comando ou variável é executada e aspas de cifrão ou de retrocesso não são duplas, o valor da variável ou a saída do comando é escaneada para esses caracteres e eles são transformados em meta-caracteres.

Um asterisco (`` * '') corresponde a qualquer cadeia de caracteres. Um ponto de interrogação corresponde a qualquer caractere único. Um colchete esquerdo (`` '') introduz uma classe de caractere. O fim da classe de caracteres é indicado por um (`` '') se o `` '' estiver faltando, então o `` '' corresponde a um `` '' ao invés de introduzir uma classe de caractere. Uma classe de caractere corresponde a qualquer um dos caracteres entre os colchetes. Um intervalo de caracteres pode ser especificado usando um sinal de menos. A classe de caractere pode ser complementada por um ponto de exclamação no primeiro caractere da classe de caractere.

Para incluir um `` '' em uma classe de caractere, torne-o o primeiro caractere listado (após o ``! '', Se houver). Para incluir um sinal de menos, torne-o o primeiro ou último caractere listado

Builtins

Esta seção lista os comandos incorporados que são incorporados porque precisam executar alguma operação que não pode ser executada por um processo separado. Além destes, existem vários outros comandos que podem ser construídos para eficiência (por exemplo, echo 1).

:

Um comando nulo que retorna um valor de saída 0 (true).

. Arquivo

Os comandos no arquivo especificado são lidos e executados pelo shell.

alias nome = string …

E se name = string é especificado, o shell define o alias nome com valor corda Se apenas nome é especificado, o valor do alias nome é impresso. Sem argumentos, oalias builtin imprime os nomes e valores de todos os aliases definidosunalias)

bg trabalho …

Continue os trabalhos especificados (ou o trabalho atual se nenhum trabalho for fornecido) em segundo plano.

comando comando arg …

Execute o comando interno especificado. (Isso é útil quando você tem uma função de shell com o mesmo nome de um comando interno).

CD diretório

Alterne para o diretório especificado (padrão$ HOME) Se uma entrada paraCDPATH aparece no ambiente daCD comando ou a variável shellCDPATH está definido e o nome do diretório não começa com uma barra, então os diretórios listadosCDPATH será procurado pelo diretório especificado. O formato deCDPATH é o mesmo que o deCAMINHO Em um shell interativo, oCD comando irá imprimir o nome do diretório que ele realmente mudou para se isso é diferente do nome que o usuário deu. Estes podem ser diferentes porque oCDPATH mecanismo foi usado ou porque um link simbólico foi cruzado.

eval corda…

Concatene todos os argumentos com espaços. Em seguida, re-analisar e executar o comando.

exec comando arg …

A menos que o comando seja omitido, o processo do shell é substituído pelo programa especificado (que deve ser um programa real, não um shell embutido ou função). Quaisquer redirecionamentos noexeccomando são marcados como permanentes, para que não sejam desfeitos quandoexec comando termina.

Saída exitstatus

Terminar o processo de shell. E se exitstatus é dado que é usado como o status de saída do shell; caso contrário, o status de saída do comando anterior será usado.

exportar nome…

exportar -p

Os nomes especificados são exportados para que apareçam no ambiente de comandos subseqüentes. A única maneira de desexportar uma variável é desativá-la. O shell permite que o valor de uma variável seja definido ao mesmo tempo em que é exportado por escrito

nome da exportação = valor

Sem argumentos, o comando de exportação lista os nomes de todas as variáveis ​​exportadas. Com o -popção especificada a saída será formatada adequadamente para uso não interativo.

fc-e editor primeiro último

fc -l -nr primeiro último

fc -s antigo = novo primeiro

ofc listas embutidas, ou edita e re-executa, comandos previamente inseridos em um shell interativo.

editor -e

Use o editor nomeado pelo editor para editar os comandos. A cadeia do editor é um nome de comando, sujeito a pesquisa através doCAMINHO variável. O valor noFCEDIT variável é usada como padrão quando -e não é especificado. E seFCEDIT é nulo ou não definido, o valor doEDITOR variável é usada. E seEDITOR é nulo ou não definido, ed (1) é usado como editor.

-l (ell)

Listar os comandos em vez de invocar um editor neles. Os comandos são escritos na seqüência indicada pelo primeiro e último operandos, afetados por -r com cada comando precedido pelo número do comando.

-n

Suprima os números de comando ao listar com -l.

-r

Inverta a ordem dos comandos listados (com -eu ou editado (com nenhum -eu nems)

-s

Execute novamente o comando sem invocar um editor.

primeiro

último

Selecione os comandos para listar ou editar. O número de comandos anteriores que podem ser acessados ​​é determinado pelo valor doHISTSIZE variável. O valor de primeiro ou último ou ambos é um dos seguintes:

+ número

Um número positivo representando um número de comando; números de comando podem ser exibidos com o -eu opção.

-número

Um número decimal negativo representando o comando que foi executado número de comandos anteriormente. Por exemplo, -1 é o comando imediatamente anterior.

corda

Uma string indicando o comando inserido mais recentemente que começa com essa string. Se o antigo = novo operando não for especificado também com -s a forma de cadeia do primeiro operando não pode conter um sinal de igual incorporado.

As seguintes variáveis ​​de ambiente afetam a execução de fc:

FCEDIT

Nome do editor a ser usado.

HISTSIZE

O número de comandos anteriores que estão acessíveis.

fg trabalho

Mova o trabalho especificado ou o trabalho atual para o primeiro plano.

getopts optstring var

oPOSIX getopts comando, para não ser confundido com o Bell Labs getopt derivado (1).

O primeiro argumento deve ser uma série de letras, cada uma das quais pode ser opcionalmente seguida por dois pontos para indicar que a opção requer um argumento. A variável especificada é configurada para a opção analisada.

ogetopts O comando descontinua o utilitário getopt (1) mais antigo devido à manipulação de argumentos que contêm espaço em branco.

ogetopts builtin pode ser usado para obter opções e seus argumentos a partir de uma lista de parâmetros. Quando invocado,getopts coloca o valor da próxima opção da cadeia de opções na lista na variável shell especificada por var e é índice na variável shellOPTIND Quando o shell é invocado,OPTIND é inicializado como 1. Para cada opção que requer um argumento, ogetopts builtin irá colocá-lo na variável shellOPTARG Se uma opção não for permitida no optstring entãoOPTARG será desfeito.

optstring é uma cadeia de letras de opções reconhecidas. Se uma letra for seguida por dois-pontos, espera-se que a opção tenha um argumento que pode ou não ser separado dela por espaço em branco. Se um caractere de opção não for encontrado onde esperado,getopts irá definir a variável var para um ``? ''getopts irá então desarmarOPTARG e grava a saída para erro padrão. Ao especificar um cólon como o primeiro caractere de optstring todos os erros serão ignorados.

Um valor diferente de zero é retornado quando a última opção é atingida. Se não houver argumentos restantes,getopts irá definir var para a opção especial, `` - '' caso contrário, ele irá definir var para ``? ''

O seguinte fragmento de código mostra como alguém pode processar os argumentos para um comando que pode pegar as opções a e b e a opção c que requer um argumento.

enquanto getopts abc: fFazcase $ f ina | b) flag = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; saída 1;esacfeitoshift ʻexpr $ OPTIND - 1`

Este código aceita qualquer um dos seguintes como equivalentes:

arquivo de arquivo cmd -acargarquivo de arquivo cmd -a -c argcmd -carg -a arquivo de arquivocmd -a -carg - arquivo

hash -rv comando…

O shell mantém uma tabela de hash que lembra os locais dos comandos. Sem argumentos, ojogo da velha comando imprime o conteúdo desta tabela. Entradas que não foram consideradas desde a últimaCD comando são marcados com um asterisco; É possível que essas entradas sejam inválidas.

Com argumentos, ojogo da velha comando remove os comandos especificados da tabela de hash (a menos que sejam funções) e, em seguida, os localiza. Com o -v opção, o hash imprime os locais dos comandos conforme os encontra. O -r Essa opção faz com que o comando hash exclua todas as entradas na tabela de hash, exceto as funções.

ID de trabalho trabalho

Imprima os ids do processo dos processos no trabalho. Se o trabalho argumento é omitido, o trabalho atual é usado.

empregos

Esse comando lista todos os processos em segundo plano que são filhos do processo shell atual.

pwd

Imprima o diretório atual. O comando interno pode diferir do programa com o mesmo nome porque o comando interno lembra o que é o diretório atual em vez de recomputá-lo a cada vez. Isso torna mais rápido. No entanto, se o diretório atual for renomeado, a versão incorporadapwd continuará a imprimir o nome antigo do diretório.

ler-p pronto -r variável…

O prompt é impresso se o -p opção é especificada e a entrada padrão é um terminal. Em seguida, uma linha é lida da entrada padrão. A nova linha final é excluída da linha e a linha é dividida conforme descrito na seção sobre divisão de palavras acima, e as partes são atribuídas às variáveis ​​na ordem. Pelo menos uma variável deve ser especificada. Se houver mais peças que variáveis, as peças restantes (junto com os caracteresIFS que os separaram) são atribuídos à última variável. Se houver mais variáveis ​​do que partes, as variáveis ​​restantes são atribuídas à cadeia nula. oler builtin indicará sucesso a menos que EOF seja encontrado na entrada, caso em que a falha será retornada.

Por padrão, a menos que o -r opção é especificada, a barra invertida `` '' atua como um caractere de escape, fazendo com que o caractere seguinte seja tratado literalmente. Se uma barra invertida for seguida por uma nova linha, a barra invertida e a nova linha serão excluídas.

somente leitura nome…

readonly -p

Os nomes especificados são marcados como somente leitura, para que não possam ser modificados ou desfeitos posteriormente. O shell permite que o valor de uma variável seja definido ao mesmo tempo em que é marcado como somente leitura por escrito

readonly nome = valor

Sem argumentos, o comando readonly lista os nomes de todas as variáveis ​​somente de leitura. Com o -p opção especificada a saída será formatada adequadamente para uso não interativo.

conjunto { -opções | + opções | - arg …

oconjunto comando executa três funções diferentes.

Sem argumentos, lista os valores de todas as variáveis ​​do shell.

Se as opções forem fornecidas, ele define os sinalizadores de opção especificados ou os limpa conforme descrito na seção chamada Processamento de lista de argumentos Sx.

O terceiro uso do comando set é definir os valores dos parâmetros posicionais do shell para os args especificados. Para alterar os parâmetros posicionais sem alterar nenhuma opção, use `` - '' como o primeiro argumento a ser definido. Se nenhum args estiver presente, o comando set irá limpar todos os parâmetros posicionais (equivalente a executar `` shift $ #. ''

valor variável

Atribui valor à variável. (Em geral, é melhor escrever variável = valor em vez de usarsetvar setvardestina-se a ser usado em funções que atribuem valores a variáveis ​​cujos nomes são passados ​​como parâmetros.

mudança n

Mude os parâmetros posicionais n vezes. UMAmudança define o valor de $1 para o valor de $2 o valor de $2 para o valor de $3 e assim por diante, diminuindo o valor de $# por um. Se n for maior que o número de parâmetros posicionais,mudança emitirá uma mensagem de erro e sairá com o status de retorno 2.

vezes

Imprima o tempo acumulado do usuário e do sistema para o shell e para os processos executados a partir do shell. O status de retorno é 0.

armadilha açao sinal…

Faz com que o shell analise e execute a ação quando qualquer um dos sinais especificados for recebido. Os sinais são especificados pelo número do sinal. E se sinal é0 a ação é executada quando o shell sai. açao pode ser nulo ou `` - '' o primeiro faz com que o sinal especificado seja ignorado e o último faz com que a ação padrão seja tomada. Quando o shell se separa de um subshell, ele redefine sinais (mas não ignorados) para a ação padrão. oarmadilha comando não tem efeito sobre os sinais que foram ignorados na entrada para o shell.

tipo nome …

Interprete cada nome como um comando e imprima a resolução da pesquisa de comandos. As possíveis resoluções são: palavra-chave shell, alias, shell embutido, comando, alias rastreado e não encontrado. Para aliases, a expansão de alias é impressa; para comandos e aliases rastreados, o caminho completo do comando é impresso.

ulimit-H-S -a-tfdscmlpn valor

Informe-se sobre ou defina os limites rígidos ou flexíveis dos processos ou defina novos limites.A escolha entre o limite rígido (que nenhum processo é permitido violar, e que não pode ser aumentado depois de baixado) e o limite suave (que faz com que os processos sejam sinalizados mas não necessariamente mortos, e que podem ser gerados) é feito com estas bandeiras:

-H

definir ou perguntar sobre limites rígidos

-S

definir ou perguntar sobre limites suaves. Se nenhum dos doisH nemS for especificado, o limite suave será exibido ou ambos os limites serão definidos. Se ambos forem especificados, o último ganha.

O limite a ser interrogado ou definido, então, é escolhido especificando qualquer um desses flags:

-uma

mostre todos os limites atuais

-t

mostre ou ajuste o limite no tempo de CPU (nos segundos)

-f

mostra ou define o limite no maior arquivo que pode ser criado (em blocos de 512 bytes)

-d

mostra ou define o limite no tamanho do segmento de dados de um processo (em kilobytes)

-s

mostra ou define o limite no tamanho da pilha de um processo (em kilobytes)

-c

mostra ou define o limite no maior tamanho de dump principal que pode ser produzido (em blocos de 512 bytes)

-m

mostra ou define o limite da memória física total que pode estar em uso por um processo (em kilobytes)

-eu

mostra ou define o limite de quanta memória um processo pode bloquear com mlock (2) (em kilobytes)

-p

mostre ou ajuste o limite no número de processos que este usuário pode ter ao mesmo tempo

-n

mostrar ou definir o limite dos arquivos numéricos que um processo pode ter aberto de uma só vez

Se nenhum deles for especificado, é o limite de tamanho de arquivo mostrado ou definido. Se o valor for especificado, o limite será definido para esse número; caso contrário, o limite atual é exibido.

Limites de um processo arbitrário podem ser exibidos ou definidos usando o utilitário sysctl (8).

umask mascarar

Defina o valor de umask (consulte umask (2)) para o valor octal especificado. Se o argumento for omitido, o valor umask será impresso.

unalias-uma nome

E se nome é especificado, o shell remove esse alias. E se -uma for especificado, todos os aliases serão removidos.

não definido nome…

As variáveis ​​e funções especificadas são não definidas e não exportadas. Se um dado nome corresponder a uma variável e a uma função, a variável e a função não são definidas.

esperar trabalho

Aguarde a conclusão do trabalho especificado e retorne o status de saída do último processo no trabalho. Se o argumento for omitido, aguarde a conclusão de todos os trabalhos e retorne um status de saída igual a zero.

Edição de linha de comando

Quandosh está sendo usado interativamente a partir de um terminal, o comando atual e o histórico de comandofc em Sx Builtins) pode ser editado usando a edição de linha de comando do modo vi. Este modo usa comandos, descritos abaixo, semelhantes a um subconjunto daqueles descritos na página vi man. O comando `set '-o vi habilita a edição no modo vi e o coloca no modo de inserção vi. Com o modo vi ativado, sh pode ser alternado entre o modo de inserção e o modo de comando. O editor não está descrito na íntegra aqui, mas estará em um documento posterior. É semelhante ao vi: digitar Aq ESC irá colocá-lo no modo de comando VI. Atingir o retorno de Aq no modo de comando passará a linha para o shell.

Use o homem comando ( % homem ) para ver como um comando é usado em seu computador particular.