루프 값을 특정 변수에 저장

루프 값을 특정 변수에 저장

그래서 간단한 사용자 입력 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

경고: 항목이 0개이면 제대로 작동하지 않습니다.

관련 정보