2
respostas

Hora da Prática: Automatização Básica

Como tá demorando e > 5k chars, resolvi postar o que já consegui até aqui.

Script

#!/bin/bash
###########################
# Nome: automatizacao-um
# Descrição: Script de automatização  
# básica no Ubuntu Serve 
# Autor: Naygno B. Noia
# Data: 12/11/2025
###########################
    
p=0 # Controla se é a primeira vez no menu

while true; do
    echo
    echo "========= Automações Básicas (I) ========="
    echo " Opções:"
    echo "  1) Atualizar os pacotes do Sistema"
    echo "  2) Renomear os arquivos" 
    echo "  3) Criar novo usuário"
    echo "  4) Monitorar disco"
    echo "  5) Fazer backup"
    echo "  6) Sair"
    echo "=========================================="
    echo
    
    if [[ $p -eq 0 ]]; then
        read -e -p "Escolha uma opção [1-6]: " opcao
    else
        read -e -p "Escolha outra opção [1-6]: " opcao
    fi

    if [[ "$opcao" =~ ^[a-zA-Z07-9_-]+$ ]]; then
        echo "Esta instrução não é uma opção válida."
        echo "So long, thanks for all the fish!"
        break
    else
        case $opcao in
            '1' )
                echo "Esta opção irá atualizar todos os pacotes do sistema."
                read -e -p "Para prosseguir digite (S)im ou (N)ão: " atualizar
                case "$atualizar" in
                    'S'|'s'|'sim'|'Sim' )
                        retorno=$(id -u)
                        if [[ $retorno -eq 0 ]]; then
                            p=1
                            # SUBMENU COMPLETO DE ATUALIZAÇÃO NO GITHUB
                            echo "Sistema de atualização completo disponível no GitHub"
                            echo "Inclui: apt update, apt upgrade, apt autoremove"
                        else
                            echo "Você não tem permissão para esta operação."
                        fi
                        ;;
                    *) echo "Voltando ao menu..."; continue ;;
                esac
                ;;

            '2' ) 
                echo "Esta opção renomeia arquivos com prefixo ou sufixo."
                read -e -p "Para prosseguir digite (S)im ou (N)ão: " renomear
                case "$renomear" in
                    'S'|'s'|'sim'|'Sim' )
                        p=1
                        read -e -p "Digite (P)refixo ou (S)ufixo: " pOUs
                        case "$pOUs" in
                            'P'|'p' )
                                read -e -p "Diretório de origem: " diretorio
                                read -e -p "Prefixo: " prefixo
                                ls "$diretorio" > /dev/null 2>&1
                                if [[ $? -eq 0 ]]; then
                                    i=1
                                    for arquivo in "$diretorio"/*; do
                                        if [[ ! "${arquivo%.*}" == "${arquivo##*.}" ]]; then
                                            if [[ -f "$arquivo" && ! -x "$arquivo" ]]; then
                                                mv "$arquivo" "$diretorio/${prefixo}_$i.${arquivo##*.}"
                                                i=$((i+1))
                                            fi
                                        fi
                                    done
                                    # VERIFICAÇÃO DE SUCESSO COMPLETA NO GITHUB
                                    echo "Operação de prefixo concluída!"
                                fi
                                ;;
                            'S'|'s' )
                                read -e -p "Diretório dos arquivos: " diretorio
                                read -e -p "Sufixo: " sufixo
                                ls "$diretorio" > /dev/null 2>&1
                                if [[ $? -eq 0 ]]; then
                                    k=0; l=0
                                    # LÓGICA COMPLETA DE SUFIXO NO GITHUB
                                    for arquivo in "$diretorio"/*; do
                                        if [[ ! "${arquivo%.*}" == "${arquivo##*.}" ]]; then
                                            k=$((k+1))
                                            if [[ "${arquivo##*.}" != "$sufixo" ]]; then
                                                mv "$arquivo" "${arquivo%.*}.$sufixo"
                                            fi
                                        fi
                                    done
                                    # SISTEMA DE VERIFICAÇÃO AVANÇADO NO GITHUB
                                    echo "Operação de sufixo concluída!"
                                fi
                                ;;
                            *) echo "Opção inválida!"; break ;;
                        esac
                        ;;
                    *) echo "Voltando ao menu..."; continue ;;
                esac
                ;;

            '3' )
                echo "Esta opção cria um novo usuário no sistema."
                read -e -p "Para prosseguir digite (S)im ou (N)ão: " criar
                case "$criar" in
                    'S'|'s'|'sim'|'Sim' )
                        if [[ $(id -u) -eq 0 ]]; then
                            # LÓGICA DE CRIAÇÃO DE USUÁRIO NO GITHUB
                            echo "Sistema de criação de usuários em desenvolvimento"
                            echo "Detalhes completos no GitHub"
                        else
                            echo "Execute com sudo para criar usuários."
                        fi
                        ;;
                    *) echo "Voltando ao menu..."; continue ;;
                esac
                ;;

            '4' )
                echo "Monitoramento de disco - Em breve!"
                ;;

            '5' ) 
                echo "Sistema de backup - Em desenvolvimento!"
                ;;

            '6' )
                echo "Encerrando o script..."
                exit 1
                ;;

            * )
                echo "Instrução inválida."
                break
                ;;
        esac
    fi
done

Status das Funcionalidades

Completas e Estáveis

  • Opção 1: Sistema completo de atualização de pacotes com submenu
  • Opção 2: Renomeação com prefixo e sufixo totalmente funcionais
  • Validações: Menu interativo, verificações de privilégio, tratamento de erros

Implementadas com Proteções

  • Verificação de extensão de arquivos
  • Proteção contra auto-renomeação do script
  • Sistema de contagem para verificação de sucesso
  • Detecção de renomeação parcial vs completa

Em Desenvolvimento

  • Opção 3: Criação de usuários (base implementada)
  • Opção 4: Monitoramento de disco
  • Opção 5: Backup com compactação

Código completo e detalhes de implementação:
Script no meu GtHub

Pelo menos a interface tá pronta.

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Oi, Naygno! Como vai?

Agradeço por compartilhar.

Fiicou claro que você organizou bem o menu e estruturou cada funcionalidade. Gostei de como você pensou nas validações e nas proteções, isso mostra atenção ao fluxo e ao uso real do script. Ótimo ver que várias partes já estão estáveis.

Continue avançando no desenvolvimento das próximas opções

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Lorena! Estou bem, obrigado!

As validações foram sendo construídas passo a passo, conforme os testes revelavam erros e resultados inadequados. Foi um processo de tentativa e erro, onde cada problema se tornou uma oportunidade de aprendizado.

Ainda tenho melhorias para implementar e funcionalidades para finalizar, mas decidi seguir com os novos conteúdos antes de retomar este script. Acredito que posso encontrar sugestões valiosas que me ajudarão a aperfeiçoá-lo depois.

Muito obrigado pelo seu feedback e acompanhamento!