2012-03-13 39 views
5

我有以下內容的文件的config.ini:內串聯字符串變量在bash的循環殼

@ndbd 

我想與其他一些文本敲定文件替換@ndbd。下面是我的bash腳本代碼:

ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241) 

ip_temp="" 
for ip in $ip_ndbd 
do 
    ip_temp+="\n\[ndbd\]\nHostname=$ip\n" 
done 
perl -0777 -i -pe "s/\@ndbd/$ip_temp/" /var/lib/mysql-cluster/config.ini 

基本上,我只是想在一個特定格式的所有IP地址,然後將生成的字符串替換@ndbd

但是,我的for循環似乎並沒有連接來自$ip_ndbd的所有數據,只是列表中的第一項。

因此,而不是越來越:

[ndbd] 
HostName=108.166.104.204 

[ndbd] 
HostName=108.166.105.47 

[ndbd] 
HostName=108.166.56.241 

我越來越:

[ndbd] 
HostName=108.166.104.204 

我敢肯定有一個更好的方式來寫這篇文章,但我不知道怎麼辦。

我希望得到一些幫助。

在此先感謝。

回答

10

如果你想遍歷數組變量,你需要指定整個數組:

ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241) 

ip_temp="" 
for ip in ${ip_ndbd[*]} 
do 
    ip_temp+="\n\[ndbd\]\nHostname=$ip\n" 
done 
0

我沒有看到內容@ndbd文件的任何使用...

這是你想要的嗎?

kent$ echo "108.166.104.204 108.166.105.47 108.166.56.241"|awk '{for(i=1;i<=NF;i++){print "[ndbd]";print "HostName="$i;print ""}}' 
[ndbd] 
HostName=108.166.104.204 

[ndbd] 
HostName=108.166.105.47 

[ndbd] 
HostName=108.166.56.241 

你可以只通過> config.ini

2

輸出重定向到您的config.ini文件替換

ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241) 

ip_ndbd="108.166.104.204 108.166.105.47 108.166.56.241" 
+1

該數組更好,您只需要以正確的方式循環它。 – caesarsol 2015-05-15 16:41:30