0

在Ubuntu7: Syntax error: "(" unexpected上运行波纹管代码时出现错误。但是它在centos上运行没有任何问题。

#!/bin/sh
#
TODATE=`date '+%Y-%b-%d'`
#
# Backup Creation for Databases
#
databases=(`echo 'show databases;' | mysql -u root -ppaSSword | grep -v ^Database$`)
for DB in "${databases[@]}"; do
mysqldump --force --opt --user=root --password=paSSword $DB | gzip > /mnt/Backup/DB/${DB}_${TODATE}.sql.gz
done
#

请帮我解决这个问题。

我想不出问题。但,

我正在使用波纹管代码进行备份。它在 Ubuntu 上运行良好

#!/bin/bash
#
TODATE=`date '+%Y-%b-%d'`
databases="$(mysql -u root -ppaSSword -Bse 'show databases')"
for DB in $databases
do
mysqldump -u root -psqlMYadmin $DB | gzip > /mnt/Backup/DB/${DB}_${TODATE}.sql.gz
done
4

3 回答 3

1

You can redirect the 'show databases' output to dump.txt file, if done then try.

 #!/bin/bash
 da=$(date +"%d-%m-%y")
 for db in `cat dump.txt` ; do mysqldump --force --opt --user=root --password=paSSword $db | gzip /path/to/backup/$db_"$da".sql.gz ; done
于 2013-11-05T19:02:52.530 回答
0

您需要转义数据库= ...

于 2013-11-05T07:21:07.490 回答
0

脚本中只有一个(,而且你有 shebang 行#!/bin/sh。我最好的猜测是该程序/bin/sh无法识别数组分配,而/bin/bash可以。

将您的 shebang 更改为#!/bin/bash.

你可能会更好地使用$(...)代替反引号。)另外,正如Sami Laine在他的回答中指出的那样,如果你在命令中引用正则表达式会更好grep(尽管这不是你的问题的原因) :

databases=( $(echo 'show databases;' | mysql -u root -ppaSSword | grep -v '^Database$') )
于 2013-11-05T07:27:18.027 回答