2013-11-05 107 views
0

我得到7: Syntax error: "(" unexpected错误,而在Ubuntu上运行娄代码,但它在CentOS运行没有任何问题语法错误:“(”意外的shell脚本

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

回答

0

您需要跳过最后的'$'行数据库= ...

0

脚本中只有一个(,并且您有shebang行#!/bin/sh。我最好的猜测是程序/bin/sh不识别数组赋值,而/bin/bash会。

将您的垃圾改为#!/bin/bash

你可能会做的更好替代反勾的使用$(...))。另外,作为Sami Laine指出了他的answer,它会更好,如果你报的正则表达式的grep命令(虽然它不是导致您的问题):

databases=($(echo 'show databases;' | mysql -u root -ppaSSword | grep -v '^Database$')) 
1

您可以将'show databases'输出重定向到dump.txt文件,如果完成然后尝试。

#!/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 
相关问题