Mateus Müller

O carinha do Linux

07 ago. 2019

TESTES de REQUISITOS em SHELL SCRIPT

Eu aprendi ao longo do tempo que sempre é interessante realizar testes antes da execução do seu script, uma espécie de validação para garantir que todos os requisitos foram atendidos. Este tipo de abordagem possui diversas vantagens onde a maior delas é justamente a “não quebra” do script.

Imagine que você tenha criado um programa que dependa de um utilitário que não é default do Linux, como por exemplo o lynx (browser para terminal), ou talvez um rsync que usamos para efetuar cópias locais e remotas. O que fazer? Apenas deixar rodar o script sem nenhum tratamento? E se for um usuário não tão técnico utilizando, ele saberá arrumar ou interpretar a mensagem?

Por isso, sempre digo para os meus alunos realizarem o tratamento das dependências e requisitos antes de fazer qualquer execução.

Requisitos

Para que você obtenha o máximo deste post, seria interessante você conhecer um pouco sobre a linha de comando do Linux e também sobre Shell Script no geral.

Testes em Shell

Vou dar alguns exemplos práticos. Você também pode ver os exemplos que tenho disponíveis no meu GitHub aqui.

Validar se um utilitário está instalado.

[ ! -x "$(which lynx)" ] && printf "${YELLOW}We need to install ${GREEN}Lynx${YELLOW}, please, type your password:${NO_COLOR}\n" && sudo apt install lynx 1> /dev/null 2>&1 -y

Podemos notar que:

  • A opção "-x" retorna verdadeiro se o arquivo existir e for executável.
  • Uso o "!" para negar esse condição, ou seja, será verdadeiro se ele não existir.
  • && funciona como o “então” caso a condição seja verdadeira.
  • Poderia fazer "[ -x “$(which lynx)” ] || …" e o resultado seria o mesmo, porque o que vem depois do “||” é executado se a condição for falsa.
  • Uso o printf para mostrar uma mensagem para o usuário.
  • Depois aproveito e já instalo o lynx sem o usuário notar.
  • “1> /dev/null 2>&1” isso direciona a saída padrão para o “buraco negro” (vulgo /dev/null) e manda os erros para o mesmo lugar.

Isso tudo é feito antes mesmo do script executar. Já que meu script necessita obrigatoriamente do lynx, por que já não instalo ele mesmo?

Validar se o usuário é o root.

Um outro tipo de validação que costumo fazer em meus scripts é se o usuário que está executando o script é o root. Isto porque durante a execução preciso tomar ações que necessitam de privilégios elevados. Este talvez não seja o melhor tratamento, mas serve bem para exemplificar.

[ "$UID" != "0" ] && {
  echo "----- You must be root -----" >> $LOG_FILE
  exit 1
}

Podemos notar que:

  • Estamos comparando o valor da variável ambiente $UID com o valor ****
  • $UID é uma variável do próprio terminal que armazena o UID do usuário atual.
  • O usuário root sempre terá o UID 0, pode mudar de nome, mas o UID sempre continua sendo 0.
  • != significa diferente.
  • Se esta condição for verdadeira, ou seja, caso o $UID não seja 0, então ele vai registrar uma mensagem de erro no arquivo de log e sair do programa com o código de erro 1.

Conclusão

O ponto aqui é, você precisa sempre raciocinar e pensar em todos os requisitos que seu programa precisa ter para executar corretamente, e com base nisso, você monta a bateria de testes.

Alguns outros exemplos podem ser:

  • O diretório tem permissão de leitura e escrita?
  • O arquivo tem permissão de leitura e escrita?
  • O tamanho disponível é o suficiente para o que eu preciso?
  • Tenho conexão com a Internet?
  • Consigo resolver esse nome?

E assim por diante…

Bom, espero que tenha gostado dessa dica. Se gostou, não esqueça de compartilhar com os colegas em grupos de Linux. Este artigo pode ajudar muitas outras pessoas.

Me siga no Instagram onde eu faço conteúdos da minha rotina diária.

Participe dos nossos grupos no Telegram e Facebook! 🙂

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!

Comentários Disqus