Este tutorial discute como você pode facilmente escrever seus próprios scripts Bash no Linux.

Como administrador de sistemas, é bem provável que você esteja executando tarefas repetitivas que poderiam ser automatizadas.

Felizmente para si, existe uma linguagem de programação que pode ser usada no Linux para escrever scripts : a linguagem de programação Bash.

Utilizando Bash, pode agendar backups do sistema inteiro especificando quantos comandos quiser nos scripts Bash.

Tambem pode ter scripts personalizados que criam e excluem utilizadores e removem os seus ficheiros associados.

Com o Bash, você também pode ter scripts rodando e despejando métricas de desempenho úteis para um arquivo ou banco de dados.

Bash é uma linguagem de programação muito poderosa para administradores de sistema.

No tutorial de hoje, vamos aprender todas as noções básicas que há para saber sobre o Bash : como criar e rodar scripts, como usar variáveis e shell built-ins de forma eficaz.

Tabela de Conteúdos

O que você vai aprender

Se você ler este tutorial até o final, você vai aprender sobre os seguintes conceitos relacionados ao Bash

  • Como criar e executar scripts Bash usando a linha de comando;
  • O que é o shebang e como ele é usado pelo Linux para scripting;
  • O que são os built-ins da shell e como eles diferem dos programas regulares do sistema;
  • Como usar variáveis do Bash e que variáveis especiais são;
  • Como usar substituição de comandos do Bash;
  • Como usar instruções simples IF no Bash;

Como você pode ver, este é um programa bastante longo, então sem mais delongas, vamos começar vendo como você pode criar e executar scripts Bash.

Começando com Bash

Antes de emitir quaisquer comandos, vamos dar uma palavrinha rápida sobre as histórias comuns do Bash e do Shell.

História do Bash

A primeira versão do Bash shell foi lançada em 1989 por Brian Fox e vem como uma implementação open-source do shell Unix.

Voltar então, quando os sistemas Unix começaram a surgir, tais sistemas estavam a usar shells Unix padrão chamadas Bourne shells.

Image from LinuxJournal

No início do Unix, os sistemas desenvolvidos por empresas como o MIT ou Bell Labs não eram livres e não eram open-source.

Even se fosse fornecida documentação para essas ferramentas, tornou-se uma prioridade para a iniciativa GNU (liderada por Richard Stallman) ter sua própria versão do Unix Shell.

Seis anos depois de anunciar o projeto GNU, o shell Bash (Bourne-Again Shell) nasceu com ainda mais recursos do que o shell original Bourne.

Linguagem de programação Bash

Ao trabalhar com um sistema parecido com o Unix, como o Linux, o Bash geralmente tem dois significados :

  • Bash é um interpretador de linha de comando ou, em outras palavras, um shell Unix. Isso significa que sempre que você estiver abrindo um terminal, você estará diante de uma shell Unix que é na maioria das vezes uma shell Bash.

Quando você digita comandos diretamente no terminal, os comandos são interpretados pela shell, executados usando chamadas de sistema e valores de retorno são devolvidos ao usuário final.

Se você não está certo sobre o interpretador atual que você está usando, a variável de ambiente SHELL indica qual shell você está usando atualmente.

$ printenv SHELL

Como você pode ver, neste caso, estamos usando corretamente o interpretador de comandos Bash para trabalhar.

É importante notar que mesmo que termos como “Bash scripting” e “Shell scripting” sejam usados de forma intercambiável, eles podem não descrever a mesma coisa dependendo da sua distribuição.

algumas distribuições recentes (como a Debian 10) têm links simbólicos da shell Bourne original (chamada sh) para as suas próprias implementações shell (neste caso Dash ou Debian Almquist shell)

  • Bash também está a descrever uma linguagem de linha de comandos e também é referida como a linguagem Bash. Bash expõe um conjunto de operadores e operandos que podem ser usados para ter algumas características básicas, como piping ou executar comandos múltiplos ao mesmo tempo.

Ao executar algum pipe básico, você é usado para trabalhar com o símbolo “|”. Este símbolo faz parte da linguagem de linha de comando Bash.

