Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Atividade Shell Script

Bom dia! Segue o script desenvolvido, com base nas aulas e com apoio da documentação em: https://devmanual.gentoo.org/tools-reference/bash/index.html

#!/bin/bash

while true ; do
    echo "-------------------------------------------------------------------------"
    echo ""
    echo "Olá $USER, escolha a opção desejada: "
    echo ""
    echo "1 - Criar um novo diretório;"
    echo "2 - Criar cópia de segurança de diretório existente;"
    echo "3 - Validar existencia de arquivo;"
    echo "4 - Contar de 1 a 5;"
    echo "5 - SAIR"
    echo ""
    echo "-------------------------------------------------------------------------"
    echo ""
    read -p "~ " opcao
    echo ""
    echo "Você escolheu a opção $opcao"
    echo ""
    echo "-----------------------------------------------------------------"
    echo ""

    if [ "$opcao" = "1" ]; then
        read -p "Informe o nome do novo diretório: " nome_diretorio

        mkdir "$nome_diretorio"

        if [ -d "$nome_diretorio" ]; then
            echo "Novo diretório criado: $nome_diretório"
        else
            echo "Erro ao criar novo diretório."
        fi

    elif [ "$opcao" = "2" ]; then
        read -p "Informe o caminho do diretório: " caminho_diretorio
        nome_arquivo="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
        tar -czf "$nome_arquivo" "$caminho_diretorio"
        echo "Cópia de segurança realizada em $nome_arquivo"


    elif [ "$opcao" = "3" ]; then
        read -p "Informe o nome do arquivo: " nome_arquivo
        if [ -e "$nome_arquivo" ]; then
            echo "Arquivo $nome_arquivo localizado."
        else
            echo "Arquivo $nome_arquivo não localizado."
        fi

    elif [ "$opcao" = "4" ]; then
        for (( i = 1 ; i <= 5 ; i++ )) ; do
            echo "${i}"
        done

    elif [ "$opcao" = "5" ]; then
        exit 0

    else
        echo ""
        echo "Opção '$opcao' inválida. A opção deve ser um número inteiro de 1 a 4"
        echo ""
    fi
done

Acredito que ele esteja funcional, mas qualquer alternativa para melhoria é válida.

2 respostas
solução!

Olá, Thales!

Seu script está bem estruturado e cobre todas as atividades propostas na prática. Aqui estão algumas sugestões de melhorias que podem tornar o script ainda mais robusto e amigável:

  1. Validação de Entrada: Ao solicitar entradas do usuário, como o nome do diretório ou arquivo, pode ser útil validar se a entrada não está vazia antes de prosseguir com a operação. Por exemplo:

    read -p "Informe o nome do novo diretório: " nome_diretorio
    if [ -z "$nome_diretorio" ]; then
        echo "Nome do diretório não pode ser vazio."
        continue
    fi
    
  2. Mensagens de Erro: Ao criar o backup, você pode adicionar uma verificação para garantir que o diretório informado existe antes de tentar criar o backup. Isso ajuda a evitar erros desnecessários:

    if [ ! -d "$caminho_diretorio" ]; then
        echo "Diretório não encontrado: $caminho_diretorio"
        continue
    fi
    
  3. Melhoria na Mensagem de Saída: No caso de sucesso ao criar um diretório, há um pequeno erro de digitação na variável nome_diretório. Corrija para nome_diretorio para que a mensagem seja exibida corretamente.

  4. Utilização de Funções: Para melhorar a organização do script, considere dividir cada funcionalidade em funções separadas. Isso facilita a leitura e manutenção do código. Por exemplo:

    criar_diretorio() {
        read -p "Informe o nome do novo diretório: " nome_diretorio
        mkdir "$nome_diretorio"
        if [ -d "$nome_diretorio" ]; then
            echo "Novo diretório criado: $nome_diretorio"
        else
            echo "Erro ao criar novo diretório."
        fi
    }
    
  5. Feedback ao Usuário: Após cada operação, você pode adicionar um pequeno tempo de espera para que o usuário possa ler a mensagem antes de o menu ser exibido novamente. Isso pode ser feito com o comando sleep:

    sleep 2
    

Bons estudos!

Obrigado pelas sugestões!