#!/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
- サイト(site1、site2、site3)を並列に実行し、各サイトの配列入力を個別に取得できるように、forループ入力に基づいて配列名を指定する方法がわかりません。それ以外の場合は、各実行に時間がかかります。
- 私は一連の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
その後、新しいシェルを起動します。 - (この会議のみ)
. $(which env_parallel.bash)
これが望ましくない場合は、完全な例を作成して継続的に実行することをお勧めします。