현재 스크립팅에 대해 배우고 있는데 압축을 사용하여 /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}로 바꾸세요.
숙제 잘 하시길 바랍니다.