shell训练营 Day9

1.shell中的函数
函数的定义:
function_name ()
{
statement1
statement2
....
statementn
}

函数的调用:
function_name parm1 parm2

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

函数参数:
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数:
参数处理 说明
$# 传递到脚本的参数个数
$ 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$
相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

2.shell中的数组
数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开。
例:
abc_number=(1 2 3 4 5);
字符串类型数组:同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。
abc_string=("abc" "edf" "sss"); 或者 abc_string=('abc' 'edf' 'sss');
数组的操作:
  我们使用数值类型数组abc_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。
我们在shell里面想获取某个变量的值,使用$符开头,如:$a或者${a}即可。
获取数组长度:
abc_length=${#abc_number[]}或${#abc_number[@]}均可,即形式:${#数组名[@/]} 可得到数组的长度。
读取某个下标的值
arr_index2=${abc_number[2]},即形式:${数组名[下标]}
对某个下标赋值,如果该下标元素已经存在,会修改该下标的值为新的指定值。

    例如:abc_number[2]=100,数组被修改为(1 2 100 4 5)

  如果指定的下标已经超过当前数组的大小,如abc_number的大小为5,指定下标为10或者11或者大于5的任意值,赋的值被追加到数组的尾部。

    例如:abc_number[13]=13,数组被修改为(1 2 100 4 5 13)

  删除操作

    清除某个元素:unset arr_number[1],这里清除下标为1的数组;

    清空整个数组:unset arr_number;

  分片访问

    分片访问形式为:${数组名[@或*]:开始下标:结束下标},注意,不包括结束下标元素的值。

    例如:${arr_number[@]:1:4},这里分片访问从下标为1开始,元素个数为4。

  模式替换

    形式为:${数组名[@或*]/模式/新值}

    例如:${abc_number[@]/2/98}

  数组的遍历

    数组遍历使用for语句:

    for v in ${abc_number[@]}; do

      echo $v;

    done

3.shell监控告警项目:
需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
主程序:作为整个脚本的入口,是整个系统的命脉。
配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
子程序:这个才是真正的监控脚本,用来监控各个指标。
邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
输出日志:整个监控系统要有日志输出。

要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,
不同的地方在于根据不同的角色,定制不同的配置文件。
bin下是主程序
conf下是配置文件
shares下是各个监控脚本
mail下是邮件引擎
log下是日志。

猜你喜欢

转载自blog.51cto.com/12898947/2335850