http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html

  1. #!/bin/bash
  2. # 脚本检测到离线主机会发送邮件通知,可一直运行。
  3. # 请根据你的需要设置 Mail gatewany ip lastip 四项 其余不用设置
  4. Mail=testping123@.com #报警邮件接收地址
  5. gateway=192.168.1.253 #内网网关ip 测试内网是否正常
  6. outipaddr=202.96.134.134 #外网ip 测试外网是否正常
  7. ip="192.168.1."
  8. lastip=(
  9.  
  10. ) #需要监控的主机列表 可以继续添加142
  11. unlastip=() #不在线主机列表
  12. length=${#lastip[@]} #
  13. unlength=${#unlastip[@]}
  14. echo "一共有$length个服务器在检测"
  15. ps () { #ping 在线主机列表
  16. ping $ip$ -c -w |grep -q "ttl" #最多ping2次 时间2秒内 2秒实测ping2次 ping不通2秒自动停止
  17.  
  18. if [ $? -eq ];then ###
  19. echo "ping $ip$1 pass" ###通
  20. else ### 不通
  21. ping $gateway -c -w |grep -q "ttl" #本机ping网关 测试目的:防止本机脱离局域网
  22.  
  23. if [ $? -eq ];then ## 内网通
  24. echo "ping $ip$1 lost"
  25. ping $outipaddr -c -w |grep -q "ttl" #本机ping外网
  26. if [ $? -eq ];then # 外网通 删除离线主机 并进行邮件通知
  27. echo "当前不通被删除的ip为:$1"
  28. # echo "添加前unlastip数组值为:${unlastip[@]}"
  29. # echo "进行添加"
  30. unlastip=(${unlastip[@]} $) # 把离线主机添加到离线列表中
  31. # echo "添加成功"
  32. unset lastip[i] #从数组中删除离线ip 不过echo lastip[i]的值为空 需要做以下操作
  33. echo "当前离线主机列表:${unlastip[@]}"
  34. m=${lastip[@]}
  35. lastip=($m) #删除后剩余数组内容重新赋值给数组
  36. echo "当前在线主机列表:${lastip[@]}"
  37.  
  38. length=${#lastip[@]} #
  39. unlength=${#unlastip[@]} #
  40. # fi
  41. echo `date`|mail -s "$ip$1 lost" $Mail ##发邮件提醒断网时间
  42. echo "******************* mail sent ************************"
  43. else # 发送不成功
  44. echo "sent mail failed,please check"
  45.  
  46. fi #
  47.  
  48. else ## 内网不通
  49. echo "can't reach the gateway ,please check inet "
  50. # continue
  51. fi ##
  52.  
  53. fi ###
  54. }
  55.  
  56. pu () { #ping离线主机列表
  57. ping $ip$ -c -w |grep -q "ttl" #最多ping2次 时间2秒内 2秒实测ping2次 ping不通2秒自动停止
  58. if [ $? -eq ];then ### 列表中为不通的ip 这里判断是否又通了
  59. echo "进行添加"
  60. lastip=(${lastip[@]} $)
  61. echo "添加成功"
  62. unset unlastip[j] #从数组中删除原数
  63. echo "当前在线主机列表:${lastip[@]}"
  64. m=${unlastip[@]}
  65. unlastip=($m) #删除后剩余数组内容重新赋值给数组
  66. echo "当前不在线主机列表${unlastip[@]}"
  67. unlength=${#unlastip[@]} #
  68. length=${#lastip[@]} #
  69.  
  70. fi
  71.  
  72. }
  73. while :;do # 死循环
  74. #改进后循环,unset${lastip[i]}删除数组中ping不通的ip
  75. if (($length>));then # 在线主机列表非空就检查列表中主机是否真的在线,如果不在线 ps函数将会把离线主机踢出在线列表
  76. for ((i=;i<$length;i++));do
  77. #echo ${lastip[i]}
  78. ps ${lastip[i]}
  79. #exit
  80. done
  81. fi
  82. #改进前的循环,无法删除数组原数
  83. #for i in ${lastip[*]};do # 循环ip列表
  84. #ps $i # $i就是ps里面的$
  85. #echo "sum:"$sum
  86. #done
  87. #echo $unlength
  88.  
  89. sleep
  90.  
  91. #echo "ps over and pu start"
  92. if (($unlength>));then # 有离线主机就开始检查离线主机是否恢复在线,pu函数将对恢复在线的主机添加到在线主机列表中
  93. for ((j=;j<$unlength;j++));do
  94. pu ${unlastip[j]}
  95. done
  96. fi
  97. # echo "pu over and ps start"
  98.  
  99. echo "当前在线主机列表:${lastip[@]}"
  100.  
  101. echo "当前不在线主机列表${unlastip[@]}"
  102.  
  103. done

数组 bash shell的更多相关文章

  1. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  2. 【Shell脚本学习13】Shell数组:shell数组的定义、数组长度

    Shell在编程方面比Windows批处理强大很多,无论是在循环.运算. bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利 ...

  3. Shell数组:shell数组的定义、数组长度

    Shell在编程方面比Windows批处理强大很多,无论是在循环.运算. bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利 ...

  4. shell脚本学习之Bash shell 里各种括号的用法

    今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括 ...

  5. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  6. bash shell学习-shell基础 (笔记)

    When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...

  7. 系统管理中 bash shell 脚本常用方法总结

    在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则 1. 单引号和双引号的区别 单引 ...

  8. (转)linux bash shell 入门教程

    Shell Script(bash)简介 众所皆知地,UNIX上以小工具著名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得UNIX成为许多人心目中理想的系统平台. 在众多的 ...

  9. 【Linux】bash shell学习

    Bash Shell Linux系统的合法shell都写入/etc/shells这个文件,默认使用的shell版本称为“Bourne Again Shell(简称bash)” 用户登录时系统会分配一个 ...

随机推荐

  1. Java常考面试题(二)(转)

    序言 昨天刚开始的"每日5题面试"这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看 ...

  2. 实训23 功能FC的建立与调用

    第4章:实训23 功能的生成与条用 功能简称FC 是用户编写的没有自己存储区的逻辑块 . 功能主要用来执行条用一次就可以完成的操作. 类似于C语言中的 函数 步骤一 单击确定 以后 出现了 在下面图框 ...

  3. 获取指定进程号,并kill掉

    直接上案例: 例子:获取nginx进程 方法:$ps -aux |grep nginx |grep -v grep |awk '{print $2}'  或者 $ps -ef |grep nginx ...

  4. django 中从外界借助多个网站时 static 的存放和整理

    在 模板之家中  前端页面直接上去抓取  可是遇到重复  或者 版本不统一  所以 在每个app下面建立自己的 stastic 在制作的html  页面上方 导入静态页面 {% load static ...

  5. FULLTEXT INDEX全文索引

    给现有的wxinfo表的sourceUrl 字段创建全文索引 ALTER TABLE wxinfo ADD FULLTEXT INDEX sourceUrl (sourceUrl) 创建全文索引前: ...

  6. 从0到1完成微信小程序开发(2)

    一,小程序的文件结构 小程序包含一个描述程序的app和多个描述各自页面的page 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 一个小程序页面由四个文件组成,分别是: 下面是一个单页 ...

  7. 开源DDD设计模式框架YMNNetCoreFrameWork第四篇-增加YMNSession,增加异常处理,增加策略授权

    1.增加YMNSession,可以获取当前登录的用户信息 2.增加异常处理,不要使用过滤器,过滤器只能获取到mvc异常 3.增加策略授权,策略授权支持用户角色.用户名授权,初步实现 代码地址:http ...

  8. React 学习笔记(2) 路由和UI组件使用

    安装依赖 cnpm install react-router-dom -S // 或 yarn add react-router-dom 导入 // index.js import React fro ...

  9. 打包APK出现org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:lintVitalRelease'.

    AndroidS Studio打包APK时出现问题:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':a ...

  10. winfrom窗体的透明度

    在VS中创建一个Winform项目,其默认的窗体名称为 Form1. 在VS设计界面中对 Form1 的 Opacity 属性值设置为 50%. 没错,就这样就可以了. 方法2:            ...