函数就是把一段代码整理到一个小单元中,起一个函数名字表明这一段代码。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"
一串数字或一串字符串的形式,造成一个变量函数
定义数组:工具
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})
做为一个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