A mesma lógica vai para o símbolo “&&” que executa o segundo comando se, e só se, o primeiro comando tiver sucesso.

$ command1 && command2

Criar e executar scripts Bash

Agora você tem algum background sobre a shell Bash e a linguagem de linha de comando Bash, vamos começar por criar e executar scripts Bash simples.

A fim de criar seu primeiro script Bash, simplesmente crie um arquivo chamado “script.sh”.

Como você provavelmente já deve ter notado, ainda estamos usando a extensão “sh” referindo-se ao shell original do Bourne (também denotado como sh).

$ touch script.sh

Agora criar um ficheiro terminando com a extensão “sh” não é suficiente para o seu script ser considerado como um script Shell.

Você pode realmente ver que o seu ficheiro ainda não é considerado como um script shell executando o comando file.

$ file script.sh

Como você pode ver aqui, o seu ficheiro é apenas descrito como um simples ficheiro vazio.

Para que o seu ficheiro seja descrito como um ficheiro de script da shell, você precisa de especificar a linha shebang no topo do seu ficheiro.

Specifying shell using shebang

Se já usa Linux há algum tempo, é muito provável que já tenha encontrado a linha shebang no início do seu ficheiro.

Shebang, abreviatura para “Hash + “Bang”, é um conjunto de uma linha no início dos scripts shell para especificar qual shell deve ser usada para interpretar este script.

#!/bin/<shell>

No nosso caso, queremos trabalhar com scripts Bash. Em outras palavras, queremos que nossos scripts sejam interpretados por um interpretador Bash.

Para determinar o caminho para o interpretador, você pode usar o comando “qual”.

$ which bash/bin/bash

Agora você sabe o caminho para seu interpretador, edite seu arquivo de script e adicione a linha shebang no topo do seu arquivo.

#!/bin/bash

Agora que tenha adicionado esta linha no início do seu ficheiro, reexecute o comando “file” para ver a diferença.

Como pode ver, a saída é ligeiramente diferente : desta vez, o seu script é visto como um “Bourne-Again shell script” e mais importante como um executável.

Então o que aconteceria se você não especificasse a linha shebang no topo do script.

Quando não especificar a linha shebang, o script é executado usando a shell atual usada para iniciar o comando execute.

Agora você sabe como criar scripts Bash, vamos ver como você pode executá-los.

Executar scripts de Bash

Para executar scripts de Bash no Linux, você tem essencialmente duas opções :

  • Por especificar o interpretador de shell que você quer usar e o arquivo do script;
  • Por usar o caminho para o arquivo do script

Especificar o interpretador de shell

O primeiro método é bem simples.

Para executar seu script bash, você vai especificar o interpretador que você quer usar por si mesmo.

$ bash <script>$ /bin/bash <script>

Usando o exemplo que usamos antes, isto nos daria a seguinte saída.

Como você pode ver, este método não requer nem mesmo as permissões de execução no arquivo, você só precisa ser capaz de usar o executável bash.

Como você pode ver, quando logado como outro usuário, sem permissões de execução, eu ainda sou capaz de executar este script.

Esta é uma observação importante porque você pode querer armazenar seus arquivos de script em diretórios protegidos (que só você pode acessar), a fim de impedir que outros usuários executem seus arquivos.

Especificando o caminho para o script

A outra forma de executar scripts bash é especificar o caminho para o arquivo.

Para usar este método, o arquivo precisa ter permissões de execução.

Primeiro, use o comando “chmod” para definir as permissões de execução para o usuário atual.

$ chmod u+x <script>

Como você pode ver, a cor do arquivo é bem diferente : seu terminal atual destaca arquivos executáveis usando cores específicas, neste caso a cor verde.

Agora seu script é executável, você pode executá-lo especificando o caminho relativo ou absoluto para o script.

Usando um arquivo chamado “script.sh” localizado no meu diretório de trabalho atual, o script pode ser executado executando

$ ./script.sh

Se você estiver em outro diretório, você terá que especificar o caminho absoluto para o arquivo do script.

$ /home/user/script.sh

