O script de shell que eu fiz é ridiculamente detalhado, e também é provavelmente ineficiente. Socorro!

1

Eu sou novo no Ubuntu, e até agora tenho feito várias coisas das quais tenho muito orgulho:

Fiz um servidor web apache com meu próprio html (antes de uma semana atrás eu nunca havia tocado nele) Fez um servidor de mineração de estrato + nó titcoin

E meu último projeto é criar um script de shell para fazer backup do meu disco rígido INTEIRO (isso é certo) para um disco rígido externo enorme. Chegando ao ponto, eu sei que há um pouco que eu poderia melhorar (como o fato de que ele te conta o conteúdo de tudo o que ele faz?), E eu gostaria da sua opinião sobre isso:

Código:

#!/bin/bash
read -n1 -p “Would you like to back up your system? Uno for Si, and Dos for No.” 
echo
case $input in
1) fdisk -l;
echo;
read -p “Please enter the name of your backup disk that was displayed in the fdisk window: ” disk ;
echo;
echo “Backups now in progress! Please be aware that backups are saved to a Backups directory which this script creates, and backups are tarred and labelled by date!”;
echo “THIS WILL TAKE A VERY VERY LONG TIME IF YOU HAVE A LARGE FILESYSTEM! PLEASE BE PATIENT!!!”;
cd /;
sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cp $(date +%Y%m%d).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . && sudo cp $(date +%Y%m%d-%H).tar /mnt/$disk/Backups;
echo “Okay, all done! To restore your system, you will have to untar and manually do it yourself. If you have any issues, email [email protected]!”;; 
2) echo “Then why are you running this script?”;;
*) echo “I'm sorry, but I can’t do that…”

esac

Honestamente, não tenho ideia do que estou fazendo. Alguma sugestão? Aqui está um trecho da saída que está ocorrendo há cerca de 3 horas ... Bem, na verdade, o texto está se movendo tão rápido que nem consigo copiar / colar ...

    
por Harm 08.05.2015 / 03:14

2 respostas

4

Questões globais:

  • Use recuo . Isso torna seu código mais legível (para você e para nós).
  • Use apenas aspas direitas no bash . Outros tipos de citações podem quebrar comandos.
  • Não acrescente ; no final de um único comando . O caractere ; tem um significado específico e é inútil se anexado a um único comando.

Questões específicas:

fdisk -l;

Você precisa executar fdisk como sudo : sudo fdisk -l

read -n1 -p “Would you like to back up your system? Uno for Si, and Dos for No.”

Você não está armazenando essa entrada em nenhum lugar. Vendo o código abaixo, você está perdendo input no final (ocupa o espaço após as aspas duplas): read -n1 -p "Would you like to back up your system? Uno for Si, and Dos for No." input

sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cp $(date +%Y%m%d).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . && sudo cp $(date +%Y%m%d-%H).tar /mnt/$disk/Backups;

O comando tar está sem uma opção -f : sem ele tar envia para stdout e não para o arquivo especificado; também o nome do arquivo deve ser $(date +%Y%m%d-%H) para corresponder ao nome do arquivo esperado de cp : sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cpf $(date +%Y%m%d-%H).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . && sudo cp $(date +%Y%m%d-%H).tar /mnt/$disk/Backups;

Nota final: ao fazer isso, você está deixando todos os backups em / , mas também está excluindo um diretório /backups/ do backup, por isso, parece que sua meta é armazenar uma cópia de cada backup nessa pasta. Certifique-se de que essa pasta exista. A versão corrigida do último comando de acordo com isso é:

sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cpf backups/$(date +%Y%m%d-%H).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . && sudo cp backups/$(date +%Y%m%d-%H).tar /mnt/$disk/Backups;

Portanto, a versão corrigida, indecisa, sem cotação, inútil do ; -free do script é:

#!/bin/bash

