写入文件

时间:2016-12-24 11:16:53

标签: linux bash shell

我想创建一个shell脚本,将一些配置设置写入Ubuntu上的xml配置文件。但是,这些设置是针对MQ集群的,我需要脚本为正在建立的每个节点循环不同的次数(由输入参数设置)。

我想写的文件是:

    <listeners>
        <tcp-listener>
            <port>1883</port>
            <bind-address>10.0.0.4</bind-address>
        </tcp-listener>
    </listeners>
    <mqtt>
        <max-client-id-length>65535</max-client-id-length>
        <retry-interval>10</retry-interval>
        <max-queued-messages>1000</max-queued-messages>
    </mqtt>
    <cluster>
        <enabled>true</enabled>
        <transport>
            <tcp>
                <bind-address>10.0.0.4</bind-address>
                <bind-port>7800</bind-port>
            </tcp>
        </transport>
        <discovery>
            <static>
                <node>
                    <host>10.0.0.5</host>
                    <port>7800</port>
                </node>
                <node>
                    <host>10.0.0.6</host>
                    <port>7800</port>
                </node>
                <node> n times </node>
            </static>
        </discovery>
        <failure-detection>
            <heartbeat>
                <enabled>true</enabled>
                <interval>5000</interval>
                <timeout>15000</timeout>
            </heartbeat>
        </failure-detection>
    </cluster>

基本上,<node>个对象的数量需要反映脚本所采用的变量。

但是,我不确定如何根据写入文件进行循环。我正在考虑使用tee命令,但这不会让我循环。我想我可以将文件写入节点对象,然后循环执行基于

的写入

这是我到目前为止只写静态文本:

tee /opt/hivemq/conf/config.xml > /dev/null <<'EOF'
     <the xml goes here>
exit 0
EOF

在写入期间有没有办法循环?或者我是否需要写入循环对象,停止写入然后有一个基于循环计数器执行多次写入的循环,然后最后写入最后一位。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

有一个名为“seq&#39;您可以使用它来帮助迭代,所以尝试类似:

#!/bin/bash

end=$1

(
    echo start

    for num in $(seq 1 $end)
    do
         node="10.0.0.$num"
         echo $node
    done

    echo end
) > out.xml