学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。
笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。
安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博,要时时刻刻保持平等的心,很多分类组合有互相包含也属于正常情况,遇到问题就能够举一反三。
前言
俗话说:学以致用,那今天就来敲几个shell脚本,巩固一下shell基础的知识点。大家一定要多动手尝试,这样才能融会贯通,将死知识内化为自己的东西。
一、计算器
1.脚本要求
2.代码实现
(代码不唯一,仅供参考):
3.代码思路
首先通过read函数读入三个运算参数,分别赋值给x,func,y变量
然后通过if判断三个变量是否为空,如果其中有为空的变量说明用户的参数输入不正确,提示argument error,再退出程序
再然后使用两组代码判断x和y变量是否为数字,其原理是expr函数之后的变量必须为数字才能计算,否则命令运行错误,返回非零的返回值,此时使用if判断$?是否等于0可判断出变量是否为数值
最后通过case语句对不同的func进行不同的处理,其中出发要判断除数是否为零
不难发现,我在代码中添加了很多对用户输入数据的验证命令,其目的在于提高脚本的健壮性。在编写代码时不能只考虑用户会乖乖的输入正确格式的数据,对于错误的输入我们也要考虑到,并且还要有相应的命令去处理这种情况,不然就会发生输错一个数据,卡,程序出错退出的情况,不仅用户体验不好,而且还可能存在安全问题。
二、阶乘
1.脚本要求
2.代码实现
(代码不唯一,仅供参考):
3.代码思路
首先通过read函数读入一个参数,赋值给x
然后判断x变量是否为数字
再然后定义变量result并赋值为1,其作用是作为阶乘运算的迭代变量
最后使用for循环进行阶乘运算,使用seq命令生成1到$x的列表,然后使用for循环一次读取该列表中的值,在每次循环中都令旧的result变量的值乘该轮的i值,再赋值给result变量。循环结束后输出result值。
三、获取eht0网卡的IPv4地址
1.脚本要求
2.代码实现
3.代码思路
这段代码的意思是先执行ifconfig eth0输出eth0网卡的信息并将输出的结果通过管道作为下一个命令grep的输入。然后执行grep,筛选模式是一个正则表达式,意思是筛选含有inet字符串且某单词结尾就是inet的字符串行,然后也是将输出作为下一命令的输入处理。awk默认以空格(‘ ‘)分割输入字符串,使用定义的函数{print $2}输出经过分割后的列表的第二个元素的值,即网卡IPv4地址。然后将这一串代码通过反引号``执行后将得到的结果赋值给ip变量,最后通过echo输出结果。
四、计划任务
1.实验要求
我这里实现的是将脚本三的代码加入计划任务,并设置随时执行,然后把结果输出到~/ip.txt
2.实验实现
首先修改代码,添加环境变量PATH和结果重定向,因为在crontab的环境中PATH路径的设置是不全面的,这导致有的命令放到其环境中运行不了,使用要在代码中重新设置一下PATH路径。
然后使用crontab -e添加任务计划
这一行的意思是*分 *时 *日 *月 星期* 执行后面的命令,*表示任意
然后启动cron服务
脚本就会随时执行了,实际上是一分钟执行一次,因为cron一分钟检查一次规则文件
五、无限重启
1.实验要求
2.实验实现
首先编写好重启脚本
然后给脚本赋权
再然后把他放到/etc/init.d目录下(我这里已经放到该目录下了)
再然后进入/etc/rc5.d目录下,在该目录下新建一个重启脚本的符号链接,rc5.d是图形界面运行级别的开机启动程序目录,想详细了解可以去搜搜“linux系统的运行级别”相关的知识。推荐看一下这篇文章:linux /etc/rc.d/目录的详解 - Dus - 博客园,讲的超详细
最后重启,系统开始无限重启
总结
以上就是今天要讲的全部内容,这次主要是shell实操的分享,自己动手写了几个shell脚本。动手操作是很重要的,因为计算机是一门很注重实操的课程,只有动起来进步的才会快。希望大家能动起手来,共同进步。喜欢的话可以给个一键三连吗,这对我很重要ヾ(≧▽≦*)o