我想使用fping来ping一个文件中包含的多个ips,并将失败的ips输出到一个文件中,即
HOSTS.TXT
8.8.8.8
8.8.4.4
1.1.1.1
ping.sh
#!/bin/bash
HOSTS="/tmp/hosts.txt"
fping -q -c 2 < $HOSTS
if ip down
echo ip > /tmp/down.log
fi
所以我想在down.log文件中以1.1.1.1结束
答案 0 :(得分:1)
这是获得所需结果的一种方法。但请注意;我在脚本的任何地方都没有使用fping。如果使用fping对你来说至关重要,那么我可能完全错过了这一点。
#!/bin/bash
HOSTS="/tmp/hosts.txt"
declare -i DELAY=$1 # Amount of time in seconds to wait for a packet
declare -i REPEAT=$2 # Amount of times to retry pinging upon failure
# Read HOSTS line by line
while read -r line; do
c=0
while [[ $c < $REPEAT ]]; do
# If pinging an address does not return the word "0 received", we assume the ping has succeeded
if [[ -z $(ping -q -c $REPEAT -W $DELAY $line | grep "0 received") ]]; then
echo "Attempt[$(( c + 1))] $line : Success"
break;
fi
echo "Attempt[$(( c + 1))] $line : Failed"
(( c++ ))
done
# If we failed the pinging of an address equal to the REPEAT count, we assume address is down
if [[ $c == $REPEAT ]]; then
echo "$line : Failed" >> /tmp/down.log # Log the failed address
fi
done < $HOSTS
用法:./ script [延迟] [repeatCount] - &#39;延迟&#39;是我们等待ping响应的总秒数,&#39; repeatCount&#39;是在决定地址失效之前我们在失败时重试ping的次数。
我们逐行阅读/tmp/hosts.txt
并使用ping
评估每个地址。如果ping一个地址成功,我们继续下一个地址。如果地址失败,我们会再次尝试用户指定的次数。如果地址未通过所有ping,我们会将其记录在/tmp/down.log
。
检查ping失败/成功的条件可能对您的用例不准确,因此您可能需要对其进行编辑。不过,我希望这能得到全面的了解。
答案 1 :(得分:1)
似乎从fping解析数据有点困难。它允许解析活着但未死的主机的数据。作为解决问题的方法并允许与-f同时进行多个主机处理,所有活动的主机都放在一个名为alive的变量中,然后/tmp/hosts.txt文件中的主机被循环通过并进行grepped变量有效以破译主机是活着还是死亡。返回码为1表示grep无法在alive中找到主机,因此是down.log的补充。
alive=$(fping -c 1 -f ipsfile | awk -F: '{ print $1 }')
while read line
do
grep -q -o $line <<<$alive
if [[ "$?" == "1" ]]
then
echo $line >> down.log
fi
done < /tmp/hosts.txt