ループ値を特定の変数に保存

ループ値を特定の変数に保存

そのため、単純なユーザー入力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]の値はA [1と同じ1.1.1.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

警告:項目がゼロの場合、正しく機能しません。

おすすめ記事