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

[Dúvida] Shell Scripts não estãofuncionando corretamente

Bom dia, boa tarde, boa noite! Estou com um problemas referente a uns Shell Scripts que não estão funcionando corretamente, pelo menos, o que volta não está iguais a video aula.

1 - Script de backup

#! /bin/bash

diretorio_backup="/home/administrador/devops" nome_arquivo="backup_$(date +%Y%m%d_$H%M%S).tar.gz" tar -czf "$nome_arquivo" "diretorio_backup" echo "Backup concluido em $nome_arquivo"

Quando dou o comando bash volta:

tar: diretorio_backup: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors Backup concluido em backup_20250202_5542.tar.gz

tentei criar o diretório "diretorio_backup" e parou de vir essa duas primeiras linha de código, mas na vídeo aula não é feito isso.

2- Compactador

#! /bin/bash

if [ "$#" -lt 2 ]; then echo "O programa $0 requer nome do arquivo e arquivos a serem compactados" exit 1 fi arquivos_saida="$1" arquivos=("${@:2}") tar -czf "$arquivo_saida" "${arquivos[@]}" echo "Compactado com sucesso em $arquivo_saida"

Quando dou o comando: ./compactador saida.tar.gz /home/administrador/notas.txt /home/administrador/notas1.txt Obs: notas.txt e notas1.txt existem

volta:

tar: Removing leading /' from member names tar (child): : Cannot open: No such file or directory tar (child): Error is not recoverable: exiting now tar: Removing leading /' from hard link targets tar: Child returned status 2 tar: Error is not recoverable: exiting now Compactado com sucesso em "Essa parte aparece em branco????"

Meio que não sei oque estou fazendo de errado ou deixando de fazer :c Se alguém conseguir me dar um help agradeço!!

2 respostas
solução!

Olá Gustavo!

Vamos dar uma olhada nos seus scripts e tentar entender o que pode estar acontecendo.

  1. Script de Backup:

    No seu script de backup, você está definindo diretorio_backup como uma variável, mas ao usar o tar, você está colocando o nome da variável entre aspas, o que faz com que o tar interprete como uma string literal "diretorio_backup" em vez de usar o valor da variável. O correto seria:

    #! /bin/bash
    
    diretorio_backup="/home/administrador/devops"
    nome_arquivo="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
    tar -czf "$nome_arquivo" "$diretorio_backup"
    echo "Backup concluído em $nome_arquivo"
    

    Note que agora estou usando $diretorio_backup com o cifrão na frente e sem aspas ao redor do nome da variável.

  2. Script Compactador:

    No script compactador, parece que há um pequeno erro de digitação no nome da variável arquivos_saida. No comando tar, você está usando "$arquivo_saida", mas a variável correta é "$arquivos_saida". Aqui está a correção:

    #! /bin/bash
    
    if [ "$#" -lt 2 ]; then
        echo "O programa $0 requer nome do arquivo e arquivos a serem compactados"
        exit 1
    fi
    arquivos_saida="$1"
    arquivos=("${@:2}")
    tar -czf "$arquivos_saida" "${arquivos[@]}"
    echo "Compactado com sucesso em $arquivos_saida"
    

    Além disso, o aviso tar: Removing leading '/' from member names é normal quando você usa caminhos absolutos. Se isso te incomoda, você pode usar caminhos relativos.

Bons estudos!

Muito grato!