自动化架构-shell自动化编程(五)
今日内容:
- Shell编程-数组
- Shell编程-Debug方法
- 再战三剑客
一、Shell编程-数组
1.1 数组的基本使用
1.1.1 创建数组
手动创建数组
1.1.2 输出所有元素和元素的个数
输出数组中的所有值
获取数组元素的个数
1.1.3 数组的循环
用法一:推荐
用法二:了解即可
1.2 数组赋值
数组赋值方式有三种:
- 批量赋值,array=(ip01 ip02 ip03)
- 逐个元素赋值:array[0]=ip01 array[1]=ip02..
- read命令赋值:read -p “输入数组内容:” -a array
方式一赋值的案例如下:
1.3 数组案例
试编写一个Shell程序,该程序能接收用户从,键盘输入的10个整数,然后求出其总和、平均值
1.3.1 实现:交互输入版
1.3.2 实现:文件读取版
测试
1.3.3 精简版
实现
测试
1.3.4 最精简版(用awk实现)
实现:
二、Shell编程-Debug全流程
调试方法
- 注释法:如程序出现问题,注释多余的函数,排除、缩小范围定位问题.
- 输出关键变量:多用echo输出变量内容,查看过程。
- 开启调试模式:
-X
大部分时候使用,显示详细的执行过程。
- 精确显示过程
三、再战三剑客
3.1 sed与变量
案例:sed命令中如何调用变量
3.2 awk案例
3.2.1 案例01-指哪打哪
案例:过滤出/etc/passwd的第2到9行的第1列和第3列
3.2.2 案例02-获取用户命令解释器
找到用户名等于root的行,并输出它的最后一列
3.2.3 案例03-获取网卡文件中IP地址
3.3 awk的判断与循环
3.3.1 awk判断
案例:如果系统根分区磁盘使用率大于6%,提示磁盘空间不足
实际上上面的命令存在问题,awk得到的结果是6%
,多了一个白分号
为什么后面比较大小没有报错呢?
因为:awk进行统计计算的时候,如果是数字+字符,变成字符串对比。左到右一个字符一个字符对比
解决方法01:避免这个情况,通过awk指定分隔符,只获取数字部分即可
解决方案02:通过让这个字符串进行运算(比如+0),运算后会被转换为数字
3.3.2 awk循环
案例:计算1-100的总和
也可以分开写
案例02:计算任意数字的总和
3.3.3 awk数组
awk数组专用于统计与分析。
awk数组与shell数组区别
- awk数组: 关联数组,下标啥都行,数字..字符串..
- shell数组:普通数组,下标只能是数字,当然shell中也有关联数组.。
使用
取值
awk专用于数组的循环
3.3.4 awk案例
案例1:批量赋值
案例2:去重统计次数
分析文件中每个域名出现的次数
统计重复次数
统计Nginx访问日志中IP地址的访问次数
案例3:统计access.log中每个ip地址的流量总数
实现