【2018.07.16学习笔记】【linux高级知识 20.16-20.19】

20.16/20.17 shell中的函数

函数就是把一段代码整理到一个小单元中,起一个函数名字表明这一段代码。python

当引用到这段代码,直接调用函数名便可。shell

格式: function 函数名() { //function能够省略不写 。函数必须放在最前面,在调用函数的前面 语句代码 }数组

示例:fun1.shbash

#!/bin/bash
input() {
   
     echo $1 $2 $0 $#  // 函数体内的$1等:表明的是函数的参数
}
input 1 a b   //调用函数,并附上3个参数

##运行结果
1 a input 3    //$一、$2是函数的第一第二个参数,$0是函数名,$#是函数参数个数

示例:服务器

#!/bin/bash
input() {
   
     echo $1 $2 $0 $#  // 函数体内的$1等:表明的是函数的参数
}
input $1 $2 $3   //不在函数体内的$1等,表明是脚本本身的参数。执行脚本时对脚本要赋值参数:fun1.sh 15 a b

##执行 fun1.sh 15 a b,执行结果是
15 a input 3    //

示例:架构

#!/bin/bash
sum(){

   s=$[$1+$2]
   echo $s
}
sum 1 2

##运行结果
3

示例:框架

#!/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 $e'      //显示网卡ip
echo "$e address is $myip"

20.18 shell中的数组

一串数字或一串字符串的形式,造成一个变量函数

定义数组:工具

a=(1 2 3 4 5 6)
echo ${a[@]} //@、*均可以打印数组全部元素

取数组的元素:日志

echo ${a[2]}  //数组第三个元素,从0算起:a[0] a[1] a[2]
echo ${#a[@]}  //数组的元素个数

数组元素赋值、覆盖

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

a[5]=2
echo ${a[@]} //若是下标不存在,则自动添加一个元素

删除数组:

unset a
unset a[1]

数组分片:截取某几个元素

a=('seq 1 10')
echo ${a[@]:0:3}  //从第1个元素开始,取3个元素
echo ${a[@]:1:4}  //从第2个元素开始,取4个元素
echo ${a[@]:0-3:2}  //从倒数第3个元素开始,取2个元素

数组替换

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

20.19 告警系统需求分析

做为一个shell项目,告警系统是zabbix外的一个定制化需求

需求:使用shell定制各类个性化的告警工具,须要统一化管理、规范化

思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、日志系统等

主程序:整个脚本的入口,整个系统的命脉
配置文件:控制中心,来开关各个子程序,指定各个相关联的日志文件
子程序:才是真正的监控脚本,监控各项指标
邮件引擎:由python程序实现,定义发邮件的服务器,发件人,密码等。
日志文件:整个监控系统要有日志输出到日志文件里

要求:被监控的机器角色多种多样,全部机器上部署同样的监控系统,无论什么机器整个监控程序的框架是一致的,不一样角色定制不一样的配置文件

程序架构:

主目录mon:包含子目录bin、conf、shares、mail、log
子目录bin:主程序脚本 main.sh
子目录conf:配置文件 mon.conf
子目录shares:监控子脚本 load.sh 502.sh
子目录mail:邮件引擎文件 mail.py mail.sh
子目录log:日志文件 mon.log err.log
相关文章
相关标签/搜索