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ê/ *.TXTFaz
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 / shjogou 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.