2012-10-26 64 views
3
#!/bin/sh 
dblist=mail ftp www 
for arg in $dblist; do 
mysqldump -u dumper --password=$dbpass --socket $socket --database $dblist >> /tmp/backup/$dblist.sql 
done 

每個來自變量dblist的數據庫都應寫入一個新的mysqldump行並將數據庫名稱添加到相應的字段中,如何實現這一點?爲變量中的每個參數重複命令

+0

上面所缺少的是引用多字值:'dblist =「mail ftp www」' - 不帶引號的'$ dblist'將允許for循環遍歷3個單詞。另外,修復在mysqldump命令中使用'$ dblist'而不是'$ arg'的錯誤 –

回答

1

爲什麼不聲明dblist作爲數組?

dblist=(mail ftp www) 
for arg in ${dblist}; do 
    mysqldump .... $arg 

並在您的調用中使用$arg變量。

這是bash array tutorial

2

使用可變arg(即你的數據庫名稱)來創建一個單獨的SQL轉儲文件對於這樣每個數據庫:

#!/bin/sh 
declare -a dblist=(mail ftp www) 
for arg in "${dblist[@]}" 
do 
    mysqldump -u dumper --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql 
done 
+0

擴展數組變量的首選方法是'「$ {dblist [@]}」'(不要忘記雙精度型引號!) - 這保留了數組元素中的空格,避免了glob擴展等。 –

+0

@GordonDavisson謝謝我編輯了答案。 – anubhava

0
dblist=(mail ftp) 

for arg in ${dblist[*]} 
do 
    mysqldump -u $dbuser --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql 
done 

的作品,謝謝!

相關問題