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

#!/bin/bash
# 脚本检测到离线主机会发送邮件通知,可一直运行。
# 请根据你的需要设置 Mail gatewany ip lastip 四项 其余不用设置
Mail=testping123@.com #报警邮件接收地址
gateway=192.168.1.253 #内网网关ip 测试内网是否正常
outipaddr=202.96.134.134 #外网ip 测试外网是否正常
ip="192.168.1."
lastip=( ) #需要监控的主机列表 可以继续添加142
unlastip=() #不在线主机列表
length=${#lastip[@]} #
unlength=${#unlastip[@]}
echo "一共有$length个服务器在检测"
ps () { #ping 在线主机列表
ping $ip$ -c -w |grep -q "ttl" #最多ping2次 时间2秒内 2秒实测ping2次 ping不通2秒自动停止 if [ $? -eq ];then ###
echo "ping $ip$1 pass" ###通
else ### 不通
ping $gateway -c -w |grep -q "ttl" #本机ping网关 测试目的:防止本机脱离局域网 if [ $? -eq ];then ## 内网通
echo "ping $ip$1 lost"
ping $outipaddr -c -w |grep -q "ttl" #本机ping外网
if [ $? -eq ];then # 外网通 删除离线主机 并进行邮件通知
echo "当前不通被删除的ip为:$1"
# echo "添加前unlastip数组值为:${unlastip[@]}"
# echo "进行添加"
unlastip=(${unlastip[@]} $) # 把离线主机添加到离线列表中
# echo "添加成功"
unset lastip[i] #从数组中删除离线ip 不过echo lastip[i]的值为空 需要做以下操作
echo "当前离线主机列表:${unlastip[@]}"
m=${lastip[@]}
lastip=($m) #删除后剩余数组内容重新赋值给数组
echo "当前在线主机列表:${lastip[@]}" length=${#lastip[@]} #
unlength=${#unlastip[@]} #
# fi
echo `date`|mail -s "$ip$1 lost" $Mail ##发邮件提醒断网时间
echo "******************* mail sent ************************"
else # 发送不成功
echo "sent mail failed,please check" fi # else ## 内网不通
echo "can't reach the gateway ,please check inet "
# continue
fi ## fi ###
} pu () { #ping离线主机列表
ping $ip$ -c -w |grep -q "ttl" #最多ping2次 时间2秒内 2秒实测ping2次 ping不通2秒自动停止
if [ $? -eq ];then ### 列表中为不通的ip 这里判断是否又通了
echo "进行添加"
lastip=(${lastip[@]} $)
echo "添加成功"
unset unlastip[j] #从数组中删除原数
echo "当前在线主机列表:${lastip[@]}"
m=${unlastip[@]}
unlastip=($m) #删除后剩余数组内容重新赋值给数组
echo "当前不在线主机列表${unlastip[@]}"
unlength=${#unlastip[@]} #
length=${#lastip[@]} # fi }
while :;do # 死循环
#改进后循环,unset${lastip[i]}删除数组中ping不通的ip
if (($length>));then # 在线主机列表非空就检查列表中主机是否真的在线,如果不在线 ps函数将会把离线主机踢出在线列表
for ((i=;i<$length;i++));do
#echo ${lastip[i]}
ps ${lastip[i]}
#exit
done
fi
#改进前的循环,无法删除数组原数
#for i in ${lastip[*]};do # 循环ip列表
#ps $i # $i就是ps里面的$
#echo "sum:"$sum
#done
#echo $unlength sleep #echo "ps over and pu start"
if (($unlength>));then # 有离线主机就开始检查离线主机是否恢复在线,pu函数将对恢复在线的主机添加到在线主机列表中
for ((j=;j<$unlength;j++));do
pu ${unlastip[j]}
done
fi
# echo "pu over and ps start" echo "当前在线主机列表:${lastip[@]}" echo "当前不在线主机列表${unlastip[@]}" 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. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  2. junit小试log4j及xml配置文件说明

        上篇文章介绍了java日志框架使用情况,以及xml配置文件的简单说明.但主要还是根据别人的博客整理一下知识结构,只能是纸上谈兵,本文通过junit测试框架来玩玩log4j. 1.junit+l ...

  3. Oracle 建库

    Oracle得安装就不多说了 不过还是建议直接去官网下  其他渠道可能会导致安装问题  具体自己慢慢体会吧  !  下面主要说下怎么用Oracle建库并且建用户角色 Database configur ...

  4. 阿里云安装配置nginx

    一.简介 Nginx是一款轻量级的网页服务器.反向代理服务器.相较于Apache.lighttpd具有占有内存少,稳定性高等优势.它最常的用途是提供反向代理服务. 二 .安装 1.准备工作 Nginx ...

  5. dedecms 栏目目录用首字母生成的方法

    修改dede/catalog.add.php文件 85行 $toptypedir = GetPinyin(stripslashes($toptypename)); 修改为 $toptypedir = ...

  6. spring boot rest api exception解决方案

    1.控制器级别@ExceptionHandler public class FooController{           //...     @ExceptionHandler({ CustomE ...

  7. php.basic.functions

    array_unshift call_user_func_array闭包 下面是学院的代码 class Container { protected $binds; protected $instanc ...

  8. TensorFlow--交互式使用--tf.InteractiveSession()

    用tf.Session()创建会话时只有在会话中run某个张量才能得到这个张量的运算结果,而交互式环境下如命令行.IPython,想要执行一行就得到结果,这就需要用到tf.InteractiveSes ...

  9. 157-PHP strrchr函数输出最后一次出现字母p的位置到字符串结尾的所有字符串

    <?php $str='PHP is a very good programming language!'; //定义一个字符串 echo strrchr($str,'o'); //输出最后一次 ...

  10. XPath--快速获取XML数据的节点或属性

    转载自 XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识.示例Xml: <?xml version="1.0" ...