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

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

  1. bin下是主程序
  2. conf下是配置文件
  3. shares下是各个监控脚本
  4. mail下是邮件引擎
  5. log下是日志。

转载于:https://my.oschina.net/nova12315/blog/1785999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值