Criando Scripts Shell para Tarefas de Administração Linux

Criação de Contas de Usuário e Senhas Utilizando Parâmetros Posicionais

useradd "$nome_usuario"
echo "$senha_usuario" | passwd --stdin "$nome_usuario"

}


</div>Backup Automático de Arquivos de Log com Tar
--------------------------------------------

Script para backup semanal (todas as sextas-feiras) dos arquivos de log em /var/log:

<div>```
#!/bin/bash
# Script de backup com timestamp no nome do arquivo
# Evita sobrescrita de backups anteriores
data_atual=$(date +%Y%m%d)
tar -czf backup_logs_${data_atual}.tar.gz /var/log

instalar_servicos() { yum -y install httpd yum -y install mariadb mariadb-devel mariadb-server yum -y install php php-mysql }

iniciar_servicos() { systemctl start httpd mariadb systemctl enable httpd mariadb }

instalar_servicos iniciar_servicos


</div>Monitoramento de Recursos do Sistema
------------------------------------

Script que monitora memória e espaço em disco, alertando quando abaixo dos limites:

<div>```
#!/bin/bash
verificar_recursos() {
    # Espaço disponível na partição raiz (em KB)
    espaco_disco=$(df / | awk 'NR==2 {print $4}')
    # Memória disponível (em KB)
    memoria_disp=$(free | awk 'NR==2 {print $7}')
    
    # Limites configurados: 500MB para memória, 1GB para disco
    limite_memoria=512000
    limite_disco=1024000
    
    while true; do
        if [[ $espaco_disco -le $limite_disco ]] || [[ $memoria_disp -le $limite_memoria ]]; then
            mail -s "ALERTA DE SISTEMA" root << EOL
Aviso crítico: Recursos insuficientes detectados!
Espaço em disco: ${espaco_disco}KB
Memória disponível: ${memoria_disp}KB
EOL
        fi
        sleep 60  # Verifica a cada minuto
    done
}

verificar_recursos

adivinhar_numero() { while true; do read -p "Tente adivinhar um número entre 1 e 100: " tentativa

    if [[ $tentativa -eq $numero_secreto ]]; then
        echo "Parabéns! Você acertou o número!"
        break
    elif [[ $tentativa -gt $numero_secreto ]]; then
        echo "Seu palpite é muito alto!"
    else
        echo "Seu palpite é muito baixo!"
    fi
done

}

adivinhar_numero


</div>Verificação de Privilégios de Administrador
-------------------------------------------

<div>```
#!/bin/bash
# Verifica se usuário atual é root (UID = 0)

verificar_permissao() {
    if [[ $EUID -eq 0 ]]; then
        echo "Instalando vsftpd..."
        yum -y install vsftpd
    else
        echo "Erro: Permissão insuficiente para instalar software."
        exit 1
    fi
}

verificar_permissao

configurar_usuario() { read -p "Nome de usuário: " usuario_nome

# Verifica se nome foi fornecido
if [[ -z "$usuario_nome" ]]; then
    echo "Erro: Nome de usuário obrigatório!"
    exit 2
fi

# Lê senha com eco desativado
stty -echo
read -p "Senha (padrão 123456): " senha_digitada
stty echo

# Usa senha padrão se nenhuma for digitada
senha_final="${senha_digitada:-123456}"

# Cria conta e define senha
useradd "$usuario_nome"
echo "$senha_final" | passwd --stdin "$usuario_nome"

echo "Usuário $usuario_nome criado com sucesso!"

}

configurar_usuario


</div>Ordenação de Três Números Inteiros
----------------------------------

<div>```
#!/bin/bash
# Lê três números inteiros e os ordena

ler_numeros() {
    read -p "Primeiro número: " valor1
    read -p "Segundo número: " valor2
    read -p "Terceiro número: " valor3
}

ordenar_valores() {
    # Algoritmo de ordenação para três valores
    # valor_min sempre terá o menor valor
    # valor_max sempre terá o maior valor
    # valor_med terá o valor intermediário
    
    if [[ $valor1 -gt $valor2 ]]; then
        temp_swap=$valor1
        valor1=$valor2
        valor2=$temp_swap
    fi
    
    if [[ $valor1 -gt $valor3 ]]; then
        temp_swap=$valor1
        valor1=$valor3
        valor3=$temp_swap
    fi
    
    if [[ $valor2 -gt $valor3 ]]; then
        temp_swap=$valor2
        valor2=$valor3
        valor3=$temp_swap
    fi
    
    echo "Números ordenados: $valor1, $valor2, $valor3"
}

ler_numeros
ordenar_valores

varredura_rede() { local rede_base="192.168.3"

for host in {1..254}; do
    endereco_ip="${rede_base}.${host}"
    
    if ping -c 2 -W 1 "$endereco_ip" &>/dev/null; then
        echo "$endereco_ip está ONLINE"
    else
        echo "$endereco_ip está OFFLINE"
    fi
done

}

varredura_rede


</div>Barra de Progresso para Cópias
------------------------------

<div>```
#!/bin/bash
# Mostra barra de progresso durante cópia de arquivos

exibir_progresso() {
    while true; do
        echo -n "#"
        sleep 0.3
    done
}

# Inicia barra de progresso em background
exibir_progresso &
pid_barra=$!

# Executa cópia
cp -r "$1" "$2"

# Finaliza barra de progresso
kill $pid_barra
echo -e "\nCópia concluída!"

gerar_tabela() { for ((linha=1; linha<=9; linha++)); do for ((coluna=1; coluna<=linha; coluna++)); do resultado=$((linha * coluna)) echo -n "${coluna}x${linha}=${resultado} " done echo "" done }

gerar_tabela


</div>Monitoramento em Tempo Real de Tráfego de Rede
----------------------------------------------

Script para exibição contínua do tráfego da interface eth0:

<div>```
#!/bin/bash
# Monitoramento contínuo de pacotes enviados pela interface eth0

monitorar_interface() {
    while true; do
        # Lê estatísticas de tráfego da interface
        fluxo_saida=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
        echo "Pacotes enviados por eth0: $fluxo_saida"
        sleep 2
    done
}

monitorar_interface

Tags: Bash shell-scripting linux-administration automation system-monitoring

Publicado em 8-2 00:22