Ajuda com um script simples

1

Eu fiz um script de backup simples

Código:

function backups_remove_file
{
    echo ""
    echo "2. Make Backups Of Files(s)"
    echo ""
    echo "Which File You Wanna To Make Backups?"
    read back
    echo "What's The File's Name Should Be After Backups? And Where?"
    read after
    read -p "Continue (y/n)?" CONT1
    if [ "$CONT1" == "y" ]; then
        tar -cvpzf "$after.tar.gz" "$back"
        echo "Backups File Successful !" ;
    else
        echo "Backups File Unsuccessful !" ;
    fi
}

Mas há um pequeno problema que não consegui resolver. O problema é quando entra na tela

Which File You Want To Make Backups?

se você escrever, por exemplo, "teste" depois disso, a próxima pergunta

What's The File's Name Should Be After Backups? And Where?

se você escrever, por exemplo, "test1", haverá um problema de segurança se quiser continuar ou não se digitar y diretamente:

taking: test: can not state: No such file or directory
tar: Exiting with failure status due to previous errors
 Backups File Successful!

Deve ser Backups File Unsuccessful! . O que devo fazer para acertar e será "Backups File Unsuccessful!" ??

    
por user233233 10.01.2014 / 18:06

3 respostas

2

Acho que um script melhor seria ler a entrada da linha de comando - algo como:

#/bin/bash
echo "Shall back up  as  - press Ctrl-C to exit if this is not what you want" 
sleep 3
echo "Backing Up..."
tar -cvpzf .tar.gz 
echo "Backing up of  Complete"
notify-send -t 8000 "Backing up of  complete"
exit

Você pode então digitar o comando assim:

COMMAND "/path/to/input" "/path/to/output"

O notify-send também enviará uma notificação gráfica para que você seja notificado quando isso for feito.

Esta é apenas a minha sugestão - vou dar uma olhada na sua em um segundo ...

O problema com o seu script é este. Ele será bem-sucedido, como $CONT1 = y , portanto, executará o comando backup tar... e, em seguida, echo Success . Só será repetido se você digitar o parâmetro continue não como y . Então, para este script em particular, um melhor final para isso seria (isso só muda o que é echo ed na saída do terminal) :

if [ "$CONT1" == "y" ]; then
        tar -cvpzf "$after.tar.gz" "$back"
        echo "Backing up File finished!" ;
else
        echo "Did not backup" ;
fi
exit

Isso parece funcionar:

#!/bin/bash
echo ""
echo "Which File you want to backup?";
read input
echo "Where do you you want it to be backed up? (include .tar.gz extension)";
read output
read -p "Continue (y/n)? " CONT
if [ "$CONT" == "y" ]; then
        tar -cpf "$input" "$output" || 'echo "Backing Up Failed" && exit;'
    echo "Backing Up Successful!"
else
        echo "Did not backup" ;
fi
exit

O || após o comando significa que ele só executará 'echo "Backing Up Failed" && exit;' se o comando produzir erros, o que fará com que ele repita que ele falhou e, em seguida, sairá. Se o comando não produzir erros, ele irá ignorar isso, ecoar com sucesso e sair.

Isso pode ter problemas com o caminho de alguns arquivos, então você pode querer usar o outro script que eu sugeri ...

Espero que isso ajude.

    
por Wilf 10.01.2014 / 18:26
2

Estou adicionando outra condição if no seu script. Vai funcionar como quiser. Veja o script modificado abaixo.

#!/bin/bash

function backups_remove_file()
{
    echo "Make Backups Of Files(s)"
    echo "Which File You Wanna To Make Backups?"
    read back
    echo "What's The File's Name Should Be After Backups? And Where?"
    read after
    read -p "Continue (y/n)?" CONT1
    if [ "$CONT1" == "y" ]; then
        tar -cvpzf "$after.tar.gz" "$back"
        if [ $? == 0 ]; then
            echo "Backups File Successful !"
        else
            echo "Backups File Unsuccessful !"
            exit 1
        fi
    else
        echo "Backups File Unsuccessful !" 
    fi
}

backups_remove_file

$? armazena o status de saída do último comando no shell. no sucesso seria 0

    
por souravc 10.01.2014 / 19:09
1

Isso funciona:

function backups_remove_file
{
    echo ""
    echo "2. Make Backups Of Files(s)"
    echo ""
    echo "Which File You Wanna To Make Backups?"
    read back
    echo "What's The File's Name Should Be After Backups? And Where?"
    read after
    read -p "Continue (y/n)?" CONT1
    if [ "$CONT1" == "y" ]; then
        if tar -cvpzf "$after.tar.gz" "$back"; then
            echo "Backups File Successful !"
        else
            echo "Backups File Unuccessful !"
        fi
    else
        echo "User selected no"
    fi
}

O motivo é que a linha após tar ... é executada, independentemente do código de saída. Isso significa que sempre ecoará "bem-sucedido". O Bash não gera automaticamente uma exceção / erro se algo der errado.

Isso é corrigido usando a instrução tar ... in if , de modo que o código de saída influencia o caminho que leva da declaração if .

    
por kiri 10.01.2014 / 21:56