shell练习
开篇小贴士:为创建的sh(当然可以是任何一个文件)文件添加开头的注释
1、进入到家目录,然后通过 ls -a 查看全部文件
2、找到并编辑一个名为 .vimrc (Vim编辑器的核心配置文件)的配置文件,下图是添加的一个示例(我目前的注释)

在该配置文件中还可以修改字体、颜色主题、窗口布局等,具体文献参考如下:
vim设置新建文件自动填入的文件头(作者信息等)、设置编辑时间、鼠标直接定位_linux 创建文件时自动填写信息-CSDN博客
ping主机测试,查看主机是否存活
创建一个shell脚本以sh结尾即可,通过bash xx.sh来运行(以下均相同,不再赘述)
注:这里直接通过bash xx.sh 来运行的话必须要在当前位置下有这个文件,不然后面应该是路径

#########################
#File name:1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:07:06
#Description:
#########################
echo "ping主机测试,查看主机是否存活"
read -p "请输入一个需要测试的ip地址:" ipadd
ping -c 1 "$ipadd" > /dev/null
if [ $? -eq 0 ]; thenecho "该ip地址目前存活......"
elseecho "该ip地址已断开连接......"
fi
判断一个用户是否存在

#!/bin/bash
#########################
#File name:2.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:23:56
#Description:
#########################
echo "判断一个用户是否存在"
read -p "请输入一个需要查看是否存在的用户名:" username
if [ $username == "root" ]; thenecho "请输入除root用户外的用户!!!" && exit
elsels /home | grep $username > /dev/nullif [ $? -eq 0 ]; thenecho "$username用户是存在的"elseecho "$username用户不存在的"fi
fi
判断当前内核主版本是否为3,且次版本是否大于10

#!/bin/bash
#########################
#File name:3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:35:35
#Description:
#########################
echo "判断当前内核主版本是否为3,且次版本是否大于10"
main=$(uname -r | cut -d'.' -f1)
if [[ $main -eq 3 ]]; thenecho "当前内核主版本为3"
elseecho "当前内核版本不为3"
fisub=$(uname -r | cut -d'.' -f2)
if [[ $sub -gt 10 ]]; thenecho "当前内核次版本大于10"
elif [[ $sub -lt 10 ]]; thenecho "当前内核次版本小于10"
else echo "当前内核次版本等于10"
fi
判断nginx是否运行;如果没有,则运行它,并且开机启动
#!/bin/bash
#########################
#File name:4.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:52:15
#Description:
#########################
echo "判断nginx是否运行;如果没有,则运行它,并且开机启动"
read -p "请输入想要查看的服务名:" service_name
is_open=$(systemctl is-active $service_name | grep n)
if ! [[ $is_open -eq 0 ]]; thenecho "$service_name服务是没有启动的,下面我将进行一个运行并开启开机启动的操作......"systemctl start $service_namesystemctl enable $service_nameelseecho "$service_name服务是开启的......"auto_open=$(systemctl is-enabled $service_name)if [[ $auto_open -eq 0 ]]; thenread -p "当前服务没有开启开机自动开启,是否需要开启(请输入y/n):" -n 1 is_auto_openechofor ((flag=1; flag<=3; flag++));doif [[ "$is_auto_open" == "y" || "$is_auto_open" == "n" ]]; thenbreakfiecho "请输入y/n!!!"doneif [[ "$is_auto_open" == "y" ]]; thensystemctl enable $service_name > /dev/nullecho "当前服务的开机自启动已开启"elif [[ "$is_auto_open" != "n" ]]; then echo "不按照我的来就不让你操作了!!!" fielseecho "当前服务开启了开机自动开启服务......"fi
fi
判断指定的主机是否能ping通,必须使用$1变量
#!/bin/bash
#########################
#File name:5.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 20:57:48
#Description:
#########################
echo '判断指定的主机是否能ping通,必须使用$1变量'
echoping -c 1 $1 > /dev/null
if [ $? -eq 0 ]; thenecho "该ip地址目前存活......"
elseecho "该ip地址已断开连接......"
fi
完成一个报警脚本
要求如下:
根分区剩余空间小于20%
内存已用空间大于80%
向邮箱发送告警邮件
配合crond每5分钟检查一次

