Um bom começo

Saiba como criar um script shell em 5 passos básicos



Vou apresentar uma maneira para escrever um Script Shell Bash seguindo boas práticas que otimizam seu trabalho. Para esse artigo vou usar meu script de Backup disponível no meu GitHub aqui

01 - Variáveis globais

No topo do arquivo, reserve um espaço para definir suas variáveis globais que serão usadas ao longo do script. Isso é interessante para você ter clareza e distinção das variáveis macros e as regras do negócio:

# TOPO DO ARQUIVO
# ---------------------------
remote_ssh="192.168.122.69"
port_ssh="22"
user_ssh="root"
dir_backup_ssh="/mnt/backups"
dir_restore_ssh="/home/ricardo"

02 - Uso de funções

No “coração do código”, de acordo com o nível de complexidade do seu script você precisará reusar código para evitar linhas desnecessárias. Uma boa solução para isso é a adoção de funções! Criou, chamou e usou

.
.
.
incremental()
{
 
 if [ ! -f "$LOCAL_BACKUP/backupcompleto.tar.gz" ]; then
   echo -e "[Erro] Não existe Backup COMPLETO .................................. " 
   exit 1
 fi


 if tar -czvf $LOCAL_BACKUP/backup.inc$DIA.tar.gz -T $PASTAS_BACKUP -g $CONTROLE_INCREMENTAL 
 then
  echo -e "OK" | tee $monitor_file 
  rsync -avz -e ssh $LOCAL_BACKUP/backup.inc$DIA.tar.gz $user_ssh@$remote_ssh:$dir_backup_ssh 
 
 else
  echo -e "\nErro: durante compactação" 
  echo -e "FAIL" | tee $monitor_file
  exit 1
 fi
}
.
.
.

03 - Passagem de parâmetros

Um bom exemplo disso é ao usar função.

Passar parâmetros para que ela receba uma ou mais variáveis fora do escopo de função, processe e retorne a saída é conduta básica para definir uma finalidade específica para a função:

recuperar()
{
  backup=$1
  destino=$2

  if ! cat $LOCAL_BACKUP/$backup | tar -xvzf - -C $destino 1>>/dev/null 
  then
    exit 1
  fi
}

case $1 in
completo) completo ;;
recuperacao) menu_recuperar ;;
recuperar) recuperar $2 $3 ;;
*) exit 1 ;;
esac

04 - Fluxo padrão redirecionado

Ninguém deseja ver cuspindo na tela, durante a execucação do script, saídas ou erros dos comandos executados.

Uma boa prática é redirecionar saídas padrões (stdout) ou saídas de erro (sdterr) para um arquivo de log ou no limbo

tar -xvzf $backup_recupera -C $destino  >>1/dev/null

05 - Status na saída

Para fins de tratamento é importante informar se o término do script foi dado de maneira esperado (exit 0) ou inesperado (exit 1)

Muito comum nas condicionais de verificação de execução!

if tar -czvf $PATH_BACKUP -T $PASTAS_BACKUP 
   then
     echo "OK" | tee $MONITOR_FILE
   else
     echo "ERRO" | tee  $MONITOR_FILE
     exit 1
fi

Apaixonado por novas tecnologias, bacharel em Ciência da Computação. Alguns anos na operação, decidi mirar os dados.




Gostou do conteúdo?

Procurando ajuda? Estou disponível para ser contratado como consultor ou freelancer. Quer entrar em contato? Dá uma olhada na minha página de contato. Abraços!

Ah... quase esquecendo, aceito um café

Contribua

Alguma contribuição, crítica ou problema encontrado? Reporte aqui! Basta alterar o arquivo de texto, diretamente no Github e abrir um pull-request!