68 lines
1.4 KiB
Bash
Executable File
68 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#=========================================
|
|
# Filename : check_net.sh
|
|
# Author : Colben
|
|
# Create : 2017-12-04 11:04
|
|
#=========================================
|
|
|
|
PROCS=()
|
|
|
|
function Quit {
|
|
[ -n "$1" ] && echo -e "\033[31;1mERROR: $1 !\033[0m"
|
|
exit 1
|
|
}
|
|
|
|
function StopPing {
|
|
for pid in ${!PROCS[@]}; do
|
|
kill $pid
|
|
done
|
|
Quit
|
|
}
|
|
|
|
function PingAddr {
|
|
local oldState=
|
|
local newState=
|
|
local alterTime=
|
|
while :; do
|
|
ping -w4 -c2 -q $1 > /dev/null 2>&1
|
|
newState=$?
|
|
[ "$oldState" = "$newState" ] || alterTime="$(date +'%H:%M')"
|
|
oldState=$newState
|
|
if [ '0' = "$newState" ]; then
|
|
echo "\033[32;1m connected\033[0m on $alterTime." > $1
|
|
sleep 8
|
|
else
|
|
echo "\033[31;1m lost\033[0m on $alterTime!" > $1
|
|
sleep 4
|
|
fi
|
|
done
|
|
}
|
|
|
|
# start
|
|
[ 0 -eq $# ] && Quit "No hosts found"
|
|
mkdir -p /tmp/check_net || Quit "create dir failed"
|
|
cd /tmp/check_net || Quit "change dir failed"
|
|
trap 2 3 15 "StopPing"
|
|
|
|
for addr in $@; do
|
|
PingAddr $addr &
|
|
PROCS[$!]="$addr"
|
|
done
|
|
|
|
while :; do
|
|
for pid in ${!PROCS[@]}; do
|
|
if [ ! -f /proc/$pid/stat ]; then
|
|
PingAddr ${PROCS[$pid]} &
|
|
PROC[$!]=PROC[$pid]
|
|
unset PROC[$pid]
|
|
fi
|
|
done
|
|
clear
|
|
for f in $(ls); do
|
|
echo -e "$f:$(cat $f)"
|
|
done
|
|
sleep 4
|
|
done
|
|
|
|
|