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

20.16/20.17 shell中的函数


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

格式: function f_name() {

command

}

函数必须要放在最前面

·示例1

#!/bin/bash
input() {                        ##定义f_name最好不要和shell里面的关键词冲突
    echo $1 $2 $# $0
}
input 1 a b


$1 $2 第一个,第二个参数

$# 脚本名称

$0 参数数量


[[email protected] shell]# sh -x fun1.sh
+ input 1 a b
+ echo 1 a 3 fun1.sh
1 a 3 fun1.sh

也可以把参数写在脚本外

[

[email protected] shell]# sh -x fun1.sh 1 a d                ##参数写在脚本外,名称后面,也行
+ input 1 a d
+ echo 1 a 3 fun1.sh
1 a 3 fun1.sh

示例2

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

[[email protected] shell]# sh -x fun2.sh
+ sum 1 2
+ s=3
+ echo 3
3

可以像例1一样,外部调用参数

[[email protected] shell]# sh -x fun2.sh 3 4
+ sum 3 4
+ s=7
+ echo 7
7
[[email protected] shell]# sh -x fun2.sh 3421 4352
+ sum 3421 4352
+ s=7773
+ echo 7773
7773

想要调用哪个函数,就在调用语句之前定义这个函数

示例3

#!/bin/bash
ip() {
    ifconfig |grep -A1 "$1" |tail -1 |awk '{print $2}'|awk -F':' '{print $2}'
}
read -p "Please input the eth name: " e
myip=`ip $e`
echo "$e address is $myip"

下面这样写也可以得出ip:

ifconfig | grep -A1 "$1: " | awk '/inet/ {print $2}'

·课后作业:

输入网卡名,判断是不是空,是不是系统中的网卡

思路:首先解决输入为空的问题,如果输入内容为空,就提示要输入内容并重新循环,

其次要是系统中存在的网卡,而网卡配置文件在/etc/sysconfig/network-scripts/下,并且都以ifcfg-为开头,那么久可以以此判断输入的网卡名为名称的"ifcfg-网卡名”文件是否存在,如果存在则允许下步操作,否则重新循环







20.18 shell中的数组


·定义数组 a=(1 2 3 4 5); echo ${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]# a=(1 2 3 4 5)
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5
[[email protected] shell]# echo ${#a[*]}
5

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

[[email protected] shell]# echo ${a[0]}
1
[[email protected] shell]# echo ${a[1]}
2
[[email protected] shell]# echo ${a[2]}
3

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

[[email protected] shell]# echo ${a[@]}
1 2 3 4 5
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5

·数组赋值

·添加元素

·a[5]=100; echo ${a[@]}

[[email protected] shell]# a[5]=100
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 100
[[email protected] shell]# a[5]=aaa
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 aaa

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

[[email protected] shell]# a[6]=bbb
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 aaa bbb

·数组的删除

·unset a; unset a[1]

[[email protected] shell]# unset a[5]            ##删除第6个值
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 bbb
[[email protected] shell]# unset a[5]            ##再次删第6个元素,没有变化,因此下标不会变化
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 bbb
[[email protected] shell]# unset a[6]            ##下标没变,还是删除的第7个元素
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5
[[email protected] shell]# unset a                ##清空数组
[[email protected] shell]# echo ${a[*]}

·数组分片

a=(`seq 1 10`)

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

[[email protected] shell]# a=(`seq 1 10`)
[[email protected] shell]# echo ${a[*]}
1 2 3 4 5 6 7 8 9 10
[[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}
8 9

·数组替换

echo ${a[@]/3/100} 替换的是值

a=(${a[@]/3/100})

[[email protected] shell]# echo ${a[*]/3/100}
1 2 100 4 5 6 7 8 9 10
[[email protected] shell]# a=(${a[*]/3/100})
[[email protected] shell]# echo ${a[*]}
1 2 100 4 5 6 7 8 9 10






20.19 告警系统需求分析


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

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

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

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

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

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

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

要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。

程序架构:

bin下是主程序

conf下是配置文件

shares下是各个监控脚本

mail下是邮件引擎

log下是日志

原文地址:http://blog.51cto.com/11530642/2106185

时间: 2024-10-03 04:38:37

2018-4-20 17周3次课 shell函数、数组、告警需求分析的相关文章

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro

2018.4.18 17周1次课

十七周一次课(4月18日) 20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断 20.5 shell脚本中的逻辑判断 格式1不带else:if 条件 ; then 语句; fi 编辑if1.sh文件:vi if1.sh #!/bin/bash/ a=5 if [ $a -gt 3 ] then echo ok fi 格式2带有else:if 条件; then 语句; else 语句; fi #!/bin/bash/ a=1

2018.4.19 17周2次课

十七周二次课(4月19日) 20.10 for循环 20.11/20.12 while循环 20.13 break跳出循环 20.14 continue结束本次循环 20.15 exit退出整个脚本 20.10 for循环 for循环结构是在日常运维工作中使用最频繁的循环结构. 语法:for 变量名 in 条件; do -; done 数字循环:vi for1.sh #!/bin/bash sum=0 for i in `seq 1 3` #循环的条件还可以引用系统命令的执行结果(如seq 1

2018-4-18 17周1次课 shell逻辑判断、文件目录属性判断、if、case

20.5 shell脚本中的逻辑判断 ·格式1:if 条件; then 语句; fi 例:a=5 if [ $a -gt 3 ]; then echo ok; fi [[email protected] shell]# sh if1.sh ok ·格式2:if 条件; then 语句; else 语句; fi 例:a=5 if [ $a -gt 3 ]; then echo ok; else echo nook; fi [[email protected] shell]# sh if1.sh o

2018-4-22 17周4次课 shell告警系统脚本配置

20.20 告警系统主脚本 把shell脚本放在 /usr/local/sbin 目录下,方便查找 [[email protected] ~]# cd /usr/local/sbin/ [[email protected] sbin]# mkdir mon/ [[email protected] sbin]# cd mon/ [[email protected] mon]# mkdir bin conf shares mail log [[email protected] mon]# ls bi

2017.12.20 2周3次课

2017.12.20 二周第三次课 2.14 文件和目录权限chmod 命令chmod( change mode的简写 )用于改变用户对文件/目录的读写执行权限 其格式为:chmod [-R] xyz文件名(这里的xyz表示数字).其中,·-R选项的作用等同于chown命令的一R选项,也表示级联更改. 属性的含义: [r]:读 : [w]:写: [x]:执行: [-]:不可以: 值得注意的是,在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644. 为了方便更改文件的权限,

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors

2018.1.16 6周2次课

六周第二次课(1月16日) 9.4/9.5 sed 9.4/9.5 sed 其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换.以前用vim操作文档的时候,可以查找也可以替换, 但只限于在文本内部操作,而不能输出到屏幕上.sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. sed  '/x/'p filename:匹配x字符 sed  -n  '/x/'p  filenam