通过ping命令检测IP地址的shell脚本,代码如下:
#!/bin/sh
#filename ping.sh
#edit by www.jb200.com
pingcmd()
{
prefix="SERVER $1 PING $2"
ping -w 1 -c 1 $2>/dev/null
ret=$?
if [ $ret -eq 0 ]
then printf "$prefix is up"
else printf "$prefix is down n"
fi
return 0
}
echo "---begin check host ---"
server0="192.168.1.3"
server1="192.168.1.2"
server2="192.168.1.1"
server3="192.168.1.4"
server4="192.168.1.5"
server5="192.168.1.6"
server6="192.168.1.7"
server7="192.168.1.9"
pingcmd $server0 $server1
pingcmd $server0 $server2
pingcmd $server0 $server3
pingcmd $server0 $server4
pingcmd $server0 $server5
pingcmd $server0 $server6
pingcmd $server0 $server7
echo ""
代码说明:
通过调用shell函数pingcmd,实现ping设置在severX中的IP地址代表的主机。
分析下pingcmd函数的实现:
prefix="SERVER $1 PING $2" //定义一个字符串,为后面printf输出做准备
ping -w 1 -c 1 $2>/dev/null
//调用ping函数,-w为超时时间;-c为ping的次数;
ping -w 1 -c 1 $2
从脚本所在机去ping之后pingcmd函数的第二个参数(本例为之后建立的serve1-7),超时1秒,执行1次
>/dev/null 的作用是把屏幕的输出从指向到某处,/dev/null是指向空设备,即不需要标准输出。
ret=$? //获取返回值,0为ping成功
if [ $ret -eq 0 ] //如果返回值为0,即ping成功
then printf "$prefixt is up" 则输出一开始定义的字符串(例:SERVER 192.168.1.3 PING 192.168.1.2 OK)
else printf "$prefixt is down" 同上,输出错误信息(此处删除标准输出,之前已定义了输)。
fi
调用示例,如下图: