一、shell中的函数
函数是一个子shell是一个代码段
函数就是把一段代码整理到了一个小单元中,并给这个小单元起了一个名字
例子
#!/bin/bash function inp() { echo "The first par is $1" echo "The second par is $2" echo "The third par is $3" echo "The scritp name $0" echo "The number of par is $#" } inp b a 2 3 adf
$0是shell文件的名称
$#是参数的个数
如果不加function就要加上()
二、shell中的数组
定义数组a=(1 2 3 4 5);echo ${a[@]}
echo ${#a[@]}获取组的元素个数
echo ${#a[2]}获取数组a的第二个数(从零开始计数)
echo ${a[*]}等同于${a[@]}显示整个数组
数组赋值
a[1]=100;echo ${a[@]}
a[5]=2;echo ${a[@]} 如果下标不存在会自动添加一个元素
数组的删除
uset a;unset a[1]
${a[@]:3:4}从数组a第三个开始截取4个元素
${a[@]:0-3:2}从数组a倒数第三个开始截取两个元素
数组的替换
${a[@]/8/6}把数组的8替换成6
三、告警系统
需求:是用shell定制各种个性化告警工具,但需要统一化管理、规范化管理
思路:指定一个叫本报,包含主程序、子程序、配置文件、邮件引擎、输出日志等
主程序:作为脚本的入口,是整个系统的命脉
配置文件:是一个控制中心,用他来开关各个子程序,指定哥哥相关联的日志文件
子程序:这个才是真正的监控脚本,用来监控各个指标
邮件引擎:是一个由python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
输出日志:整个监控系统要有日志输出
约定:所有的脚本都放到/usr/local/sbin目录下
1.主架构
2.主程序
#!/bin/bash
#作者:朱瞿炎
#时间:2019年8月21日
#是否发送邮件
export send=1
#过滤IP地址
export addr=`/sbin/ifconfig | grep -A1 'eth0' |grep addr: |awk '{print $2}'|awk -F: '{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/man.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 '=''{sprint $2}' |sed 's/ //g'`
/bin/bash ../shares/502.sh
fi