REX, вам нужно более точно указать, какие IP-адреса вы пытаетесь получить из этого примера.Вы также не пропускаете достаточно времени IMO, и ваш сценарий учитывает регистр, проверяя строку (не главную).В любом случае,
Сначала убедитесь, что ваш ввод и вывод работает правильно, в этом примере я просто читаю и печатаю, если это не работает, разрешения на исправление и т. Д .:
file="/tmp/hostfile.txt"
while IFS= read -r line ;do
echo $line
done < "${file}"
Затем вместо функции сначала попытайтесь заставить ее работать как скрипт, в этом примере я вручную устанавливаю «match» на DL13, затем читаю каждую строку (как раньше) и (1) match на $ match, если найден, я удаляю'|', а затем считывает строку в массив из 2. Если первый элемент массива представляет собой IP (содержит точки), установите его в качестве IP, а другой в качестве имени хоста, в противном случае установите обратное.Затем запустите тест ping.
# BASH4+ Example:
file="/tmp/hostfile.txt"
match="dl13"
while IFS= read -r line ;do
# -- check for matching string (e.g. dl13 --
[[ "${line,,}" =~ "${match,,}" ]] || continue
# -- We found a match, split out host/ip into vars --
line=$(echo ${line//|})
IFS=' ' read -r -a items <<< "$line"
if [[ "${items[0]}" =~ '.' ]] ;then
host="${items[1]}" ; ip="${items[0]}"
else
host="${items[0]}" ; ip="${items[1]}"
fi
# -- Ping test --
ping -q -c3 "${ip}" > /dev/null
if [ $? -eq 0 ] ;then
echo "$host is alive!"
else
echo "$host is toast!"
fi
done < "${file}"