当前位置: 首页 > news >正文

shell脚本实战

学习视频来自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

相关文章:

shell脚本实战

学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。 笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。 安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博&a…...

【机器学习】分类任务: 二分类与多分类

二分类与多分类:概念与区别 二分类和多分类是分类任务的两种类型,区分的核心在于目标变量(label)的类别数: 二分类:目标变量 y 只有两个类别,通常记为 y∈{0,1} 或 y∈{−1,1}。 示例&#xff…...

FreeSWITCH mod_conference 的按键会控

又是一篇命题作文 mod_conference 官方文档: https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_conference_3965534/ 英文不好的可以看中文: http://www.freeswitch.org.cn/books/references/1.7-mod_conference.html…...

串口工作方式

串口工作方式 方式0方式0输出方式0输入 方式1方式1输出方式1输入 方式2或方式3输出输入 串口使用方法如何计算波特率串口初始化步骤串口回传实验模拟printf实验串口接收数据不丢失实验 方式0 方式 0 时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输 入…...

统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现

要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现。以下是一些常见的方法和步骤: 一、通过命令行工具统计 查看Nginx访问日志: Nginx的访问日志通常默认存储在/var/log/nginx/access.log,但具体位置可能因安装和配置…...

Apache Airflow 快速入门教程

Apache Airflow已经成为Python生态系统中管道编排的事实上的库。与类似的解决方案相反,由于它的简单性和可扩展性,它已经获得了普及。在本文中,我将尝试概述它的主要概念,并让您清楚地了解何时以及如何使用它。 Airflow应用场景 …...

42 基于单片机的智能浇花系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采样DHT11温湿度传感器检测温湿度,通过LCD1602显示 4*4按键矩阵可以设置温度湿度阈值,温度大于阈值则开启水泵,湿度大于阈值则开启风扇…...

乐橙云小程序插件接入HbuilderX

乐橙插件使用: 1.配置app.json文件,uniapp中在mainfest.json中配置 https://uniapp.dcloud.net.cn/collocation/manifest.html#mp-weixin ** 2、集成插件页面.json文件 ** uniapp在 pages.json 对应页面的 style -> usingComponents 引入组件&…...

VoCo-LLaMA: Towards Vision Compression with Large Language Models

视觉语言模型在各种多模态任务上取得了显著的成功,但经常受到有限上下文窗口和处理高分辨率图像输入和视频的高计算成本的瓶颈。视觉压缩可以通过减少视觉令牌数量避免该问题。先前方法使用额外模块压缩视觉令牌并强制LLM理解压缩的令牌。然而,LLM对视觉…...

Vue+vite 组件开发的环境准备

一.nodejs安装 进入Node.js 官网(Node.js — Run JavaScript Everywhere),点击下载。 双击打开,进行安装 双击打开后,点击 next(下一步),后面也是一直点击 next 无其他设置,直到 …...

基于社区发现的GraphRAG思路

GraphRAG出自2024年4月的论文《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》,其代码也在2024年年中开源 。它在用图结构来完成RAG时,使用社区这个概念并基于社区摘要来回答一些概括性的问题。 Graph RAG流程如论文图1所…...

react学习记录

一、目录结构react优秀代码之react目录结构简洁之道React 作为一个库,不会决定你如何组织项目的结构。这是件好事,因为这样 - 掘金【React】项目的目录结构全面指南_react项目结构-CSDN博客 1、创建项目:开发文档 Getting Started | Create…...

Day2——需求分析与设计

教师端签到应用软件的需求分析; 产品经理如何写好产品需求文档(附模板) 需求分析是软件开发过程中的关键步骤,它确保了开发的软件能够满足用户的需求。以下是进行需求分析的具体步骤: 1. 确定分析目标 明确教师端签到…...

VScode离线下载扩展安装

在使用VScode下在扩展插件时,返现VScode搜索不到插件,网上搜了好多方法,都不是常规操作,解决起来十分麻烦,可以利用离线下载安装的方式安装插件!亲测有效!!! 1.找到VScod…...

【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)

决策树是一种树形结构的机器学习模型,适用于分类和回归任务。它通过一系列基于特征的条件判断来将数据分割为多个子区域,从而预测目标变量的值。 1. 决策树的结构 根节点(Root Node) 决策树的起点,包含所有样本。根据某…...

【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤

目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步:定义程序的目标 1.8.2 第 2 步:设计程序 1.8.3 第 3 步:编写代码 1.8.4 第 4 步:编译 1.8.5 第 5 步:运行程序 1.8.6 第 6 步:测试和调试程序 1.8.…...

Docker 使用 Dockerfile 文件打包部署前端项目

编写 Dockerfile 文件: FROM nginx:latest ADD dist /etc/nginx/html/dist COPY nginx.conf /etc/nginx/nginx.conf ENV PATH /usr/sbin:$PATH EXPOSE 80 ENTRYPOINT ["nginx"] CMD ["-g","daemon off;"]编写 nginx.conf 文件&#…...

HTML-全

. CSS css后缀名的文件被html引用 在HTML中,CSS(层叠样式表,Cascading Style Sheets)是一种用于设置网页上的文本内容、图片布局和版面设计等外观样式的样式表语言。简单来说,CSS定义了HTML元素如何显示在浏览器中。…...

高效流程图绘制:开发设计流程图利器

在选择画流程图的工具时,不同的项目和使用场景会决定最佳的工具。以下是几款常见的流程图工具,并结合具体项目使用场景提供建议: 1. Lucidchart 特点: 在线协作:支持多人实时协作,适合团队合作。模板丰富&…...

数据仓库的概念

先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...