我正在构建一个shell脚本,它将在crontab的帮助下每晚运行,我的脚本会一直轰炸并向我发出错误"语法错误:单词意外(预期" do&#34 )。
脚本本身为它在目录中找到的每个MySQL文件创建一个新目录,然后将文件从相应的mysqldump目录复制到创建的目录。如果我使用此代码在正确的轨道上,请告诉我以及可能导致我的文件结束错误的原因。我是shell脚本的新手,会接受任何建议。如果有更好的方法来编写我的代码,那么也可以在这方面提供帮助。
CDPATH="/backups/mysql"
#
now=$(date +"%Y_%m_%d")
#
# Find Directory Name
#
for file in */; do
dir=${file%/}
if [[ -e "$dir"]]
then
echo "Directory Exists!"
else
echo "Directory doesn't exist."
fi
done
#
# Copy MySQL Databases
#
while [ -d $dir ]; do # Check existing Dirs
cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now # If Dir exists, create copy
if [ ! -d $dir ]; then # If Dir nonexistant create
mkdir -p $dir
cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now
else # If all else fails just create a copy in /mysql
cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now
fi
done
提前感谢您的帮助!
答案 0 :(得分:0)
1.请勿在“其他”之后使用“then”
2.第二行可能不是你想要的。它只是将变量dir设置为字符串“dir(/ backups / mysql / *)”
......问题已经改变,已经过时了。
我假设,文件格式如下......
/dbase/files/db1.sql
/dbase/files/db2.sql
...
...应备份到以下目的地:
/backups/mysql/db1/2014_11_18/db1.sql
#!/bin/bash
BACKUP_DIR="/backups/mysql/"
FILE_DIR=/dbase/files/
now=$(date +"%Y_%m_%d")
# setting the input field seperator to newline
IFS=$'\n'
# find db backups and loop over
for file in $(find ${FILE_DIR} -maxdepth 1 -name "*.sql" -type f -exec basename {} \;); do
# create backup directory:
mkdir -p "${BACKUP_DIR}${file%.sql}/${now}"
# copy file over
cp "${FILE_DIR}${file}" "${BACKUP_DIR}${file%.sql}/${now}/"
done
将脚本转换为unix编码:
dos2unix script.sh