특정 날짜의 UNIX 쉘 스크립트 백업 디렉토리

특정 날짜의 UNIX 쉘 스크립트 백업 디렉토리

기본적으로 이것은 내가 대답하려는 질문입니다.

2) 금요일에 실행하면 user2의 홈 디렉터리에 있는 모든 파일을 백업하는 쉘 스크립트(fridaybackup.sh)를 작성합니다. 이 스크립트는 user2backup.tar라는 백업(tar) 파일과 user2backup.zip이라는 zip 파일을 생성합니다.

이것이 내가 지금까지 가지고 있는 것입니다

    #!/bin/sh
    echo
    echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
    read INPUT

    day=$(date +%A)
    time=$(date +%m-%d-%y)
    filename=user2backup${time}.tar.gz
    srcdir='/export/home/student/user2'
    desdir='/export/home/student/backupfolder'

   case $INPUT in
   N) echo "Bye." ;;
   Y)
   if [ "$day" = "Monday" ]
   then 
   tar -cpzf $desdir/$filename $srcdir

    else
    echo "A full backup is done on Fridays only!!!"

     fi ;;
    *) echo "Error" ;;
  esac

그런데 이런 결과가 나오네요

    student@solaris:~/user2$ sh fridaybackup.sh

    Do you want to create a full backup (Y=Yes, N=No) : Y
    tar: /export/home/student/backupfolder/user2backup10-02-17.tar.gz: No 
     such file or directory
    student@solaris:~/user2$ gedit fridaybackup.sh

어떤 도움이라도 좋을 것입니다. 미리 감사드립니다.

답변1

복사/붙여넣기 문제가 있는 것 같습니다.

변수는 다음을 사용하여 설정해야 합니다.

day=$(date +%A)

나는 당신이 백틱을 사용하고 있다고 생각하며 "월요일" 오류에 표시된 것처럼 서식을 지정할 때 사라집니다.

근처에 문법 오류가 있습니다.if

월요일 오류: 찾을 수 없음

Bash 발생의 14번째 줄에 표시된 대로 설정이 올바른지 증명하십시오.

( Monday = friday )

이는 하위 쉘을 포크하고 Monday프로그램 이름과 = Friday인수로 실행됩니다. 당신이 원하는 것이 아닌가요?

쉘 테스트에서 완성 사용

if [ "$day" = "Friday" ]

또는

if test "$day" = "Friday"

따라서 올바른 쉘은 다음과 같습니다.

#!/bin/sh
 echo
 echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
 read INPUT

 day=$(date +%A)
 time=$(date +%m-%d-%y)
 filename=user2backup$time.tar.gz
 srcdir='/export/home/student/user2'
 desdir='/export/home/student/backupfolder'

 case $INPUT in
 N) echo "Bye." ;;
 Y)
 if [ "$day" = "Friday" ]
 then 
 tar -cpzf $desdir/$filename $srcdir

 else
 echo "A full backup is done on Fridays only!!!"

 fi ;;
 *) echo "Error" ;;
 esac

답변2

read -p "Do you want to create a full backup (Y=Yes, N=No) : " INPUT귀하의 것 대신 사용해보십시오 :

echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
read INPUT

편집: @Raman이 설명했듯이 변수 선언에 실수가 있었습니다.

filename이는 변수를 선언하는 가장 좋고 안전한 방법 입니다 .

filename="user2backup${time}.tar.gz"

답변3

이 설명은 사용자에게 물어볼 필요가 없습니다. 자동으로 수행할 수 있습니다.

 #!/bin/sh
 if [ $(date +%A) = Friday ]; then
    TARFILE=/export/home/student/backupfolder/user2backup$(date +%m-%d-%y).tar
    tar -cpf $TARFILE /export/home/student/user2
    zip $TARFILE.zip $TARFILE
 fi

관련 정보