一、shell 中的函数
1、函数的概念:函数就是把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用小单元的名字即可。
2、格式:function f_name() {
command
}
函数必须放在最前面
3、案例
#!/bin/bash
function inp(){
echo $1 $2 $3 $0 $# #$1 ,$2,$3 分别代表 a b c,$0代表脚本自己,$#代表有几个参数
}
inp a b c
[root@localhost ~]# sh func.sh
a b c func.sh 3
这个脚本也可以写成这样
#!/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 is $0"
echo "the number of par is $#"
}
inp $1 $2 $3
[root@localhost ~]# sh func.sh 1 #只显示已输入的参数,没显示不输出。
the first par is 1
the second par is
the third par is
the scritp name is func.sh
the number of par is 1
4、案例2 调用sum函数计算1+10的和
#!/bin/bash
sum() {
s=$[$1+$2]
echo $s
}
sum 1 10
[root@localhost ~]# sh -x func1.sh
+ sum 1 10
+ s=11
+ echo 11
11
5、案例3 获取IP
#!/bin/bash
ip()
{
ifconfig |grep -A1 "$1: " |awk '/inet/ {print $2}' #获取网卡的IP
}
read -p "please input the eth name: " eth
ip $eth
[root@localhost ~]# sh -x func2.sh
+ read -p 'please input the eth name: ' eth
please input the eth name: ens33
+ ip ens33
+ ifconfig
+ grep -A1 'ens33: '
+ awk '/inet/ {print $2}'
192.168.134.130
[root@localhost ~]# sh -x func2.sh
+ read -p 'please input the eth name: ' eth
please input the eth name: ens37
+ ip ens37
+ ifconfig
+ grep -A1 'ens37: '
+ awk '/inet/ {print $2}'
192.168.150.131
二、shell中的数组
1、数组:一串字符或一组数字或数字与字符组成的集合
2、定义一个数组并显示
[root@localhost ~]# a=(1 2 3 4 a)
[root@localhost ~]# echo ${a[@]}
1 2 3 4 a
[root@localhost ~]# echo ${a[*]}
1 2 3 4 a
3、显示数组中的某一个数或字符,下标是从0开始的,0就是第一个数字
[root@localhost ~]# echo ${a[0]}
1
[root@localhost ~]# echo ${a[2]}
3
[root@localhost ~]# echo ${a[3]}
4
4、获取数组的个数
[root@localhost ~]# echo ${#a[*]}
5
5、数组赋值和替换
[root@localhost ~]# a[6]=h
[root@localhost ~]# echo ${a[*]}
1 2 3 4 a h
[root@localhost ~]# a[3]=k #注意这个地方下标是从0开始
[root@localhost ~]# echo ${a[*]}
1 2 3 k a h
6、数组元素的删除和数组的删除
[root@localhost ~]# unset a[2]
[root@localhost ~]# echo ${a[*]}
1 2 k a h
[root@localhost ~]# unset a
[root@localhost ~]# echo ${a[*]}
7、数组分片
[root@localhost ~]# echo ${a[*]} #定义数组a
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# echo ${a[@]:0:3} #从第一个元素开始,截取3个
1 2 3
[root@localhost ~]# echo ${a[@]:1:4} #从第二个元素开始,截取4个
2 3 4 5
[root@localhost ~]# echo ${a[@]:0-3:2} #从倒数第三个元素开始,截取2个
8 9
8、数组替换
[root@localhost ~]# a=(${a[@]/8/h})
[root@localhost ~]# echo ${a[*]}
1 2 3 4 5 6 7 h 9 10
[root@localhost ~]# echo ${a[@]/6/a}
1 2 3 4 5 a 7 h 9 10
三、告警需求分析
1、需求:使用shell定制各种个性化警告工具,需要统一化,规范化管理。
2、思路:指定一个脚本包,包含主程序,子程序,配置文件,邮件引擎,输出日志等。
3、主程序:作为整个脚本的入口,是整个系统的命脉。
4、配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关连的日志文件。
5、子程序:真正的监控脚本,用来监控各个指标
6、邮件引擎:由一个python程序实现,定义发邮件的服务器,发件人及发件密码
7、输出日志:整个监控系统要有日志输出
bin: 主程序
conf:配置文件
shares:监控脚本
mail:邮件引擎
log:日志