我的博客已迁移到xdoujiang.com请去那边和我交流
一、基础环境说明
1、该脚本用来检查某个服务产生core文件只发送1次短信,相同的core文件不再发送

2、这里模拟3个online目录
ll /opt/online/
drwxr-xr-x 2 root root 4096 2015-04-27 18:20 online.11
drwxr-xr-x 2 root root 4096 2015-04-27 18:20 online.22
drwxr-xr-x 2 root root 4096 2015-04-27 18:20 online.33

3、shell说明和使用
1)先创建1个文件
touch /opt/online/online.11/core.111
2)执行第1次脚本后会
ll /opt/online/online.11/
-rw-rw-r--. 1 root root 0 Apr 27 22:05 core.111
-rw-rw-r--. 1 root root 9 Apr 27 23:27 corefile
cat /opt/online/online.11/corefile 
core.111
执行第2次时就不会再发送短信和写入到这个corefile文件里了。
3)shell一些语法说明
message=$@
也可以写成message=""
$@
所有的位置参数(每个都作为独立的字符串) 等同于"$1" "$2"... "$N"。
set -o nounset
在扩展一个没有的设置的变量的时候,显示错误的信息 
set -o errexit
如果一个命令返回一个非0退出状态值(失败),就退出.

二、shell脚本
#!/bin/bash
#--------------------------------------------------  
#Created:2015-04-27
#Author:jimmygong
#Mail:jimmygong@taomee.com
#Function:check core && send message
#Version:1.0
#--------------------------------------------------
set -o nounset
set -o errexit

onlinedir="/opt/online"
tellist=(12345678912 12345678913)

function sendmessage () 
{
    currdate="$(date +%Y/%m/%d)"
    message=$@
    ip=`ifconfig eth1|awk '/inet addr:/'|awk -F: '{print $2}'|awk -F" " '{print $1}'`
    for phone in ${tellist[@]}
    do
        links -dump "http://192.168.1.1/22222?mobile=$phone&msg=$currdate:$message:$ip&sign=11111111111111111111111111111111" > /dev/null 2>&1
    done
}

function checkcore ()
{
    num=`ls -1 $onlinedir|grep "^online"|wc -l`
    for ((k=1;k<=${num};k++))
    do
        listdir=`ls -1 $onlinedir|grep "^online"|sed -n $k'p'`
        for j in $onlinedir/$listdir
        do
            cd $j
            touch corefile
            for m in core.*
            do
                if [[ -e $m ]]
                then
                    core=0
                    for f in `cat $j/corefile`
                    do
                        if [[ $m = $f ]]
                        then
                            core=1
                            break
                        fi
                    done
                    if [[ $core -eq 0 ]]
                    then
                        message="core"
                        sendmessage $message            
                        echo $m >> $j/corefile
                    fi
                fi
            done
        done
    done
}

checkcore
exit 0