read -n1 -p "Would you like to back up your system? Uno for Si, and Dos for No." input
echo
case $input in
    1)
        sudo fdisk -l
        echo
        read -p "Please enter the name of your backup disk that was displayed in the fdisk window: " disk
        echo
        echo "Backups now in progress! Please be aware that backups are saved to a Backups directory which this script creates, and backups are tarred and labelled by date!"
        echo "THIS WILL TAKE A VERY VERY LONG TIME IF YOU HAVE A LARGE FILESYSTEM! PLEASE BE PATIENT!!!"
        cd /
        sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cpf backups/$(date +%Y%m%d-%H).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . && sudo cp backups/$(date +%Y%m%d-%H).tar /mnt/$disk/Backups;
        echo "Okay, all done! To restore your system, you will have to untar and manually do it yourself. If you have any issues, email [email protected]!"
        ;;
    2)
        echo "Then why are you running this script?"
        ;;
    *)
        echo "I'm sorry, but I can’t do that…"
        ;;
esac

Última coisa: Nunca deixe seu endereço de e-mail na Web . Os spammers vão raspá-lo. Eu o substitui por [email protected] em minha resposta, em sua resposta e em sua pergunta.

    
por kos 08.05.2015 / 04:58
-1

Tudo bem, entendi.

#!/bin/bash
read -n1 -p "Would you like to back up verbosely and with minimal directories?? Uno for Si, and Dos for No." input
echo
case $input in
1) fdisk -l
echo
cd /
mkdir TempBackup && cd TempBackup
read -p "Please enter the name of your backup disk that was displayed in the fdisk window: " disk 
echo
echo "Tarring your /etc/ folder, be patient!" && sudo tar -cpf etc.tar /etc && echo "etc is tarred, copying now!" && sudo cp etc.tar /mnt/$disk/Backups && echo "Tarring your /bin/ folder!" && sudo tar -cpf bin.tar /bin && echo "bin is tarred, copying now!" && sudo cp bin.tar /mnt/$disk/Backups && echo "Tarring your /home/ folder, if you use bitcoind or litecoind it will be a bit!" && sudo tar -cpf home.tar --exclude=.cache --exclude=.gvfs /home && echo "home is tarred, copying now!" && sudo cp home.tar /mnt/$disk/Backups && sudo tar -cpf var.tar /var && echo "var is tarred, copying now!" && sudo cp etc.tar /mnt/$disk/Backups && cd / && echo "Tarring usr, IT IS UNLIKELY THAT THIS FILE CAN BE COPIED ON A FAT32 FS!!! AUTOSPLIT HAS BEEN ACTIVATED!!!" && sudo tar -cpf usr.tar /usr && echo "usr is tarred, copying/splitting now!" && mkdir split-files && cd split-files && split --bytes=1G /usr.tar split.tar && sudo cp * /mnt/$disk/Backups && cat split*.tar > usr.tar && cd /TempBackup && echo "Okay, finished! Let me clean up..."  && sleep 5 && echo "Cleaning all files...." && sudo rm -rf *.tar && echo "All Done!"
2) fdisk -l
echo
cd /
mkdir TempBackup && cd TempBackup
read -p "Please enter the name of your backup disk that was displayed in the fdisk window: " disk 
echo
echo "Backups now in progress! Please be aware that backups are saved to a Backups directory which this script creates, and backups are tarred and labelled by date!"
echo "THIS WILL TAKE A VERY VERY LONG TIME IF YOU HAVE A LARGE FILESYSTEM! PLEASE BE PATIENT!!!"
echo "THIS IS NOT THE SAME AS THE VERBOSE MODE! THIS COPIES ALL FILES TO DISK, NOT JUST THE COMMON ONES! YOU STILL HAVE TIME TO QUIT!!!"
sleep 10
cd /;
sudo mkdir -p /mnt/$disk && sudo mount /dev/$disk /mnt/$disk && sudo mkdir -p /mnt/$disk/Backups && sudo tar -cpf $(date +%Y%m%d).tar --directory=/ --exclude=proc --exclude=sys --exclude=dev pts --exclude=backups . && sudo cp $(date +%Y%m%d-%H).tar /mnt/$disk/Backups
echo "Okay, all done! To restore your system, you will have to untar and manually do it yourself. If you have any issues, email [email protected]!"
*) echo "I'm sorry, but I can't do that..."
esac

Sinta-se à vontade para usar isso!

    
por Harm 08.05.2015 / 04:54