shell脚本案例30个带详细解析

案例一:输入网卡的名字,来输出网卡的IP

1.问题:
1.)参数后判断要加“”
2.)名字为空时显示ip

2.分析:

  1. ) 把本机的所有网卡名列出来,来引导用户输入。
  2. ) 使用命令列出所有网卡信:ifconfig
  3. ) 设计一个函数,把网卡名作为参数,函数返回网卡的IP
  4. ) 在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)

3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. ) egrep awk,反复运行和推敲命令,来分析执行结果
  2. ) 死循环。当输入错误或者为空,继续输入–>输入正确。
  3. ) while循环continue、break(逻辑性) 逻辑判断参数
  4. ) checkip函数调用

6.结果验证

案例二:自动对磁盘分区、格式化、挂载
1.问题:

  1. 磁盘名称
  2. EOF的使用
    2.分析:
  3. 将添加的磁盘进行分区、格式化、挂载
  4. 使用命令查看fdisk、使用命令创建可存储文件类磁盘mkfs.xfs、使用命令挂载mount
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 查看磁盘情况
  2. 新建分区
  3. 创建文件系统磁盘
  4. 挂载磁盘
    6.结果验证

案例三:检查特定软件包是否安装
1.问题:

  1. 判断条件的比对值不需要双引号
  2. 理解$@含义
    2.分析:
  3. $@提取所有的位置的变量的值
  4. 进行判断是否安装
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 判断参数个数是否为零
  2. $@提取所有位置的变量的值
  3. 判断是否安装,返回特定的输出结果
    6.结果验证

案例四:提示用户输入年份后判断该年是否为闰年
1.问题:

  1. 注意if、elif、else的用法
    2.分析:
  2. 提示用户输入年份
  3. 判断用户输入年份
  4. 考虑用户输入年份是否为空(或是否为数字)
  5. 输入为数字时,进行计算
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 用户输入为空白时,提示没有输入年份
  2. 用户输入为字母时,提示输入不是数字
  3. 用户输入是数字时,与四进行计算
    6.结果验证

案例五:下载文件到指定目录
1.问题:

  1. 第一个参数为可下载文件,第二个参数为目录
  2. 目录不存在,则提示用户是否创建,创建就继续,不创建返回一个51的错误值
  3. 目录存在,下载文件,测试成功与否,成功返回0,失败返回52
    2.分析:
    1) 操作不当(没有输入下载文件或路径),提示操作错误
    2) 若有目录提示操作失败,已有目录
    3) 提示用户输入相应选项,输入错误或不输都退出运行,操作失败
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 用户操作不当,打印“操作失败”,并退出
2) 没有目录时,提示创建目录,有目录时,打印“操作失败,已有该目录”,并退出
3) 选择创建,则进行安装。不选择创建,退出本次操作,返回51
4) 下载成功后,返回0;下载失败,返回52
6.结果验证

案例六:ping通节点并显示节点名称
1.问题:

  1. 使用ssh协议、expect工具远程连接节点
  2. Ping通节点,ping通显示节点名称与ip
    2.分析:
    1) 使用expect工具进行远程连接
    2) 规定一段ip,进行ping,ping通显示节点名称及IP(顺序不可变),ping不通,报错并只显示ip
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实验解析
1) expec工具中规定输入的yes与password
2) 选一段IP进行循环,依次进行ping
3) ping完所有IP后显示结果
6.结果验证

案例七:统计linux进程相关数量信息
1.问题:
1) 查看linux进程
2) 将正在运行、待机、停止等进程数总和列出
2.分析:
1) 将进程ID进行循环,依次查看进程状态
2) 进程状态进行叠加,显示进程总数
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 使用for循环进程一次操作
2) 使用case进行进程状态判断
3) 打印出进程状态数对应总和
6.结果验证

案例八:打印符合要求数字

  1. 问题:
    1) 用户输入是否为数字
    2) 第二次输入是否比第一次大
    2.分析:
    1) 判断是否输入为数字
    2) 打印出第一轮数字
    3) 判断两轮数字大小
    4) 继续打印
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 判断是否输入为数字,是就继续,不是打印提示并结束
2) 打印出第一轮数字,并询问是否继续
3) 判断两轮数字大小,大于继续,小于或等于打印提示并结束
4) 打印第一轮数字到第二轮数字中间的数
6.结果验证

案例九:监控远程的一台机器的存活状态,发现宕机发一封邮件给自己
1.问题:
1) ping远程机器
2) 发送邮件给自己用户
2.分析:
1) 先进行ping通
2) 满足条件后分别返回不同操作结果
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 先进行ping通主机操作
2) 判断上述条件是否满足
3) 满足返回节点开启
4) 不满足给自己发送邮件告知节点关闭
6.结果验证

案例十:打印文件1-5行不包含字母的行,同时删除6-10行的字母
1.问题:
1) sed、grep循环使用
2) for循环与if判断
2.分析:
1) 使用循环打印
2) if判断,进行挑选
3) 打印符合条件的行数
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 第一次使用for循环确定1-5行
2) if判断进行筛选
3) 第二次使用for循环确定6-10行
4) 直接确定打印条件
5) 第三次使用for循环确定其他行列
6) 打印出所有文本
6.结果验证

案例十一:批量修改文件名

  1. 问题:
    1) 批量修改.txt为.txt.bak
    2) 把所有.bak文件打包压缩为123.tar.gz
    3) 批量还原文件的名字,即把增加的.bak在删除
    2.分析:
    1) 将所有的文件名先写到临时文件中
    2) 对临时文件进行改名操作
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

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) 循环输出数值
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
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) 不是,打印“检查”结果
结果验证

  • 8
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值