案例一:输入网卡的名字,来输出网卡的IP
1.问题:
1.)参数后判断要加“”
2.)名字为空时显示ip
2.分析:
- ) 把本机的所有网卡名列出来,来引导用户输入。
- ) 使用命令列出所有网卡信:ifconfig
- ) 设计一个函数,把网卡名作为参数,函数返回网卡的IP
- ) 在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)
5.实现解析:
- ) egrep awk,反复运行和推敲命令,来分析执行结果
- ) 死循环。当输入错误或者为空,继续输入–>输入正确。
- ) while循环continue、break(逻辑性) 逻辑判断参数
- ) checkip函数调用
6.结果验证
案例二:自动对磁盘分区、格式化、挂载
1.问题:
5.实现解析:
- 查看磁盘情况
- 新建分区
- 创建文件系统磁盘
- 挂载磁盘
6.结果验证
案例三:检查特定软件包是否安装
1.问题:
5.实现解析:
- 判断参数个数是否为零
- $@提取所有位置的变量的值
- 判断是否安装,返回特定的输出结果
6.结果验证
案例四:提示用户输入年份后判断该年是否为闰年
1.问题:
5.实现解析:
- 用户输入为空白时,提示没有输入年份
- 用户输入为字母时,提示输入不是数字
- 用户输入是数字时,与四进行计算
6.结果验证
案例五:下载文件到指定目录
1.问题:
- 第一个参数为可下载文件,第二个参数为目录
- 目录不存在,则提示用户是否创建,创建就继续,不创建返回一个51的错误值
- 目录存在,下载文件,测试成功与否,成功返回0,失败返回52
2.分析:
1) 操作不当(没有输入下载文件或路径),提示操作错误
2) 若有目录提示操作失败,已有目录
3) 提示用户输入相应选项,输入错误或不输都退出运行,操作失败
3.流程图:
5.实现解析:
1) 用户操作不当,打印“操作失败”,并退出
2) 没有目录时,提示创建目录,有目录时,打印“操作失败,已有该目录”,并退出
3) 选择创建,则进行安装。不选择创建,退出本次操作,返回51
4) 下载成功后,返回0;下载失败,返回52
6.结果验证
案例六:ping通节点并显示节点名称
1.问题:
- 使用ssh协议、expect工具远程连接节点
- Ping通节点,ping通显示节点名称与ip
2.分析:
1) 使用expect工具进行远程连接
2) 规定一段ip,进行ping,ping通显示节点名称及IP(顺序不可变),ping不通,报错并只显示ip
3.流程图:
5.实验解析
1) expec工具中规定输入的yes与password
2) 选一段IP进行循环,依次进行ping
3) ping完所有IP后显示结果
6.结果验证
案例七:统计linux进程相关数量信息
1.问题:
1) 查看linux进程
2) 将正在运行、待机、停止等进程数总和列出
2.分析:
1) 将进程ID进行循环,依次查看进程状态
2) 进程状态进行叠加,显示进程总数
3.流程图:
5.实现解析:
1) 使用for循环进程一次操作
2) 使用case进行进程状态判断
3) 打印出进程状态数对应总和
6.结果验证
案例八:打印符合要求数字
5.实现解析:
1) 判断是否输入为数字,是就继续,不是打印提示并结束
2) 打印出第一轮数字,并询问是否继续
3) 判断两轮数字大小,大于继续,小于或等于打印提示并结束
4) 打印第一轮数字到第二轮数字中间的数
6.结果验证
案例九:监控远程的一台机器的存活状态,发现宕机发一封邮件给自己
1.问题:
1) ping远程机器
2) 发送邮件给自己用户
2.分析:
1) 先进行ping通
2) 满足条件后分别返回不同操作结果
3.流程图:
5.实现解析:
1) 先进行ping通主机操作
2) 判断上述条件是否满足
3) 满足返回节点开启
4) 不满足给自己发送邮件告知节点关闭
6.结果验证
案例十:打印文件1-5行不包含字母的行,同时删除6-10行的字母
1.问题:
1) sed、grep循环使用
2) for循环与if判断
2.分析:
1) 使用循环打印
2) if判断,进行挑选
3) 打印符合条件的行数
3.流程图:
5.实现解析:
1) 第一次使用for循环确定1-5行
2) if判断进行筛选
3) 第二次使用for循环确定6-10行
4) 直接确定打印条件
5) 第三次使用for循环确定其他行列
6) 打印出所有文本
6.结果验证
案例十一:批量修改文件名
- 问题:
1) 批量修改.txt为.txt.bak
2) 把所有.bak文件打包压缩为123.tar.gz
3) 批量还原文件的名字,即把增加的.bak在删除
2.分析:
1) 将所有的文件名先写到临时文件中
2) 对临时文件进行改名操作
3.流程图:
5.实现解析:
1) 进入目标目录
2) 找到所有文件,将所有文件名写到临时文件
3) 针对临时文件进行改名操作
4) 压缩所有目标文件名的文件
5) 同样操作针对于改名后的文件在进行改名,改为原来的文件名
6.结果验证
案例十二: 统计日志当中IP访问量
问题
1) IP访问日志中IP过多,查找每个IP访问次数
分析
1) 找出IP行列,进行整合、添加
流程图
实现
实现分析
1) 设置日志文件
2) 查找IP行列
3) 将IP数量进行总和
结果验证
案例十三: 判断本机80端口是否开启
问题
1) 查看本机80端口是否开启
2) 开启,什么也不做,如果未开启重启服务,并发送邮件
分析
1) 查看80端口的状态
2) 如果正常,正常退出
3) 状态关闭,重启服务,发送邮件
4) 设置每分钟自动运行
流程图
实现分析
1) 先查看80端口的服务状态
2) 条件满足,进行判断
3) 正常则退出脚本,不正常重启服务并发送邮件给自己
结果验证
案例十四: 统计linux系统所有进程占用内存大小的和
问题
1) 系统内存突然变小
2) 查看系统进程占用内存大小
分析
1) 确定进程
2) 计算进程占用内存和
流程图
实现分析
1) 设置和的值
2) 确定进程
3) 计算和
结果验证
案例十五: 问候程序
问题
1) 让用户知晓现在时间段
分析
1) 确定时间
2) 时间进行判断从而确定时间段
流程图
实现分析
1) 确定时间值
2) 与每个时间段进行比较
3) 判断出结果
结果验证
案例十六: 访问地址
问题
1) 访问的网址是否正常
分析
1) 网址正常,HTTP代码为200
2) 返回结果需要为200,极为正常
流程图
实现分析
1) 设置参数(即为网址)
2) 提取访问网址状态码
3) 进行判断
结果验证
案例十七: 统计ip
问题
1) 共享文件时查看哪些ip相通
分析
1) 所有ip地址都需要ping
2) 将ping通显示
流程图
实现分析
1) 设置局部变量,进行循环ping操作
2) 判断是否可以ping通
3) 可以,打印可以Ping通ip。不可以,什么也不操作
结果验证
案例十七: 简化菜单功能
问题
1) 提供用户选择,从而进行操作
分析
1) 提示可输入的选择
2) 提示输入
3) 进行输入参数判断
流程图
实现分析
1) 显示菜单
2) 输入选项
3) 进行选项判断
4) 执行操作
结果验证
案例十八: 清空文件内容
问题
1) 将目录/data/log/下的文件全部清空
2) 只能清空文件内容而不能删除文件。
3) 其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里。
4) 需要考虑/data/log/目录下的二级、三级、… 等子目录里面的文件。
分析
1) 先确定时间与按日期和时间为名字的文件
2) 判断时间
3) 清空值或者是将文件内容存进Log文件
流程图
实现分析
1) 确定时间参数,用来进行判断
2) 满足条件,将目录下文件内容都清空
3) 不满足条件,将目录下文件大小给记录在一个日期和时间命名的文件中
结果验证
案例十九: 显示目录内容
问题
1) 想查看多个目录下的子目录
分析
1) 确定参数个数
2) 进行针对于参数的操作
流程图
实现分析
1) 判断参数个数
2) 进行对应操作
3) 执行结果
结果验证
案例二十: 给用户添加随机密码
问题
批量创建用户,密码设置较多,设置随机密码并记录
分析
1) 设定范围,批量创建用户
2) 给每个用户创建随机密码,并记录
流程图
(脚本思路清晰且易)
实现
实现分析
1) 创建一个以日期为名字的日志文件
2) 批量创建用户,并设置随机密码
3) 将用户与密码对应记录在日志文件中
结果验证
案例二十一: 备份数据库
问题
需要备份数据库中资料,远程发送给目标方
分析
1) 先备份数据库
2) 远程发送
3) 确定删除时间
流程图
实现分析
1) 确定时间,以时间为后缀,备份数据库
2) 远程发送给目的方
3) 找到超过时间的文件,并删除
结果验证
案例二十二: 确定输入ip是否正确
问题
1) 不确定对方给与的ip地址是否正确
2) 循环输入,直到正确
分析
1) 对ip每段进行判断
2) 每段范围确定
流程图
实现分析
1) 设置函数,确定ip格式,判断输入ip是否正确
2) 提示输入,调用函数
3) 显示输出结果
结果验证
案例二十三: 实现加减乘除的功能
问题
参数一个个进行运算很慢
分析
1) 判断参数类型
2) 进行运算
流程图
实现分析
1) 输入参数
2) 判断参数类型
3) 进行运算
4) 减法和除法需要先进行比较
5) 使用了bc运算
结果验证
案例二十四: 循环输出数值
问题
实现分析
1) 设置死循环
2) 循环输入数值
3) 判断是否为end
4) 是,结束;不是,继续循环
结果验证
案例二十五: 监控cpu、内存和硬盘利用率
问题
获取目前占用资源
分析
利用vmstat命令
显示目前时间
流程图
实现分析
1) 安装vmstat命令
2) 分别进行判断
3) 执行结果
结果验证
案例二十六: 测试进程是否在系统目录中
问题
查看进程是否在系统目录
分析
1) Ps命令
2) 匹配所有进程ID
流程图
实现分析
1) 定义检查的内容
2) 将系统目录下所有文件添加至文件中
3) 查看进程ID,并添加至文件中
4) 匹配进程文件是否在系统目录
结果验证
案例二十七:查看节点是否开启web服务 (80端口)
问题
1) 机器是否开启80端口
2) 端口是哪个服务所占用
分析
1) 命令netstat查看端口
2) 匹配出服务名称
流程图
实现分析
1) 查看80端口是否存在
2) 存在,打印结果,并匹配出服务名称
3) 不存在,打印结果
结果验证
案例二十八: 查看用户信息
问题
1) 查看有关于账户的一切信息
2) 针对于某一用户
分析
1) 找到用户信息
2) 查看对应用户
流程图
实现分析
1) 判断是否输入
2) 判断是否用户是否存在
3) 存在,输出信息
4) 不存在,提示信息
结果验证
案例二十九: 计算100以内能整除3的数的和
问题
计算既能整除3还在100内的整数和
分析
1) 循环进行
2) 除三没有余数
流程图
实现分析
1) 确定循环范围
2) %除留余数
3) 判断是否留有余数
结果验证
案例三十: 特定用户安装服务
问题
1) 避免安装很多服务,设定只有特定用户才可以安装
分析
1) 查看ID号,与管理员比较
2) 安装服务
流程图
实现分析
1) 因为管理员ID为0,与0比较
2) 是,安装服务
3) 不是,打印“检查”结果
结果验证