몇 가지 요구 사항에 따라 /user/home을 백업하는 방법은 무엇입니까?

몇 가지 요구 사항에 따라 /user/home을 백업하는 방법은 무엇입니까?

현재 스크립팅에 대해 배우고 있는데 압축을 사용하여 /user/home을 백업하는 스크립트를 만들어야 합니다 .bz2. 선생님은 스크립트를 실행하는 사람이 백업할 사용자와 압축 방법을 선택하기를 원합니다. 매우 간단한 스크립트를 만들었지만 약간 수정하고 싶습니다.

이것이 내가 필요한 것입니다:

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

스크립트의 최종 결과:

user_20151126.tar.bz2

내 스크립트:

#!/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

내 결과:

20151126.tar.bz2 

답변1

다음 변경 사항과 버그 수정을 권장합니다.

#!/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

스크립트는 다음과 같이 호출됩니다.

backup.sh user bz2

사용자 이름과 압축 방법을 대화형으로 입력하려면 이를 수행하는 코드를 사용하고 ${1}을 ${UserName}($1은 $USerName)으로 바꾸고 ${2}를 $ {CompressionMethod}로 바꾸세요.

숙제 잘 하시길 바랍니다.

관련 정보