特定日期的 UNIX Shell 脚本备份目录

特定日期的 UNIX Shell 脚本备份目录

基本上这是我试图回答的问题

2) 编写一个 shell 脚本 (fridaybackup.sh),如果在星期五运行,它将备份 user2 主目录中的所有文件。该脚本将创建一个名为 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

星期一错误:未找到

证明设置是正确的,如第 14 行 bash遭遇:

( Monday = friday )

这分叉了一个子 shell,Monday作为程序名称和= Friday参数运行。这不是你想要的。

在外壳测试中使用完成

if [ "$day" = "Friday" ]

或者

if test "$day" = "Friday"

因此正确的 shell 看起来像:

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

相关内容