Ler e gravar arquivos com Bash
Aprenda as diferentes maneiras como o Bash lê e grava dados e quando usar cada método.
Ao criar scripts com Bash, às vezes você precisa ler ou gravar dados em um arquivo. Às vezes, um arquivo pode conter opções de configuração e outras vezes o arquivo são os dados que seu usuário está criando com seu aplicativo. Cada linguagem lida com essa tarefa de maneira um pouco diferente, e este artigo demonstra como lidar com arquivos de dados com Bash e outros shells POSIX.
Instalar o Bash
Se você usa Linux, provavelmente já possui o Bash. Caso contrário, você pode encontrá-lo em seu repositório de software.
No macOS, você pode usar o terminal padrão, Bash ou Zsh, dependendo da versão do macOS que você está executando.
No Windows, existem várias maneiras de experimentar o Bash, incluindo o Windows Subsystem for Linux (WSL) oficialmente suportado pela Microsoft.
Depois de instalar o Bash, abra seu editor de texto favorito e prepare-se para codificar.
Lendo um arquivo com Bash
Além de ser um shell, o Bash é uma linguagem de script. Existem várias maneiras de ler dados do Bash: você pode criar uma espécie de fluxo de dados e analisar a saída ou pode carregar dados na memória. Ambos são métodos válidos de ingestão de informações, mas cada um tem casos de uso bastante específicos.
Fonte de um arquivo no Bash
Quando você "fonte" um arquivo no Bash, você faz com que o Bash leia o conteúdo de um arquivo com a expectativa de que ele contenha dados válidos que o Bash possa ajustar em seu modelo de dados estabelecido. Você não obterá dados de nenhum arquivo antigo, mas poderá usar esse método para ler arquivos de configuração e funções.
Por exemplo, crie um arquivo chamado example.sh
e insira isto nele:
#!/bin/sh
greet opensource.com
echo "The meaning of life is $var"
Execute o código para ver se ele falha:
$ bash ./example.sh
./example.sh: line 3: greet: command not found
The meaning of life is
O Bash não possui um comando chamado greet
, portanto não poderia executar essa linha e não possui registro de uma variável chamada var
, portanto não há significado conhecido de vida. Para corrigir esse problema, crie um arquivo chamado include.sh
:
greet() {
echo "Hello ${1}"
}
var=42
Revise seu script example.sh
para incluir um comando source
:
#!/bin/sh
source include.sh
greet opensource.com
echo "The meaning of life is $var"
Execute o script para ver funcionar:
$ bash ./example.sh
Hello opensource.com
The meaning of life is 42
O comando greet
é trazido para o seu ambiente shell porque é definido no arquivo include.sh
e até reconhece o argumento (opensource.com
neste exemplo). A variável var
também é definida e importada.
Analisar um arquivo no Bash
A outra maneira de inserir dados no Bash é analisá-los como um fluxo de dados. Existem diversas formas de fazer isto. Você pode usar grep
ou cat
ou qualquer comando que pegue dados e os canalize para stdout. Como alternativa, você pode usar o que está integrado no Bash: o redirecionamento. O redirecionamento por si só não é muito útil, portanto, neste exemplo, também uso o comando echo
integrado para imprimir os resultados do redirecionamento:
#!/bin/sh
echo $( < include.sh )
Salve como stream.sh
e execute-o para ver os resultados:
$ bash ./stream.sh
greet() { echo "Hello ${1}" } var=42
$
Para cada linha no arquivo include.sh
, o Bash imprime (ou ecoa) a linha em seu terminal. Canalizá-lo primeiro para um analisador apropriado é uma maneira comum de ler dados com o Bash. Por exemplo, suponha por um momento que include.sh
é um arquivo de configuração com pares de chave e valor separados por um sinal de igual (=
). Você poderia obter valores com awk
ou mesmo cut
:
#!/bin/sh
myVar=`grep var include.sh | cut -d'=' -f2`
echo $myVar
Tente executar o script:
$ bash ./stream.sh
42
Gravando dados em um arquivo com Bash
Esteja você armazenando dados criados pelo usuário com seu aplicativo ou apenas metadados sobre o que o usuário fez em um aplicativo (por exemplo, jogos salvos ou músicas reproduzidas recentemente), há muitos bons motivos para armazenar dados para uso posterior. No Bash, você pode salvar dados em arquivos usando o redirecionamento de shell comum.
Por exemplo, para criar um novo arquivo contendo saída, use um único token de redirecionamento:
#!/bin/sh
TZ=UTC
date > date.txt
Execute o script algumas vezes:
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:06 UTC 2021
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
Para anexar dados, use os tokens de redirecionamento duplo:
#!/bin/sh
TZ=UTC
date >> date.txt
Execute o script algumas vezes:
$ bash ./date.sh
$ bash ./date.sh
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
Tue Feb 23 22:25:17 UTC 2021
Tue Feb 23 22:25:19 UTC 2021
Tue Feb 23 22:25:22 UTC 2021
Bash para fácil programação
Bash é excelente por ser fácil de aprender porque, com apenas alguns conceitos básicos, você pode construir programas complexos. Para a documentação completa, consulte a excelente documentação do Bash em GNU.org.