Como Usar Expansões $ () e $ {} em um Shell Script

How Use Expansions Shell Script



Se estiver usando um sistema Linux, você já deve saber o quão crucial é uma interface de shell para interagir com seu sistema. Na maioria das distribuições do Linux, o Bash é o shell padrão que usamos para executar comandos e scripts. Um script de shell é um conjunto de comandos que, quando executado, é usado para realizar algumas funções úteis no Linux. Este arquivo .sh, escrito por um usuário, contém todos os comandos usados ​​para realizar uma tarefa para que não tenhamos que executar esses comandos manualmente, um por um.

Neste tutorial, explicaremos duas das expansões bash mais úteis usadas em scripts de shell:







  • $ () - a substituição do comando
  • $ {} - a substituição do parâmetro / expansão da variável

Uma expansão no Shell é executada no script depois que ele foi dividido em tokens. Um token é uma sequência de caracteres considerada uma única unidade pelo shell. Pode ser uma palavra ou um operador.



Executamos todos os exemplos e scripts mencionados neste artigo em um sistema Debian 10 Buster. No entanto, você pode replicá-los facilmente na maioria dos shells do Linux. Estamos usando a linha de comando padrão do Debian, o Terminal, para este tutorial. No Debian, você pode acessá-lo por meio da barra de pesquisa do Application Launcher da seguinte maneira:







Para acessar o lançador de aplicativos, basta pressionar a tecla Super / Windows em seu teclado.

$ () Substituição de Comando

De acordo com o manual oficial de referência GNU Bash:



A substituição de comando permite a saída de um comando para substituir o próprio comando. O Bash executa a expansão executando o comando e substituindo a substituição do comando pela saída padrão do comando, com quaisquer novas linhas finais excluídas. As novas linhas incorporadas não são excluídas, mas podem ser removidas durante a divisão de palavras. A substituição do comando ocorre quando um comando é colocado da seguinte maneira:

$(comando)
ou
``comando``

Por exemplo, os seguintes comandos de eco substituem a saída do comando de data como sua entrada:

$jogou fora$(encontro)
$jogou fora'encontro'

Você também pode usar a substituição de comando para atribuir valor a uma variável. Por exemplo, imprimiremos a data de hoje por meio da variável TODAY da seguinte forma:

$HOJE= $(encontro)
$jogou fora '$ TODAY'

Outro utilitário da substituição do comando está em loops de shell para obter a entrada. Aqui, tentaremos imprimir todos os arquivos .txt em nossa pasta inicial usando a substituição do comando:

parafno /casa/para você/ *.TXT
Faz
jogou fora '$ f'
feito

Usando Substituição de Comando em um Script Shell

Os exemplos acima são algumas maneiras pelas quais você pode utilizar o poder da substituição de comandos em seu script de shell. Aqui está um exemplo de relatório de status que podemos imprimir usando o seguinte script de shell:

#! / bin / sh

jogou fora ***Relatório de Status***

HOJE= $(encontro)
jogou fora 'Hoje é$ TODAY'

COMERCIAL= $(quem | banheiro-a)
jogou fora '$ USERSos usuários estão logados no momento '

TEMPO DE ATIVIDADE= $(encontro;tempo de atividade)
jogou fora 'O tempo de atividade é$ UPTIME'

A substituição de comando foi usada três vezes neste script; na impressão da data, usuários logados e tempo de atividade. Salvamos o script da seguinte maneira:

Tornou-o executável e depois o executou por meio do seguinte comando:

$chmod+ x status.sh
$./statys.sh

Aqui está a saída do nosso script status.sh:

Você pode, é claro, criar scripts mais significativos seguindo os exemplos que acabamos de mencionar.

$ {} Substituição / Expansão de Parâmetro

Um parâmetro, no Bash, é uma entidade usada para armazenar valores. Um parâmetro pode ser referenciado por um número, um nome ou um símbolo especial. Quando um parâmetro é referenciado por um número, ele é chamado de parâmetro posicional . Quando um parâmetro é referenciado por um nome, ele é chamado de variável . Quando um parâmetro é referenciado por um símbolo especial, significa que são parâmetros de autoset com usos especiais.

Expansão / substituição de parâmetro é o processo de buscar o valor da entidade / parâmetro referenciado. É como se você estivesse expandindo uma variável para buscar seu valor.

A sintaxe de expansão de parâmetro mais simples possível é a seguinte:

Aqui está como você pode usar a expansão de parâmetro no Bash:

$ {parameter}

Por exemplo, o uso mais simples é substituir o parâmetro por seu valor:

$nome='john doe'
$jogou fora $ {name}

Este comando substituirá o valor do nome da variável a ser usado pelo comando echo:

Você pode estar pensando que o mesmo pode ser alcançado evitando as chaves da seguinte maneira:

A resposta é que durante a expansão do parâmetro, essas chaves ajudam a delimitar o nome da variável. Deixe-nos explicar o que queremos dizer com limitação aqui. Deixe-me executar o seguinte comando em meu sistema:

$jogou fora 'O nome da pessoa é$ name_'

O resultado não imprimiu o valor do nome da variável porque o sistema pensou que eu estava me referindo à variável nome_. Portanto, meu nome de variável não foi delimitado. As chaves no exemplo a seguir delimitarão o nome da variável e retornarão os resultados da seguinte maneira:

$jogou fora 'O nome da pessoa é$ {name}_ '

Aqui estão todas as maneiras pelas quais as variáveis ​​são substituídas no Shell:

$ {variable} Este comando substitui o valor da variável.
$ {variável: -palavra} Se uma variável for nula ou se não for definida, palavra é substituída por variável. O valor da variável não muda.
$ {variável: = palavra} Se uma variável for nula ou se não for definida, o valor da variável será definido como palavra.
$ {variável:? mensagem} Se uma variável for nula ou se não for definida, a mensagem é impressa com o erro padrão do bash.
$ {variável: + palavra} Se variável está definido, palavra é substituído por variável. No entanto, o valor da variável em si não muda.

Os exemplos acima são algumas maneiras pelas quais você pode utilizar o poder de substituição de variáveis ​​no Bash. Você pode incorporar essas maneiras de usar a expansão em seus scripts de shell para realizar de forma otimizada sua tarefa em mãos.