20.16/20.17 shell中的函数
•函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
格式:
function [函数的名字]() {
command
}
函数必须要放在最前面
定义函数的时候最好不要与shell的表达语句冲突
• 示例1
用来打印参数
#!/bin/bash
function input() {
echo $1 $2 $# $0
}
input 1 a b
函数,可以直接写在脚本内,相当于直接调用
內建变量
$1 第一个参数
$2 第二个参数
...
~
$# 参数名字
$0 总共有几个参数
• 示例2
用于定义加法的函数
在shell里面需要优先定义函数,如果想要调用函数的时候再去定义,就会出错
#!/bin/bash
sum() {
s=$[$1+$2] //定义变量s = $1+$2 /其中 $1为第一个参数,$2为第二个参数
echo $s
}
sum 1 2 //输出 第一个参数和第二个参数
• 示例3 显示IP,输入网卡的名字,然后显示网卡的IP
#!/bin/bash
ip() {
ifconfig |grep -A1 "$1 " |tail -1 |awk '{print $2}'|awk -F':' '{print $2}'
# ifconfig |grep -A1 "ens33:\ "|awk '/inet/ {print $2}' //查看网卡,过滤出ens33及下面的一行,匹配inet行并打印出第二段
}
read -p "Please input the eth name: " e
myip=`ip $e`
echo "$e address is $myip"
grep -A1 "ens33" 过滤显示出关键词及关键词下的一行
20.18 shell中的数组
定义数组 a=(1 2 3 4 5);
打印数组的值
echo ${a[@]}
echo ${a[*]} 等同于 ${a[@]} 显示整个数组 //理解为 打印 $a 里面的所有东西, @、*都表示所有内容
获取数组的元素个数
echo ${#a[@]}
echo ${a[2]} // 读取第三个元素,数组从0开始
[root@aminglinux-02 shell]# b=(1 2 3)
[root@aminglinux-02 shell]# echo ${b[0]}
1
[root@aminglinux-02 shell]# echo ${b[1]}
2
[root@aminglinux-02 shell]# echo ${b[2]}
3
[root@aminglinux-02 shell]# echo ${b[3]}
数组赋值(或者说元素值的更改替换)
a[1]=100;
echo ${a[@]}
a[5]=2;
echo ${a[@]} // 如果下标不存在则会自动添加一个元素
数组的删除
unset a //删除数组所有的元素
unset a[1] //删除数组中元素位1的元素
数组分片
这样可定义a 的数值
[root@aminglinux-02 shell]# a=(`seq 1 5`)
[root@aminglinux-02 shell]# echo ${a[*]}
1 2 3 4 5
从第一个元素开始,截取3个
[root@aminglinux-02 shell]# echo ${a[*]}
1 2 3 4 5
[root@aminglinux-02 shell]# echo ${a[@]:0:3}
1 2 3
从第二个元素开始,截取4个
[root@aminglinux-02 shell]# echo ${a[*]}
1 2 3 4 5
[root@aminglinux-02 shell]# echo ${a[@]:1:4}
2 3 4 5
从倒数第3个元素开始,截取2个
[root@aminglinux-02 shell]# echo ${a[*]}
1 2 3 4 5
[root@aminglinux-02 shell]# echo ${a[@]:0-3:2}
3 4
数组替换
替换第三个元素位的值为100
[root@aminglinux-02 shell]# echo ${a[*]}
1 2 3 4 5
[root@aminglinux-02 shell]# echo ${a[@]/3/100}
1 2 100 4 5
直接赋值替换
替换第四个元素位的值为200
[root@aminglinux-02 shell]# a=(${a[@]/4/200})
[root@aminglinux-02 shell]# echo ${a[@]}
1 2 100 200 5
20.19 告警系统需求分析
shell项目-告警系统
• 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
• 思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
• 主程序:作为整个脚本的入口,是整个系统的命脉。
• 配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
• 子程序:这个才是真正的监控脚本,用来监控各个指标。
• 邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
• 输出日志:整个监控系统要有日志输出。
•要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。
• 程序架构:
graph TD
SVN---|bin|main.sh
SVN((主目录mon))-->|conf|mon.conf
SVN-->|shares|load.sh\502.sh
SVN-->|mail|mail.py\mail.sh
SVN-->|log|mon.log\err.log
- bin下是主程序
- conf下是配置文件
- shares下是各个监控脚本
- mail下是邮件引擎
- log下是日志。