#!/bin/bash
#########################
#File name:6.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 08:56:03
#Description:
#########################
echo "报警脚本,要求如下:根分区剩余空间小于20%内存已用空间大于80%向邮箱发送告警邮件配合crond每5分钟检查一次"
echo
# 计算根分区的剩余空间百分比
root_ram=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
# 计算内存已用百分比
ram=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}') if [[ $root_ram -gt 80 ]]; then echo "根分区剩余空间小于20%" if [[ $ram -gt 80 ]]; then echo "内存已用空间大于80%" echo "目前根分区和内存的容量都比较告急!!!,先发送邮箱提醒......" | mail -s "内存警告" 2711279281@qq.com else echo "内存也还比较充足" fi
else echo "目前根分区空间充足"
fi
判断用户输入的是否是数字,如果是数字判断该数字是否大于10
#!/bin/bash
#########################
#File name:7.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 19:49:01
#Description:
#########################
echo "判断用户输入的是否是数字,如果是数字判断该数字是否大于10"
echo
for ((n=3; n>0; n-- ))
doread -p "请输入一个数字:" numif [[ $num =~ ^-?[0-9]+(\.[0-9]+)?$ ]]; thenif [[ $num -gt 10 ]]; thenecho "当前数字大于10"elseecho "当前数字不大于10"fibreakelseecho "请输入数字,你还有$(($n -1))次机会"fi
done
对用户输入的任意两个整数进行算数运算
要求的运算有和、差、乘积、商、余数,
判断用户输入的参数是否是两个,如果不是,提示用法;
判断用户输入的是否是整数,如果不是,则给出提示终止运行。

