如何在shell的循环中实现字符串的拼接
有这么个需求,提供具体的IP地址和端口号
IPList="172.20.59.238:34994,172.20.59.21:34994,172.20.59.28:34994"
想要对这些IP、端口进行处理输出如下的内容
<domain> <host>172.20.59.28</host> <port>34994</port> </domain> <domain> <host>172.20.59.21</host> <port>34994</port> </domain> <domain> <host>172.20.59.238</host> <port>34994</port> </domain>
那要怎么做··· ···
我们来简单的分析下,每个IP、端口号都包含如下的部分
<domain> <host>IP信息</host> <port>端口号</port> </domain>
那么我们只要通过一个循环,将这些字符串拼接起来,就可以了··· ···
那说干就干
我们写了一个如下的shell脚本
#!/bin/bash IPList="172.20.59.238:34994,172.20.59.21:34994,172.20.59.28:34994" IPNew1=${IPList//,/ } str="" for i in $IPNew1 do ip=`echo $i|awk -F ":" '{print $1}'` port=`echo $i|awk -F ":" '{print $2}'` str=" <domain> <host>$ip</host> <port>$port</port> </domain>\n""$str" done echo -ne "$str"
执行下,看下结果:
[root@nctest-snap-test-02 practises]# sh redis-sentinel.sh <domain> <host>172.20.59.28</host> <port>34994</port> </domain> <domain> <host>172.20.59.21</host> <port>34994</port> </domain> <domain> <host>172.20.59.238</host> <port>34994</port> </domain> [root@nctest-snap-test-02 practises]#
已经满足了我们的要求
那我们就再回到具体的实现上,主要有3点:
1、定义一个原始的字符串
str=""
这里,我们定义的是一个空字符串
2、循环中实现字符串的拼接
str=" <domain> <host>$ip</host> <port>$port</port> </domain>\n""$str"
这样多次循环后,字符串就可以拼接在一起了。
3、显示中使用echo的-e选项显示
echo -e "$str"
-e选项,就会将其中的\n解析成换行
另外,在最后一个输出之后,默认会有个换行
如果不想要这个换行,可以使用echo的-n选项
echo -ne "$str"
这样执行之后,最后的换行就没有了: