1. -----------------------将ping的结果在web界面显示---------------------------
  2. #!/bin/bash
  3. ###变量先要声明才能使用
  4. shopt -s -o nounset
    #检查参数是否正常
  5. hostlist=${1:?'请提供主机IP列表文件'}
  6. [ ! -f $hostlist ] && echo "IP列表文件不存在,请检查" && exit 1
  7. date=$(date +'%Y%m%d%H%M')
  8. date_for_man=$(date +'%Y-%m-%d %H时 %M分')

  9. #ping的次数
  10. pno=4
  11. #检查结果存文件
  12. padir="/var/www/html/pa"
  13. pahtml="$padir/index.html"
  14. pahtml_now="$padir/pa-$date.html"
  15. #函数区

  16. html_head() {
  17. [ ! -e $padir ] && mkdir -p $padir
  18. cat <<HEAD > $pahtml_now
  19. <html>
    <head>
  20. <title>ping alive 检查结果</title>
  21. <meta HTTP-EQUIV="Refresh" CONTENT="900">
  22. <meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
  23. <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
  24. <meta HTTP-EQUIV="Expires" CONTENT="Mon, 01 Jul 2000 06:00:13 GMT">
  25. <meta http-equiv="Content-Type" content="text/html; charset=Big5">
  26. </head>
  27. <body bgcolor="white">
  28. <div align=center><font size=6><b>***我的主机监控***</b></font></div>
  29. <div align=center>检测时间:$date_for_man</div>
  30. <p>
  31.         <table width="%60" align=center border=3>
  32.         <tr><td nowrap>主机名</td><td>IP</td><td nowrap>最小反应时间</td><td nowrap>最大反应时间</td><td nowrap>平均反应时间</td></tr>
  33. HEAD
  34. }
  35.  
  36. html_tr() {
  37.         if [ "$1" = "pingError" ];then
  38.         cat <<TR >> $pahtml_now
  39.         <tr><td>$host</td><td>$ip</td><td colpan=3><font color=red><b>无法连通!!!</b></font></td></tr>
  40. TR
  41.         else
  42.         cat <<TR >> $pahtml_now
  43.         <tr><td>$host</td><td>$ip</td><td>$rt_min ms</td><td>$rt_max ms</td><td>$rt_avg ms</td></tr>
  44. TR
  45. fi
  46. }
  47. html_end() {
  48.         cat <<END >> $pahtml_now
  49.         </table>
  50.         </body>
  51.         </html>
  52. END
  53.         ln -sf $pahtml_now $pahtml
  54. }

  55. html_head
  56. #--------------------------------------------------------------------------------------------
  57. while read host ip
  58. do
  59.         rt_min=
  60.         rt_avg=
  61.         rt_max=
  62. while read r
  63. do
  64.         if [[ $r == rtt* ]];then //这里的rtt要看不同的系统,centosping完后会有如上字样
  65. //其他系统要看看最后回应的结果中包含什么,然后进行替换
  66.         rt_min=$(echo $r |awk '{print $4}' | awk -F/ '{print $1}')

  67.         rt_avg=$(echo $r |awk '{print $4}' | awk -F/ '{print $2}')

  68.         rt_max=$(echo $r |awk '{print $4}' | awk -F/ '{print $3}')
  69.         html_tr $rt_min $rt_avg $rt_max
  70. fi
  71. done < <(ping -c $pno $ip)
  72. if [ -z $rt_min ];then
  73.         html_tr PingError
  74. fi
  75. done < <(cat $hostlist)
  76. #--------------------------------------------------------------------------------------------------
  77. html_end
  78. -----------------------------执行脚本---------------------------
  79. ./ping.sh hostlist.txt
  80. ---------------------------------------------------------------
  81. -------------------web服务器正常运行的情况下,在浏览器中输入http://webip/pa就可以看到结果