#!/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
- 我不确定如何根据 for 循环输入命名数组,以便它可以并行运行站点(site1,site2,site3)并为每个站点单独获取数组输入。否则每次运行都会花费更长的时间。
- 我有系列 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)
如果这不是您想要的,我建议您制作一个完整的示例,但要连续执行。