(1st week) ____10道shell编程题

【时间】:2019-07-01~2019-07-07
【主题】: 一周学习总结
主要内容包括10道shell练习题,作为一名小白,存粹的学习技术理论知识并不能对知识产生很深的印象,只有在实战中或者在练习中不断学习,才会对知识点有更深的理解。
哈哈

【Shell】练习总结

			关于shell编程题来源,可参考:https://www.cnblogs.com/clsn/p/8028337.html#auto_id_11

【第一题】:shell 实现抓阄游戏

要求:
1. 执行脚本后,输入英文名字全拼,产生随机数01-99之间的数字,数字越大评分就去高,前面已经抓到的数字,下次不能在出现相同数字。
2. 第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别人输入。
如下图:
lot
通过阅读要求,发现需要实现该练习需要的知识点包括:1.随机数生成;2.退出命令修改;3.字体颜色修改;4.控制台输入命令;5.数字排序命令。
解法一
通过阅读要求,我自己的解法如下:
lot

	**解法二:
	解法二是本题作者提供的答案,可参考连接https://www.cnblogs.com/clsn/p/8028337.html#auto_id_49 1.91 练习题答案。
	【总结】
	             对比和作者的解法,基本一致,但是作者对随机数封装成了一个函数,这样就可以产生复用的作用。把一个独立功能封装起来复用的思想指得反思。

【第二题】输出9 x 9 乘法表

要求格式如下:
样例
解法一:
笔者解法:
9*9乘法表
解法二:
作者答案:
9*9
【总结】
和作者的解法一对比,发现笔者的解法略显复杂,并且在思想上有点笨。其实反思主要的原因是笔者忘记了 echo -n 的用法 :即输出不换行。之前一直在纠结换行问题,所以采用了“曲线救国”的方式,每一列生成一个文件,再合并9个文件展示。

【第三题】解决DOS攻击生产案例

要求:
写一个Shell脚本解决DOS攻击
请根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100(读者根据实际情况设定),即调用防火墙命令封掉对应的IP。防火墙命令为:iptables-I INPUT -s IP地址 -j DROP。
练习使用日志下载地址:https://files.cnblogs.com/files/clsn/access-web-log.zip
【解法一】:
在看到本题后,笔者是有点懵逼的,因为平时工作很少涉及到实施运维的工作,后来查阅资料明白:其实封掉那些在短时间端内频繁访问服务器的ip。因为在本地虚拟机上操作,所以练习用的的作者给的日志。
DOS
【解法二】:
dos【总结】
对比作者的解法,发现作者的解法更简洁,作者使用了awk和while 的高级用法,而笔者是很多命令的堆砌。对比来看,作者的解法更值得推荐,但要求对awk的使用有较高的理解和使用。

【第四题】单词及字母去重排序

要求:
1. 按单词出现的频率降序排序;
2. 按字母出现的频率降序排序。
内容如下:
the squid project provides a number ofresources to assist users design implement and support squid installations.Please browse the documentation and support sections for more infomation byoldboy training

【解法】
本题解法其实较为简单:
排序【总结】
对比作者的解法,基本一致,因为本题基本属于对shell排序命令的使用,比较简单。

【第五题】批量生成随机字符文件名

要求:
使用for循环在当前目录下 的./clsn 目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串clsn,名称示例如下:
样例
【解法一】:
本题的难点其实主要是怎么生成10个随机字符串,笔者解法如下:
随机
【解法二】:
随机
【总结】
对比作者写法,笔者封装了一个随机字符生成函数Suiji,而作者则安装了一个随机字符生成命令–pwgen。方式更加简单,值得学习。而且即使作者不用pwgen命令,作者命名的File_name变量也能够生成长度为10的随机字符!这一点很赞!

【第六题】批量改名特殊案例

要求:
【第五题】中结果文件名中的clsn字符串全部改成znix(最好用for循环实现),并且将扩展名html全部改成大写。

【解法一】:
本题考点主要在怎么截取字符串。笔者解法如下:
改名【解法二】
aaa【总结】
对比作者解法,笔者使用的是截取文件名的常规手法,而作者使用的是sed的正则匹配高端手法,虽然笔者认为自己的写法更加简洁易懂,但作者对正则的使用值得学习!赞!

【第七题】批量创建特殊要求用户

要求:
批量创建10个系统帐号clsn01-clsn10并设置密码(密码为随机数,要求字符和数字等混合)。
如下图:
创建

【解法一】
添加用户名
【解法二】
aaaaa
【总结】
对比作者写法,笔者没有考虑到如果用户已存在学到删除用户再重新创建这一点。此外需要说明的是,作者使用的是root用户执行的该脚本,笔者脚本是再普通用户下执行的。

【第八题】 扫描网络内存活主机

要求:
判断10.0.0.0/24网络里,当前在线的IP有哪些?

check【解法一】
本题考点主要是ping的使用:
【解法二】:
在这里插入图片描述
【总结】
笔者解法基本和作者一致,本题终点考察ping 的参数使用,关于ping的详细使用,可参考:https://blog.csdn.net/gechong123/article/details/80609598

【第九题】破解RANDOM随机数

要求:
已知下面5个字符串是通过RANDOM随机数变量md5sum后,再截取一部分连续字符串的结果,请破解这些字符串对应的使用md5sum处理前的RANDOM对应的数字?
21029299 00205d1c a3da1677 1f6d12dd 890684b

【解法一】
本题考点 md5sum命令的使用以及random的范围【0~32767】,笔者解法如下图:
破解
【解法二】
aaaaa
【总结】
本题解题思想在对random升成的每个随机数作一次md5sum,然后找出含有以上连续字符串的数字。和作者解法对比,笔者代码相对简洁点儿。但作者的代码在理解上更容易。

【第十题】博客园博文爬虫

要求:
获取博客园(惨绿少年)博客列表并按照文章倒序排序,格式如下图:
crawl
【解法一】:
crawl
【解法二】:
由于笔者试运行作者的代码,并没有运行成功,就不贴出来了,感兴趣可访问:https://www.cnblogs.com/clsn/p/8028337.html#auto_id_12 【1.2.7】练习题
【总结】
感觉shell在爬虫方面上有很多局限性,虽然本质上都是对文本的解析,但在爬虫方面笔者更推荐python。

=========================================================================================================
本周关于shell的学习内容就这么多了,哎,好像把本周python的练习题也贴出来,但该出去买菜做饭啦。
下周继续努力!加油!!
smile

发布了8 篇原创文章 · 获赞 6 · 访问量 2528

猜你喜欢

转载自blog.csdn.net/weixin_42374329/article/details/95007450
1st