将循环值存储在特定变量中

将循环值存储在特定变量中

所以我有这个 shell 脚本,我在其中获取简单的用户输入的 IP 并将其存储到文本文件中。

MasterNode(){
echo "Enter number of Master Node below"
read -r numESM

for ((i=1; i<=${numESM}; i++))
  do
    echo "${bold}Enter Master node server IP below${normal}"
    read IPS;
    echo "${IPS}" >> /path/Master.txt 2>&1
done
}
MasterNode

Master.txt 输出是这样的

1.1.1.1
2.2.2.1
1.1.2.1

我想将这些IP以这种格式保存到另一个文件(配置)文件中

discovery.seed_hosts: ["1.1.1.1", "2.2.2.1","1.1.2.1"]
cluster.initial_master_nodes: ["1.1.1.1","2.2.2.1"]

有什么方法可以将循环中获得的每个值存储到某个动态变量中,例如,当循环首先运行时,该值存储在 A[0] 中,并且 A[0] 的值为 1.1.1.1 类似 A[ 1] 其值为 2.2.2.1。然后像 bash 中的任何其他变量一样获取它的值。

答案1

这个怎么样:

echo "Enter number of Master Node below"
read -r numESM

IPS=() # make empty array
for ((i=1; i<=${numESM}; i++))
do
    echo "Enter Master node server IP below"
    read IP;
    IPS+=($IP) # add entry to array
done

line="discovery.seed_hosts: ["
for i in "${IPS[@]}"
do
    line="${line}\"${i}\"," # add entry to line
done

line="${line%?}" # remove last ","
line="${line}]"  # add "]"
echo $line

您知道如何将其放入您的函数中,对吗?另一种方法是line在输入条目时添加条目并消除一个for循环。但是,您有更多的可能性如何添加它们,以及将哪些添加到另一个for循环中的行中。这是一个for循环:

echo "Enter number of Master Node below"
read -r numESM

line="discovery.seed_hosts: ["
for ((i=1; i<=${numESM}; i++))
do
    echo "Enter Master node server IP below"
    read IP;
    line="${line}\"${IP}\","
done

line="${line%?}" # remove last ","
line="${line}]"  # add "]"
echo $line

警告:对于 0 个条目,它无法正常工作。

相关内容