Linux 在bash shell中的for循环内串联字符串变量
我有一个包含以下内容的config.ini文件:Linux 在bash shell中的for循环内串联字符串变量,linux,bash,shell,Linux,Bash,Shell,我有一个包含以下内容的config.ini文件: @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/" /
@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\u 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
我很确定有更好的方法写这个,但我不知道怎么写
我非常感谢你的帮助
提前感谢。我没有看到您的文件在content@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
kent$echo“108.166.104.204 108.166.105.47 108.166.56.241”{for(i=1;i替换
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)
ip_temp=""
for ip in ${ip_ndbd[*]}
do
ip_temp+="\n\[ndbd\]\nHostname=$ip\n"
done
阵列更好,只需以正确的方式循环即可。
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