Como você provavelmente já percebeu, este método não é muito conveniente se você tiver que especificar o caminho para o script toda vez.

Felizmente para você, há uma maneira de executar seu script simplesmente digitando o nome do arquivo na linha de comando.

Adicionando o script ao PATH

A extensão “.sh” não é necessária para que um script seja considerado um arquivo de script.

Por uma questão de simplicidade, vamos renomear o “script” existente.sh” para “script”.

Para renomear arquivos no Linux, basta usar o comando “mv” e especificar os alvos de origem e destino.

$ mv script.sh script

Agora, e se você quisesse executar seu script digitando “script”?

Para fazer isso, você tem que adicionar o caminho do seu script à sua variável de ambiente PATH.

Para imprimir o valor atual da sua variável de ambiente PATH, use “printenv” com o argumento “PATH”.

$ printenv PATH

Para actualizar o PATH no seu ambiente de trabalho actual, edite a variável de ambiente PATH usando a seguinte sintaxe.

$ export PATH="<path_to_script>:$PATH"

Agora, o comando “script” que acabou de definir estará directamente disponível sem especificar quaisquer caminhos : pode lançá-lo como qualquer outro comando.

Nota : se você quiser fazer suas alterações permanentes, siga estes passos para atualizar sua variável PATH corretamente.

Ajuste de built-ins explicado

Antes de declarar qualquer variável em seu script shell, é importante que você saiba sobre os built-ins da shell.

Quando você está trabalhando com a shell Bash, você está na maioria das vezes executando “programs”.

Exemplos de programas são “ls”, “fdisk” ou “mkdir”. Ajuda para esses comandos pode ser encontrada usando o comando “man” abreviado para “manual”.

No entanto, você já tentou ler a documentação para o comando “source”?

Você não seria capaz de ler a documentação usando “man” porque o comando source é uma função embutida na shell.

Para ler a documentação para os built-ins da shell, você tem que usar o comando “help”.

$ help <command>

A lista de built-ins da shell é bastante extensa mas aqui está uma imagem de tela de cada comando embutido da bash que você pode encontrar em sistemas Ubuntu.

Usando Variáveis de Bash

Agora que você saiba sobre os built-ins do Bash, é hora de você começar a escrever seus próprios scripts de Bash.

Como lembrete, os comandos digitados no seu terminal podem ser usados num script Bash exactamente da mesma forma.

Por exemplo, se quiser um script que simplesmente executa o comando “ls -l”, basta editar o seu script, adicionar a linha shebang e o comando.

#!/bin/bash# This simple script executes the ls commandls -l

Agora, e se quiser ter variáveis Bash?

As variáveis do Bash são variáveis simples de programa que podem armazenar uma grande variedade de diferentes inputs.

Para declarar uma variável Bash, basta especificar o nome da variável e seu valor separado por um sinal de igual valor.

VAR=value

Para poder usar o conteúdo da sua variável Bash no seu script, use “$” e anexe o nome da sua variável.

echo $VAR

Even se você pode usar esta sintaxe para ter o valor da variável, você também pode usar a notação “brackets”.

echo ${VAR}

Usando esta sintaxe, as variáveis podem ser combinadas juntas.

Se você tiver duas variáveis Bash chamadas VAR1 e VAR2 por exemplo, você pode imprimir ambas usando a seguinte sintaxe

echo "${VAR1}${VAR2}"

Executar comandos dentro de scripts

Para executar comandos dentro de scripts Bash, você tem que usar a substituição de comandos.

Substituição de comandos é uma técnica usada em shells Bash para armazenar o resultado de um comando em uma variável.

Para substituir um comando em Bash, use o sinal de dólar e coloque seu comando entre parênteses.

VAR=$(command)

Por exemplo, para obter o resultado dos números dos arquivos em seu diretório atual, você escreveria

#!/bin/bashNUMBER=$(ls -l | wc -l)echo "${NUMBER} files in this directory!"

Como você pode ver, a substituição de comandos é bastante útil porque pode ser usada para executar dinamicamente comandos em um script shell e retornar o valor de volta para o usuário.

