2018.4.20 17周3次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.4.20 17周3次课相关的知识,希望对你有一定的参考价值。

十七周三次课(4月20日)

20.16/20.17 shell中的函数

20.18 shell中的数组

20.19 告警系统需求分析

20.16/20.17 shell中的函数

函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。

格式: function f_name() {

                      command

             }

函数必须要放在最前面

示例1 :参数在函数里面

vim fun1.sh

#!/bin/bash

input() {

    echo "The first par is $1"

    echo "The second par is $2"

    echo "The third par is $3"

echo "The script name is $0"

# $0是shell的名字

echo "The number of par is $#"

# $#是函数的参数个数

}

input b a 2 3 adf

[[email protected] ~/shell]# sh fun1.sh

The first par is b

The second par is a

The third par is 2

The script name is fun1.sh

The number of par is 5

示例2 :参数在函数外面

vim fun2.sh

#!/bin/bash

input() {

    echo "The first par is $1"

    echo "The second par is $2"

    echo "The third par is $3"

echo "The script name is $0"

echo "The number of par is $#"

}

input $1 $2 $3

# $1,$2,$3表示在执行脚本时,脚本名后面跟的参数,如果不写就为空

[[email protected] ~/shell]# sh fun2.sh 1

The first par is 1

The second par is

The third par is

The script name is fun2.sh

The number of par is 1

示例3

vim fun3.sh

#!/bin/bash

sum() {

    s=$[$1+$2]

    echo $s

}

sum 1 10

[[email protected] ~/shell]# sh fun3.sh

11

[[email protected] ~/shell]# sh -x fun3.sh

+ sum 1 10

+ s=11

+ echo 11

11

示例4:

vi fun4.sh

#!/bin/bash

ip() {

    ifconfig |grep -A1 "$1" |tail -1 |awk '{print $2}'

}

read -p "Please input the eth name: " eth

myip=`ip $eth`

echo "$eth address is $myip"

[[email protected] ~/shell]# sh -x fun4.sh

+ read -p 'Please input the eth name: ' eth

Please input the eth name: ens33

++ ip ens33

++ ifconfig

++ awk '{print $2}'

++ grep -A1 ens33

++ tail -1

+ myip=192.168.37.101

+ echo 'ens33 address is 192.168.37.101'

ens33 address is 192.168.37.101

20.18 shell中的数组

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

echo ${a[*]} 等同于 ${a[@]}  显示整个数组

[[email protected] ~/shell]# a=(1 2 3 4 5)

[[email protected] ~/shell]# echo ${a[@]}

1 2 3 4 5

[[email protected] ~/shell]# echo ${a[*]}

1 2 3 4 5

echo ${#a[@]} 获取数组的元素个数

[[email protected] ~/shell]# echo ${#a[*]}

5

echo ${a[2]} 读取第三个元素,数组从0开始

[[email protected] ~/shell]# echo ${a[2]}

3

 

数组赋值

a[1]=100; echo ${a[@]}

[[email protected] ~/shell]# a[1]=100; echo ${a[@]}

1 100 3 4 5

a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素

[[email protected] ~/shell]# a[5]=2; echo ${a[@]}

1 100 3 4 5 2

数组的删除

unset a; unset a[1]

[[email protected] ~/shell]# unset a[1]

[[email protected] ~/shell]# echo ${a[*]}

1 3 4 5 2

[[email protected] ~/shell]# unset a;echo ${a[*]}

 

[[email protected] ~/shell]#

数组分片

a=(`seq 1 5`)

[[email protected] ~/shell]# a=(`seq 1 5`)

[[email protected] ~/shell]# echo ${a[*]}

1 2 3 4 5

echo ${a[@]:0:3} 从第一个元素开始,截取3个

[[email protected] ~/shell]# echo ${a[*]:0:3}

1 2 3

echo ${a[@]:1:4} 从第二个元素开始,截取4个

[[email protected] ~/shell]# echo ${a[*]:1:4}

2 3 4 5

echo ${a[@]:0-3:2} 从倒数第3个元素开始,截取2个

[[email protected] ~/shell]# echo ${a[@]:0-3:2}

3 4

数组替换

echo ${a[@]/3/10}

[[email protected] ~/shell]# echo ${a[*]/5/10}

1 2 3 4 10

a=(${a[@]/4/10})

[[email protected] ~/shell]# a=(${a[*]/4/10})

[[email protected] ~/shell]# echo ${a[*]}

1 2 3 10 5

20.19 告警系统需求分析

需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。

思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。

主程序:作为整个脚本的入口,是整个系统的命脉。

配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。

子程序:这个才是真正的监控脚本,用来监控各个指标。

邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码

输出日志:整个监控系统要有日志输出。

程序架构:   

                                                (主目录 mon)
                 ____________________|_______________________________
                |                   |                      |                                |                                  |
               bin              conf            shares                          mail                             log
                |                   |                      |                                |                                  |
           [main.sh] [ mon.conf] [load.sh 502.sh]  [mail.py mail.sh] [  mon.log  err.log ]

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

 


以上是关于2018.4.20 17周3次课的主要内容,如果未能解决你的问题,请参考以下文章

2018-4-20 17周3次课 shell函数数组告警需求分析

2018.1.17 6周3次课

2018-1-17 6周3次课 awk

2018-1-17 6周3次课

2018.4.2 15周1次课

2018.3.16 12周5次课