Tutoriais

Como criar um Shell Script simples para automatizar a instalação de programas no Linux

Uma das coisas mais legais do Bash é o poder de automatizar tarefas, até mesmo na própria linha de comando. Hoje você vai aprender a criar um simples Shell Script para instalar um programa.

Para você entender o conceito, vamos dar um exemplo com um programa popular e simples, o GIMP. O GIMP é um manipulador de imagens que está no repositório de todas as distros Linux praticamente, como exemplo nos comandos vamos usar o gerenciador de pacotes “apt”, comum no Debian, Ubuntu, Linux Mint e derivados, apesar disso, entendendo o conceito, você pode aplicar em qualquer distro, basta entender o gerenciador de pacotes dela e os comandos que ele aceita.

Claro, o GIMP pode ser instalado por centrais de apps sem comandos, pode ser também instalado com um simples # apt install gimp mas a intenção é te mostrar como você pode estruturar um script para automatizar a instalação de qualquer programa ou de vários ao mesmo tempo.

Vamos imaginar que você queria instalar o gimp a partir do terminal.

Muito provavelmente os passos que você dará serão:

1) Atualizar os repositórios

$ sudo apt-get update

2) Instalar possíveis atualizações do sistema:

$ sudo apt-get dist-upgrade -y

3) Efetivamente instalar o pacote.

$ sudo apt-get install gimp

O processo manual da instalação de um programa pode levar algum tempo, pois você deverá esperar que o primeiro comando termine sua execução para digitar o próximo.

Nem sempre atualizar repositórios é rápido e portanto é o seu tempo que está sendo gasto esperando algo que poderia facilmente ser automatizado.

O primeiro nível de automatização que poderíamos fazer aqui é criar uma fila de comandos (chamadas de listas) que serão executados pelo Bash em sequência.

Para isso basta separar os comandos com um ponto e vírgula:

sudo apt-get update ; sudo apt-get dist-upgrade -y ; sudo apt-get install gimp -y

Apesar de já automatizar um pouco o processo, não há praticamente nenhuma lógica envolvida.

Você muito provavelmente não deseja executar um “dist-upgrade” se o “update” falhar antes por qualquer motivo. Certo?

Aqui chegamos no nosso segundo nível de automatização. Em vez de usar o ponto e vírgula, podemos separar os comandos com “&&”, e desta forma o Bash somente executará o comando seguinte se o anterior finalizar a execução com sucesso.

sudo apt-get update && sudo apt-get dist-upgrade -y && sudo apt-get install gimp -y

Agora já melhoramos bastante o processo, porém no caso de algum dos comandos retornar falha, esta fila de comandos simplesmente para de ser executada sem qualquer tipo de aviso mais elaborado para o usuário.

É possível em linha de comando adicionar mais lógica para continuar aperfeiçoando este nosso procedimento, porém este é aquele momento em que talvez seja mais proveitoso se criar um script de verdade e deixar o processo legível, em vez de simplesmente criar uma “tripa” de comandos que depois poderá dificultar a sua vida na hora de encontrar e consertar qualquer erro.

Para este nosso exemplo, usaremos o próprio “if” do Bash (que é uma estrutura de condicional explicada brevemente neste vídeo aqui)

Basta criar um arquivo de texto que você pode ‘chamar do que quiser .sh“, tipo “batatinha_quando_nasce.sh” e inserir os dados que vamos te mostrar. Tá bom, talvez seja melhor criar um arquivo chamado instala-pacote.sh o seguinte conteúdo:

#!/bin/bash

echo Atualizando repositórios..

if ! apt-get update

then

    echo “Não foi possível atualizar os repositórios. Verifique seu arquivo /etc/apt/sources.list”

exit 1
fi

echo “Atualização feita com sucesso”

echo “Atualizando pacotes já instalados”

if ! apt-get dist-upgrade -y
then

    echo “Não foi possível atualizar pacotes.”

   exit 1
fi

echo “Atualização de pacotes feita com sucesso”

# note que $1 aqui será substituído pelo Bash pelo primeiro argumento passado em linha de comando

if ! apt-get install $1

then

    echo “Não foi possível instalar o pacote $1”

    exit 1
fi

echo “Instalação finalizada”

Veja que utilizamos o operador “!” após o “if” para inverter o resultado do comando seguinte, portanto o conteúdo das condicionais (código que está entre o “then” e o “fi”) somente será executado caso os comandos falhem na execução. Também utilizamos o comando “exit 1” para pedir ao Bash que interrompa a execução do script em caso de falha.

Para executar o script basta rodar a seguinte linha:

sudo bash instala-pacote.sh gimp

Desta forma podemos utilizar o mesmo script para qualquer pacote, e o “sudo” só precisa ser invocado uma vez. Basta passar o nome do pacote desejado em linha de comando e ver o Bash fazer o resto sozinho.

É possível melhorar e incrementar o script de diversas maneiras. Podemos imprimir mensagens com cores, suprimir a saída em tela do comando apt-get para facilitar a leitura, dentre outras coisas.

Basta ter criatividade e dominar a linguagem do shell script para poder automatizar praticamente o que você quiser.

Leia também: 5 motivos para aprender Shell Script

Outra coisa que você pode fazer é incluir dentro do Shell Script os comandos para a instalação do pacote em específico, assim você pode rodar apenas o Shell Script e ele se encarrega de fazer a instalação para você.

Você pode por exemplo criar um script de pós formatação para o seu sistema, acrescentando repositórios, pacotes e programas que você normalmente usa, incluindo as opções para fazer a atualização do sistema e apenas rodar um Shell Script depois de instalar a sua distro e ir tomar café enquanto seu sistema é montando automaticamente. É mais do que bacana!

Nós lançamos nesta semana o nosso curso avançado de Shell Script, onde você vai aprender coisas como esta deste post e muitas outras para automatizar a sua vida de usuário Linux, as matrículas estão abertas até Quinta-feira, dia 15 de Junho e tem promoção especial para quem comprar hoje até a meia-noite. Corre lá pra conferir antes que fechem as matrículas.

Até a próxima!

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!