#!/bin/bash
#########################
#File name:8.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 20:30:31
#Description:
#########################
echo "计算用户输入的任意两个整数的和、差、乘积、商、余数,判断用户输入的参数是否是两个,如果不是,提示用法;判断用户输入的是否是整数,如果不是,则给出提示终止运行。"
echo
for ((n=3; n>0; n--))
doread -p "请输入两个整数(中间用空格隔开),我会对其进行算术运算:" num1 num2if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; thenif [[ $num2 -eq 0 ]]; thenecho "除数不能为0!!!"elseecho "两数的和为$(($num1 + $num2))"echo "两数的差为$(($num1 - $num2))"echo "两数的乘积为$(($num1 * $num2))"echo "两数的商为$(($num1 / $num2))"echo "两数的余数为$(($num1 % $num2))"fibreakelseecho "请输入两个整数,你还有$(($n - 1))次机会!!!"fi
done
相关文章:
shell练习
开篇小贴士:为创建的sh(当然可以是任何一个文件)文件添加开头的注释 1、进入到家目录,然后通过 ls -a 查看全部文件 2、找到并编辑一个名为 .vimrc (Vim编辑器的核心配置文件)的配置文件,下图…...
ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具
项目地址:ApiChain 项目主页 ApiChain 简介 ApiChain 是一款类似 PostMan 的接口网络请求与文档生成软件,与 PostMan 不同的是,它基于 项目和迭代两个视角管理我们的接口文档,前端和测试更关注版本迭代中发生变更的接口编写代码…...
Vercel 设置自动部署 GitHub 项目
Vercel 设置自动部署 GitHub 项目 问题背景 最近 Vercel 调整了其部署政策,免费版用户无法继续使用自动部署功能,除非升级到 Pro 计划。但是,我们可以通过配置 Deploy Hooks 来实现同样的自动部署效果。 解决方案 通过设置 Vercel 的 Dep…...
SQL进阶:如何跳过多个NULL值取第一个非NULL值?
NULL 一、问题描述二、ORACLE<一>、last_value () over ()<二>、lag () over()<三>、相关子查询 三、MYSQL<一>、全局变量<二>、coalesce() lag() over()<三>、相关子查询<四>、 recursive<五>、lag() over() min() over() …...
laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);
laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings); 1. 在laravel5使用join 子查询时 $sub_query DB::table(table1)->select([table1.id, cate_id])->join(table2, table1.id, , table2.id)->where(table1.cate_id, 2)->orderBy(tabl…...
远程控制软件:探究云计算和人工智能的融合
在数字化时代,远程控制工具已成为我们工作与生活的重要部分。用户能够通过网络远程操作和管理另一台计算机,极大地提升了工作效率和便捷性。随着人工智能(AI)和云计算技术的飞速发展,远程控制工具也迎来了新的发展机遇…...
网络协议之DNS
一、DNS概述 域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53,通过递归查询请求的方式来…...
.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
FreeSpire.XLS && Aspose.Cells包都可以实现。实现过程中发现如下问题: 本地测试通过, docker部署服务器后报错: The type initializer for Spire.Xls.Core.Spreadsheet.XlsPageSetupBase threw an exception. 由于缺少依赖…...
QML学习 —— 28、3种等待指示控件(附源码)
效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…...
flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现
数据逻辑处理布局中的逻辑处理Flutter类型数据处理 一、数据逻辑处理 我们接触的每一个Flutter界面,大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码: class _MyHomePageState extends State<MyHomePage> {// 变量 in…...
利用开源图床的技巧与实践
随着互联网的普及,图片的使用变得越来越广泛。无论是个人博客、社交媒体还是企业网站,都离不开图片的呈现。而图床作为图片存储和管理的工具,可以帮助开发者和内容创作者高效地管理图片资源。本文将探讨如何利用开源图床,并提供相…...
C++数据结构与算法
C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…...
Paddle Inference部署推理(三)
三:Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理,您可以通过以下两种方式获取静态图模型: (1)飞桨框架导出推理模型 飞桨框架在训练模型过程中,会在本地存储最终训练…...
python(四)os模块、sys模块
一、os模块 os 模块提供了很多程序与操作系统直接交互的功能 名称描述示例os.getcwd()得到当前工作目录,即当前Python脚本工作的目录路径‘D:\python’os.listdir()返回指定目录下的所有文件和目录名>>> os.listdir()os.remove()函数用来删除一个文件>…...
Oracle 数据库 IDENTITY 列
IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列,是由于其支持ANSI SQL 关键字 IDENTITY,其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的,毕竟MyQL已经有 AUTO_INCREMENT列,而SQL Server也已经有IDENT…...
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 方法一:通过全局事件监听阻止 Backspace 导致页面后退 在 main.js 或组件的 mounted 中添加以下代码: //【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 document.addEventListener…...
深入解密 K 均值聚类:从理论基础到 Python 实践
1. 引言 在机器学习领域,聚类是一种无监督学习的技术,用于将数据集分组成若干个类别,使得同组数据之间具有更高的相似性。这种技术在各个领域都有广泛的应用,比如客户细分、图像压缩和市场分析等。聚类的目标是使得同类样本之间的…...
ArcGIS应用指南:ArcGIS制作局部放大地图
在地理信息系统(GIS)中,制作详细且美观的地图是一项重要的技能。地图制作不仅仅是简单地将地理数据可视化,还需要考虑地图的可读性和美观性。局部放大图是一种常见的地图设计技巧,用于展示特定区域的详细信息ÿ…...
非root用户安装CUDA
1.使用nvidia-smi查看当前驱动支持的最高CUDA版本: 表示当前驱动最多支持cuda12.1 2.进入cuda安装界面,https://developer.nvidia.com/cuda-toolkit-archive,选择想要安装的版本,例如想要安装CUDA11.4: 如果需要查看ub…...
单点修改,区间求和或区间询问最值(线段树)
【题目描述】 给定一个长度为n的非负整数序列,接下来有m次操作,操作共有3种:一是修改序列中某个元素的大小,二是求某个区间的所有元素的和,三是询问某个区间的最大值。整数序列下标从1开始。n<10^5, m<10^5。 …...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...



