동적 배열에 값 추가

동적 배열에 값 추가
#!/bin/bash

range=$(seq -f "cen%04g" 1052 1099) 
range1=$(seq -f "rh%04g" 1052 1099)  

check () {
for node1 in ${range};do
   ping -q -c 1 -w 3 -s 10 $node1 >/dev/null
   if [ $? -eq 0 ];then
       $i_up+=(${node1}",")
   else
       $i_down+=(${node1}",")
   fi
done
}

for i in "site1" "site2" "site3"
do
   declare -a $i_down
   declare -a $i_up
   check &
done
  1. 사이트(site1, site2, site3)를 병렬로 실행하고 각 사이트에 대한 배열 입력을 개별적으로 가져올 수 있도록 for 루프 입력을 기반으로 배열 이름을 지정하는 방법을 잘 모르겠습니다. 그렇지 않으면 각 실행이 더 오래 걸릴 것입니다.
  2. 나는 일련의 cen(1052에서 1099)을 가지고 있는데 거기에서 그것을 찾지 못하면 같은 번호를 가진 다른 시리즈(rh)를 확인해야 합니다. 예: cen1052가 존재하지 않으면 rh1052를 확인해야 합니다. 어떻게 할 수 있습니까?

답변1

나는 당신이 찾고 있다고 생각합니다 parset:

checkhost() {
    piing() {
        ping -q -c 1 -w 3 -s 10 "$1" >/dev/null
    }
    if piing "cen$1"; then
      echo "+cen$1"
    else
      if piing "rh$1"; then
         echo "+rh$1"
      else
        if piing "deb$1"; then
           echo "+deb$1"
        else
           echo "-cen$1"
        fi
      fi
    fi
}
export -f checkhost
parset updown -j0 checkhost ::: {1052..1099}
echo "${updown[@]}"

이러한 사이트가 작동하는 데 어떻게 필요한지 명확하지 않습니다. 예를 들어, 추가할 도메인 이름인 경우 다음을 수행할 수 있습니다.

parset updown -j0 checkhost {1}.{2} ::: {1052..1099} ::: site1.com site2.com site3.com

parsetGNU Parallel의 일부입니다. GNU Parallel을 설치한 후 parset다음을 통해 활성화 해야 합니다 .

  • (영구적으로) env_parallel --install그런 다음 새 쉘을 시작하십시오.
  • (이 회의에만 해당). $(which env_parallel.bash)

이것이 원하는 것이 아니라면 완전한 예제를 만들고 지속적으로 실행하는 것이 좋습니다.

관련 정보