在动态数组中追加值

在动态数组中追加值
#!/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. 我不确定如何根据 for 循环输入命名数组,以便它可以并行运行站点(site1,site2,site3)并为每个站点单独获取数组输入。否则每次运行都会花费更长的时间。
  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

parset是 GNU Parallel 的一部分。安装 GNU Parallel 后,您需要parset通过以下方式激活:

  • (永久)env_parallel --install然后启动一个新的 shell
  • (仅限本次会议). $(which env_parallel.bash)

如果这不是您想要的,我建议您制作一个完整的示例,但要连续执行。

相关内容