Ubuntu bash - 意外的文件错误结束

时间:2012-01-19 15:26:40

标签: bash shell

我正在尝试学习一些关于bash命令的知识 - 更具体地说是关于备份脚本的知识。 不幸的是,我在最后一行收到语法错误。我不知道我做错了什么,并希望得到关于此事的任何反馈。

代码:

#!/bin/sh

if [ -f $"/archive/backup-20110111.tar.gz" ]; then
    echo "File already exists"
else
    sudo cp /home/plepple/Documents/backup/backup-20110111.tar.gz
            /home/plepple/Documents/backup/archive/backup-20110111.tar.gz
    rm /home/plepple/Documents/backup/backup-20110111.tar.gz
fi

if [ -f $"/archive/backup-20110112.tar.gz" ]; then
    echo "File already exists"
else
    sudo cp /home/plepple/Documents/backup/backup-20110112.tar.gz
            /home/plepple/Documents/backup/archive/backup-20110112.tar.gz
    rm /home/plepple/Documents/backup/backup-20110112.tar.gz
fi

curdate='date +%Y%m%d'
mv /home/plepple/Documents/backup/backup.tar.gz
   /home/plepple/Documents/backup/backup-$curdate.tar.gz

我尝试用(

)执行它(通过bash)
bash backupscript.sh

存在所有文件和目录。

谢谢!

3 个答案:

答案 0 :(得分:3)

mv /home/plepple/Documents/backup/backup.tar.gz
   /home/plepple/Documents/backup/backup-$datum.tar.gz

应该是

mv /home/plepple/Documents/backup/backup.tar.gz \
   /home/plepple/Documents/backup/backup-$datum.tar.gz

同样如此
sudo cp /home/plepple/Documents/backup/backup-20110111.tar.gz \
            /home/plepple/Documents/backup/archive/backup-20110111.tar.gz

sudo cp /home/plepple/Documents/backup/backup-20110112.tar.gz \
            /home/plepple/Documents/backup/archive/backup-20110112.tar.gz

答案 1 :(得分:1)

结束fi块的if在哪里?

答案 2 :(得分:1)

这不是问题,只是一个misc bash语法更正:在bash中,构造$"somestring"调用本地化。来自bash手册页:

A  double-quoted  string  preceded  by a dollar sign ($) will cause the
string to be translated according to the current locale.  If  the  cur-
rent  locale  is C or POSIX, the dollar sign is ignored.  If the string
is translated and replaced, the replacement is double-quoted.

这似乎与您的if测试中的文件路径无关,因此您应该关闭$。实际上,由于文件路径中没有任何有趣的字符,你甚至不需要它们周围的引号(尽管过度使用双引号比使用不足更好)。