shell中的函数、shell中的数组、告警系统需求分析

7月16日任务

20.16/20.17 shell中的函数
20.18 shell中的数组
20.19 告警系统需求分析

 

20.16/20.17 shell中的函数

函数就是一个子shell就是一个代码段,当定义好一个函数后就可以去引用它。

格式:
function f_name() {     
                 command          
}  

函数必须要放在最前面

示例1:shell有$1 $2 $3 函数也是支持有$1 $2 $3

[root@jimmylinux-001 shell]# vi fun1.sh

#!/bin/bash
function inp(){
    echo "The frist par is $1"
    echo "The second par is $2"
    echo "The third par is $3"
    echo "The scritp name is $0"
    echo "The number of par is $#"
}

inp $1 $2 $3

脚本执行效果

[root@jimmylinux-001 shell]# sh fun1.sh
The frist par is 
The second par is 
The third par is 
The scritp name is fun1.sh
The number of par is 0

[root@jimmylinux-001 shell]# sh fun1.sh 3
The frist par is 3
The second par is 
The third par is 
The scritp name is fun1.sh
The number of par is 1
[root@jimmylinux-001 shell]# 

示例2:定义一个加法函数,shell中定义的函数必须要放在第二行。

[root@jimmylinux-001 shell]# vi fun2.sh

#!/bin/bash
sum() {
    s=$[$1+$2]
    echo $s
}

sum 1 10

脚本执行效果

[root@jimmylinux-001 shell]# sh fun2.sh
11

[root@jimmylinux-001 shell]# sh -x fun2.sh
+ sum 1 10
+ s=11
+ echo 11
11

示例3:显示IP地址信息 

[root@jimmylinux-001 shell]# vi fun3.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 $e`
echo "$e address is $myip"

 

20.18 shell中的数组

所谓数组就是一串数字或者一串字符串形成的变量,可以对这个变量进行操作,比如可以取数组的其中某一个值进行分片处理。

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

[root@jimmylinux-001 ~]# a=(1 2 3)

[root@jimmylinux-001 ~]# echo ${a[@]}
1 2 3

查看其中某一个元素的值,有一个特殊性,方括号里面的数字表示它的下标,例如第1个就是第2个位置,计算机里面数组是从0开始的。

[root@jimmylinux-001 ~]# echo ${a[1]}
2
[root@jimmylinux-001 ~]# echo ${a[2]}
3
[root@jimmylinux-001 ~]# echo ${a[0]}
1

获取数组的元素个数

[root@jimmylinux-001 ~]# echo ${#a[@]}  #号表示一个个数
3

数组赋值

[root@jimmylinux-001 ~]# a[3]=b
[root@jimmylinux-001 ~]# echo ${a[*]}
1 2 3 b
[root@jimmylinux-001 ~]# a[3]=bbb
[root@jimmylinux-001 ~]# echo ${a[*]}
1 2 3 bbb

如何删除元素和数组

[root@jimmylinux-001 ~]# unset a[3]  表示删除一个元素 
[root@jimmylinux-001 ~]# echo ${a[*]}
1 2 3
[root@jimmylinux-001 ~]# unset a  表示删除整个数组
[root@jimmylinux-001 ~]# echo ${a[*]}

[root@jimmylinux-001 ~]#

数组的分片

[root@jimmylinux-001 ~]# a=(`seq 1 10`)
[root@jimmylinux-001 ~]# echo ${a[*]}
1 2 3 4 5 6 7 8 9 10
[root@jimmylinux-001 ~]# echo ${a[@]:3:4}    从第3个元素开始,截取4个
4 5 6 7
[root@jimmylinux-001 ~]# echo ${a[@]:0-3:2}  从倒数第3个元素开始,截取2个
8 9

数组的替换,左边是要替换的值,右边是被替换的值。

[root@jimmylinux-001 ~]# echo ${a[@]/8/6}
1 2 3 4 5 6 7 6 9 10
[root@jimmylinux-001 ~]# a=(${a[@]/8/6})  也可以把a赋值,结果是一样的。
[root@jimmylinux-001 ~]# echo ${a[@]}
1 2 3 4 5 6 7 6 9 10

 

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

 

posted @ 2018-07-15 14:32  吉米乐享驿站  阅读(258)  评论(0编辑  收藏  举报