如何在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"

 

这样执行之后,最后的换行就没有了:

posted @ 2022-05-24 11:35  Zhai_David  阅读(4870)  评论(0编辑  收藏  举报