语法错误:“(”shell脚本意外

时间:2013-11-05 07:06:58

标签: shell centos ubuntu-12.04

在Ubuntu上运行bellow代码时出现7: Syntax error: "(" unexpected错误。但它在没有任何问题的情况下运行。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你需要逃离数据库= ...

行的最后一个'$'

答案 2 :(得分:0)

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

将你的shebang改为#!/bin/bash

你可能最好用$(...)代替后面的刻度。)另外,正如Sami Laine answer指出的那样,如果你引用它会更好正则表达式为grep命令(虽然它不是你问题的原因):

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