Falando sobre retornar resultados para o usuário final, como você lida com scripts não terminados corretamente?

E se um comando dentro do script não foi executado corretamente?

Estados de Saída Compreensíveis

Quando você está executando um script, mesmo que você não esteja retornando um valor, o script sempre retorna o que chamamos de “estado de saída”.

Um estado de saída no Bash scripting indica se a execução do script foi bem sucedida ou não.

Se o código de estado é zero, a execução do script foi bem sucedida. Entretanto, se o valor for diferente de zero (digamos um, dois ou mais), indica que a execução do script não foi bem sucedida.

Para demonstrar o status de saída, execute qualquer comando válido na sua shell bash.

echo "This is a simple working command"

Agora, use este comando para inspecionar o estado de saída do último comando executado.

echo ${?}

Como você pode ver, a saída deste comando é “0” ou o estado de saída do último comando que executei.

Esta sintaxe (“${?}”) pode ser usada em scripts a fim de garantir que os comandos executados corretamente.

O estado de saída pode ser usado em scripts a fim de sair do script com um código de estado específico.

Por exemplo, se você quiser sair do script com um erro, você pode usar o seguinte comando no seu script.

exit 1

Simplesmente, você pode usar o código de saída “zero” a fim de especificar que o script executado com sucesso.

exit 0

A fim de verificar se o código de status estava correto, você vai precisar de declarações condicionais básicas como a declaração IF.

Manipulando condições no Bash

Por vezes, executar scripts bash não se trata apenas de ter comandos múltiplos um ao lado do outro : você quer ter ações condicionais.

Em alguns casos, pode ser útil ter uma condição verificando se o usuário atual é o usuário root (ou apenas um usuário específico em seu sistema).

Uma maneira simples de ter condições no Bash é usar a instrução if.

“If” está embutido na shell, como consequência, o manual está disponível através do comando “help”

$ help if

A página help descreve a sintaxe do comando if usando ponto e vírgula, mas vamos usar esta sintaxe (que é equivalente)

if ]then <commands>else <command>fi

Caso de prática : verificando se o usuário é root

A fim de mostrar para que a instrução if pode ser usada, vamos escrever um script simples verificando se o usuário é root ou não.

Como lembrete, o usuário root sempre tem o UID zerado em qualquer sistema Unix.

Sabendo esta informação, vamos verificar se o UID está zerado, se este for o caso, vamos executar o resto do script, caso contrário, vamos sair do script.

Como explicado em outros tutoriais (sobre administração de usuários), você pode obter o ID do usuário atual usando o comando “id”.

$ id -u1000

Vamos usar este comando para verificar se o usuário executando o script é root ou não.

Criar um novo script e adicionar a linha shebang a ele.

#!/bin/bash

Direito abaixo dele, adicionar o comando “id” e armazenar o resultado em uma variável chamada “USERID” usando a substituição de comandos.

USERID=$(id -u)

Agora que o “USERID” contém o ID do usuário atual, use uma instrução IF para verificar se o ID do usuário é zero ou não.

Se este for o caso, escreva uma mensagem informativa simples, se não sair do script com o status de saída 1.

if ]then echo "This is root"else exit 1fi

Agora, se você executar o script como seu usuário atual, o script simplesmente sairá com um status de saída de um.

Agora, tente executar o script como usuário root (com o comando sudo)

Como você pode ver, sua mensagem informativa foi exibida e o script saiu com um código de erro de zero.

Conclusion

Neste tutorial, você aprendeu sobre a linguagem de programação Bash e como ela pode ser usada para criar scripts Bash no seu sistema.

Você também aprendeu sobre estados de saída e declarações condicionais que são fundamentais para que a lógica personalizada seja definida em seus scripts.

Agora que tem mais conhecimentos sobre o Bash, deve começar por escrever os seus próprios scripts para as suas necessidades : pode começar por ter um tutorial para criar ficheiros de backup de arquivo, por exemplo.

Se estiver interessado na administração do Sistema Linux, temos uma secção completa dedicada a ele no site, por isso não deixe de a verificar!

Deixe uma resposta

O seu endereço de email não será publicado.