Como fazer backup / user / home com alguns requisitos?

0

Atualmente estou estudando scripts e preciso criar um script para fazer o backup do / user / home usando a compactação .bz2 . Meu professor quer que a pessoa que está executando o script selecione o usuário para backup e o método de compactação. Eu criei um script muito simples, mas gostaria de ajustá-lo um pouco.

Isso é o que eu preciso:

#/bin/bash
#Choose user to backup
#choose compression method.

Resultados finais do script:

user_20151126.tar.bz2

Meu script:

#!/bin/bash

echo -n Enter a User Name for the back:
read UserName

echo -n Enter the compression method:
read CompressionMethod

tar -jcvf /var/tmp/$UserName_$(date +%Y%m%d).tar.$CompressionMethod /home

chmod 777 /var/tmp/$UserName_$(date +%Y%m%d).tar.$CompressionMethod

echo "Nightly Backup Successful: $(date)" >> /var/tmp_backup.log

Meus resultados:

20151126.tar.bz2 
    
por Frank Wilson 27.11.2015 / 01:49

1 resposta

0

Sugiro as seguintes alterações e correções de erros:

#!/bin/bash

#first we test whether we have enough input parameters
if [ "x$1" == "x" ] || [ "x$2" == "x" ]; then
  echo "usage: $0 <user_name> <compression method bz2|gz|Z>"
fi

#test if we have read access to the users home directory
if [ ! -r /home/$1 ]; then
  echo "could not read /home/${1}"
  exit 1
fi

#now we parse the compression method and set the correct tar flag for it
case $2 in
  "bz2")
  flag=j;;
  "gz")
  flag=z;;
  "Z")
  flag=Z;;
  *)
  echo "unsupported compression method valid methods are <bz2|gz|Z>"
  exit 1;;
esac

#we need to enclose variable names not followed by whitespace in {} otherwise the letters following the variable name will be recognized as part of the variable name
tar -${flag}cvf /var/tmp/${1}_$(date +%Y%m%d).tar.$2 /home/${1}/

chmod 777 /var/tmp/${1}_$(date +%Y%m%d).tar.$2

echo "Nightly Backup Successful: $(date)" #>> /var/tmp/backup.log

o script é chamado assim:

backup.sh user bz2

se você quiser que o nome de usuário e o método de compactação sejam inseridos interativamente, use seu código que faz isso e substitua $ {1} por $ {UserName} (e $ 1 por $ USerName) e $ {2} por $ {CompressionMethod }

boa sorte com o dever de casa.

    
por 27.11.2015 / 09:43

Tags