0

7: Syntax error: "(" unexpectedUbuntu で次のコードを実行しているときにエラーが発生します。しかし、問題なく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

'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
于 2013-11-05T19:02:52.530 に答える
0

スクリプトには1 つしかなく(、シバン行があります#!/bin/sh。私の最善の推測は、プログラム/bin/shが配列の代入を認識しないという/bin/bashことです。

シバンを に変更します#!/bin/bash

$(...)おそらくバックティックの代わりに使用する方がよいでしょう。) また、 Sami Laineが彼の回答で指摘しているように、正規表現をgrepコマンドに引用した方がよいでしょう(ただし、それは問題の原因ではありません)。 :

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

database= ... の行の最後の「$」をエスケープする必要があります。

于 2013-11-05T07:21:07.490 に答える