Shell学习(shell中的函数,数组,告警系统需求分析,告警系统主脚本)-2018.12.27
2019-01-18 12:54
836 查看
16.shell中的函数(上)
- 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接掉用这个小单元的名字即可。
-
[code]格式:function f_name() { command ...... }
函数必须要放在最前面
- 示例1
[code]#!/bin/bash function inp(){ echo $1 $2 $3 $0 $# } inp 1 a 2 [root@Chauncey ~]# #!/bin/bash function inp(){ echo "The first par is $1" echo "The second par is $2" echo "The third par is $3" echo "Then scritp name is $0" echo "Then number of par is $#" } inp b a 2 3 adf [root@Chauncey ~]# sh function.sh The first par is b The second par is a The third par is 2 Then scritp name is function.sh Then number of par is 5
示例2:
[code] [root@Chauncey ~]# sh -x function1.sh + sum 1 10 + s=11 + echo 11 11 [root@Chauncey ~]# [root@Chauncey ~]# cat function1.sh #!/bin/bash sum () { #要想吊用函数,要在函数吊用之前先定义函数 s=$[$1+$2] echo $s } sum 1 10
示例3:
[code][root@Chauncey ~]# cat function2.sh #!/bin/bash ip() { ifconfig|grep -A1 "$1" | tail -1 | awk '{print $2}' | awk -F ':''{print $2} ' } read -p "Please input the eth name:" e myip=`ip` echo "$e address is $myip" [root@Chauncey ~]# ifconfig| grep -A1 "eth0" eth0 Link encap:Ethernet HWaddr 00:16:3E:08:7F:9C inet addr:172.31.146.106 Bcast:172.31.159.255 Mask:255.255.240.0 [root@Chauncey ~]# ifconfig| grep -A1 "eth0"|tail -1 inet addr:172.31.146.106 Bcast:172.31.159.255 Mask:255.255.240.0 [root@Chauncey ~]# ifconfig| grep -A1 "eth0"|tail -1|awk '{print $2}' addr:172.31.146.106 [root@Chauncey ~]# ifconfig| grep -A1 "eth0"|tail -1|awk '{print $2}'|awk -F ':' '{print $2}' 172.31.146.106 [root@Chauncey ~]#
18.shell中的数组
定义数组: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]
[code][root@Chauncey ~]# a=(1 2 3 4 5) [root@Chauncey ~]# echo ${a[@]} 1 2 3 4 5 [root@Chauncey ~]# echo ${a[*]} 1 2 3 4 5 [root@Chauncey ~]# echo ${a[1]} #显示数组中的某一个元素 2 [root@Chauncey ~]# echo ${#a[@]} 5 [root@Chauncey ~]# a[5]=b #对数组中的某一元素进行赋值 [root@Chauncey ~]# echo ${a[*]} 1 2 3 4 5 b [root@Chauncey ~]# a[5]=aaaa #元素的值可以被覆盖,更改 [root@Chauncey ~]# echo ${a[*]} 1 2 3 4 5 aaaa [root@Chauncey ~]# [root@Chauncey ~]# unset a[5] #删除数组中的某一个元素 [root@Chauncey ~]# echo ${a[*]} 1 2 3 4 5 [root@Chauncey ~]# unset a #删除一个数组 [root@Chauncey ~]# echo ${a[*]} [root@Chauncey ~]#
数组分片
- a=(`seq 1 5`)
- echo ${a[@]:0:3}从第一个元素开始,截取3个
- echo ${a[@]:1:4}从第二个元素开始,截取四个
- echo ${a[@]:0-3:2}从倒数第3个元素开始,截取2个
数组替换
- echo ${a[@]/3/100}
- a=(${a[@]/3/100})
[code][root@Chauncey ~]# b=(`seq 1 10`) [root@Chauncey ~]# echo ${b[*]} 1 2 3 4 5 6 7 8 9 10 [root@Chauncey ~]# echo ${b[@]:3:4} #从第3位开始,截取4个 4 5 6 7 [root@Chauncey ~]# echo ${b[@]:0-3:2} #从倒数第3位开始,截取2个 8 9 [root@Chauncey ~]# echo ${b[@]/8/eight} #将b数组中的值,8替换位eight 1 2 3 4 5 6 7 eight 9 10 [root@Chauncey ~]# b=(${b[@]/9/nine}) #第二种替换方式 [root@Chauncey ~]# echo ${b[*]} 1 2 3 4 5 6 7 8 nine 10 [root@Chauncey ~]#
19.告警系统需求分析
- 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
- 思路:指定一个脚本包,包含主程序,子程序,配置文件,邮件引擎,输出日志等。
- 主程序:作为整个脚本的入口,是整个系统的命脉。
- 配置文件:是一个控制中心,用它来开关各个子程序,指定哥哥相关联的日志文件。
- 子程序:这个才是真正的监控脚本,用来监控各个指标。
- 邮件引擎:是由一个python程序来实现,他可以定义发邮件的服务器、发邮件人以及发件人密码。
- 输出日志:整个监控系统有日志输出。
- 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。
- 程序架构:
主目录 mon
bin(该目录下是主程序) conf(该目录下是配置文件) shares(该目录下是各个监控脚本) mail(该目录下是邮件迎请) log(该目录下是日志) main.sh mon.conf load.sh 502.sh mail.py mail.sh mon.long err.long
[code]#!/bin/bash #Written by aming. # 是否发送邮件的开关 export send=1 #export宣告send变量,会宣告到左右的子脚本中。只要send=1所有的设备都可以发送邮件,维护状态下要把告警关闭,相当于总开关 # 过滤ip地址 export addr=`/sbin/ifconfig |grep -A1 "eth0 "|awk '{print $2}'|awk -F ':' '{print $2}'` #告诉我们发送信息的是哪一台主机,因而需要上报自己的IP,根据自己机器的端口进行修改 dir=`pwd` #找一下当前主脚本的目录,目录不是固定死的,有可能再其目录 # 只需要最后一级目录名 last_dir=`echo $dir|awk -F'/' '{print $NF}'` #仅需要最后的一个层路径 # 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到 if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then conf_file="../conf/mon.conf" #之所以使用../是因为当前在bin下,conf是在../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 #502是zibbx常见的状态码 if grep -q 'to_mon_502=1' $conf_file; then #查看是否需要监控502 export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'` /bin/bash ../shares/502.sh fi
22.告警系统监控项目
相关文章推荐
- linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析
- shell中的函数、数组及告警系统需求分析
- 20.16/20.17 shell中的函数 20.18 shell中的数组20.19 告警系统需求分析
- shell中的函数,shell中的数组,告警系统需求分析
- shell中的函数、shell中的数组、告警系统需求分析
- shell中的函数,shell中的数组,告警系统需求分析,
- 20.16 20.17shell中的函数(上下);20.18 shell中的数组;20.19 告警系统需求分析
- shell中的函数、shell的数组、告警系统需求分析
- 【shell编程】shell中的函数、shell中的数组和告警系统需求分析
- 十六周四次课 2018.02.08 shell中的函数、shell中的数组、告警系统需求分析
- shell中的函数 shell中的数组 告警系统需求分析
- Shell告警系统(需求分析,告警系统主脚本,告警系统配置文件,告警系统监控项目)
- shell中的函数(function)、数组、告警系统分析
- shell中的函数、数组、告警系统分析
- 20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求
- 【Linux 系统编程】shell 脚本基础学习之函数(五)
- shell脚本学习总结10--系统函数调用
- 告警系统需求分析 告警系统主脚本 告警系统配置文件 告警系统监控项目
- shell学习之系统文件备份之脚本分析
- @shell脚本中数组array常用技巧学习实践@