保障班4-0618学习任务

1.shell中的函数

2.shell中的数组

3.告警系统需求分析

4.告警系统主脚本

5.告警系统配置文件

6.告警系统监控项目

7.告警系统邮件引擎

8.运行告警系统

1.shell中的函数

函数也有类似于别名的作用,简单的说,函数的作用就是将程序里面多次被调用的代码组合起来,称为函数体,并取一个名字称为(函数名),当我们需要用到这段代码的时候,我们就可以直接来调用函数名。

1.1 函数定义


            1

            2

            3

            4
            
            
            function 函数名() {

                语句

                [return]

            }
            
        关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后可以跟一个括号,符号“{”表示函数执行命令的入口,该符号也可以在函数名那一行,“}”表示函数体的结束,两个大括号之间是函数体。

语句部分可以是任意的Shell命令,也可以调用其他的函数。

如果在函数中使用exit命令,可以退出整个脚本,通常情况,函数结束之后会返回调用函数的部分继续执行。

可以使用break语句来中断函数的执行。

declare –f 可以显示定义的函数清单

declare –F 可以只显示定义的函数名

unset –f 可以从Shell内存中删除函数

export –f 将函数输出给Shell

另外,函数的定义可以放到 .bash_profile 文件中,也可以放到使用函数的脚本中,还可以直接放到命令行中,还可以使用内部的unset命令删除函数。一旦用户注销,Shell将不再保持这些函数。

2.shell中的数组

Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。

Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面其常用的方式进行总结.


 定义数组 a=(1 2 3 4 5); echo ${a[@]}

 echo ${#a[@]} 获取数组的元素个数 

 echo ${a[2]} 读取第三个元素,数组从0开始

 echo ${a[*]} 等同于 ${a[@]}  显示整个数组

 数组赋值

 a[1]=100; echo ${a[@]}

 a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素

 数组的删除

 uset a; unset a[1]

 数组分片

 a=(`seq 1 5`)

 echo ${a[@]:0:3} 从第一个元素开始,截取3个

 echo ${a[@]:1:4} 从第二个元素开始,截取4个

 echo ${a[@]:0-3:2} 从倒数第3个元素开始,截取2个

 数组替换

 echo ${a[@]/3/100}

 a=(${a[@]/3/100})

3.告警系统需求分析

 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
     思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
     主程序:作为整个脚本的入口,是整个系统的命脉。
     配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
     子程序:这个才是真正的监控脚本,用来监控各个指标。
     邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
     输出日志:整个监控系统要有日志输出。

程序架构:

4.高警系统主脚本:

 


 main.sh内容

#!/bin/bash

#Written by aming.

# 是否发送邮件的开关

export send=1

# 过滤ip地址

export addr=`/sbin/ifconfig |grep -A1 "ens36: "|awk '/inet/ {print $2}'`

dir=`pwd`

# 只需要最后一级目录名

last_dir=`echo $dir|awk -F'/' '{print $NF}'`

# 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到

if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then

    conf_file="../conf/mon.conf"

else

    echo "you shoud cd bin dir"

    exit

fi

exec 1>>../log/mon.log 2>>../log/err.log

echo "`date +"%F %T"` load average"

/bin/bash ../shares/load.sh

#先检查配置文件中是否需要监控502

if grep -q 'to_mon_502=1' $conf_file; then

    export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'`

    /bin/bash  ../shares/502.sh

fi
5.告警系统配置文件:


mon.conf内容

## to config the options if to monitor

## 定义mysql的服务器地址、端口以及user、password

to_mon_cdb=0   ##0 or 1, default 0,0 not monitor, 1 monitor

db_ip=192.168.139.131

db_port=3306

db_user=username

db_pass=passwd

## httpd   如果是1则监控,为0不监控

to_mon_httpd=1

## php 如果是1则监控,为0不监控

to_mon_php_socket=0

## http_code_502  需要定义访问日志的路径

to_mon_502=0

logfile=/data/log/xxx.xxx.com/access.log

## request_count   定义日志路径以及域名

to_mon_request_count=0

req_log=/data/log/www.discuz.net/access.log

domainname=www.discuz.net

直播课学习任务:

shell脚本需要大量的练习和思考总结的。

shell习题做一下 http://www.apelearn.com/study_v2/chapter15.html#shll

 


 

 

 
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值