在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
答案 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$') )