Linux的Shell编程
一、什么是Shell
1、为什么要学习Shell
Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
对于JavaEE和Python程序员来说,工作的需要。Boss会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。对于大数据程序员来说,需要编写Shell程序来管理集群。
2、Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序
用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
3、Shell脚本的执行方式
1.格式要求
以 #!/bin/bash 开头
需要可执行权限
2.常用执行方式
(1)使用脚本的绝对路径或相对路径
首先要赋予想运行的helloword.sh 脚本的+x权限,再执行脚本
(2)sh 脚本
不用赋予脚本+x权限,直接执行即可
二、Shell的变量
1、变量介绍
Linux Shell中的变量分为:系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME
显示当前shell中所有变量:set
2、Shell变量的定义
1.基本语法
定义变量 : 变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量。不可unset
2.示例
创建脚本 var.sh
1)定义变量A
2)撤销变量A
3)声明静态的变量B=2,不能unset
4)可把变量提升为全局环境变量,可供其他Shell程序使用
3.Shell变量的定义规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(x)
等号两侧不能有空格
变量名称一般习惯为大写 ,这是规范
4.将命令的返回值赋给变量
A=`date`,反引号,运行里面的命令,并把结果返回给变量A
A=$(date),等价于反引号
3、设置环境变量
1.基本语法
export 变量名=变量值:将shell变量输出为环境变量/全局变量
source 配置文件:让修改后的配置信息立即生效
echo $变量名:查询环境变量的值
2.示例
1)在/etc/profile文件中定义TOMCAT HOME环境变量
2)查看环境变量TOMCAT HOME的值
3)在另外一个shell程序中使用 TOMCAT HOME
4、设置位置参数变量
1.介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如 :./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
2.基本语法
$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#:这个变量代表命令行中所有参数的个数
3.示例
编写一个Shell脚本 position.sh ,在脚本中获取到命令行的各个参数信息
5、设置预定义变量
1.基本介绍
Shell设计者预先定义好的变量,可以直接在Shell脚本中使用
2.基本语法
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)
$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
3.示例
在Shell脚本 preVar.sh 中简单使用一个预定义变量
三、运算符
1、基本语法
$((运算式)) 或 $[运算式] 或者 expr m + n
expr m - n
expr \*,/ ,% :乘,除,取余
注:expr运算符间要有空格。如果希望将expr的结果赋给某个变量,使用反引号(``)
2、示例
计算(2+3)*4的值
请求出命令行的两个参数[整数]的和 20 50
四、条件判断
1、基本语法
[ condition ]
注:condition 和中括号之间有空格
非空返回true,可使用$? 验证(0为true,>1 为false)
示例:
[ goose ] :返回true
[ ] :返回false
[ condition ] && echo OK || echo 不OK:条件满足,执行后面的语句
2、常用判断
1.=字符串比较
2.两个整数的比较
- -lt 小于
- -le 小于等于 little equal
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
3.按照文件权限进行判断
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
4.按照文件类型进行判断
- -f 文件存在并且是一个常规的文件
- -e 文件存在
- -d 文件存在并是一个目录
3、示例
1."ok" 是否等于 "ok"
#!/bin/bashif [ "ok" = "ok" ]
then echo "equal"
fi
2.23是否大于等于22
#!/bin/bashif [ "ok" = "ok" ]
then echo "equal"
fiif [ 23 -ge 22 ]
then echo "Yes"
fi
3./root/aaa.txt 是否存在
#!/bin/bashif [ "ok" = "ok" ]
then echo "equal"
fiif [ 23 -ge 22 ]
then echo "Yes"
fiif [ -f /root/aaa.txt ]
thenecho "存在"
fi
五、流程控制
1、 if语句
1.单分支
#!/bin/bashif [ condition ]
then echo "输出"
fi
2.多分支
#!/bin/bashif [ condition ]
then 操作elif [ condition ]then 操作
fi
3.示例
输入的参数大于等于60,则输出“及格了”,否则输出“明年再见”
#!/bin/bashif [ $1 -ge 60 ]
then echo "及格了"
elif [ $1 -le 60 ]
then echo "明年见"
fi
2、case语句
1.基本语法
case $变量名 in
"值1")
操作
;;
"值2")
操作
;;
*)
操作 #上述值都不满足,执行这块操作
;;
esac
2.示例
命令参数是1时输出“周一”,2输出“周二”,其他输出”other"
#!/bin/bashcase $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
3、for语句
1.基本语法
语法1
for 变量 in 值1 值2 值3...
do
操作
done
语法2
2.示例
示例1:打印命令行输入的参数
#!/bin/bashfor i in "$*"
do echo "num is $i"
donefor j in "$@"
do echo "num is $j"
done
示例2:从1加到100的值输出显示
#!/bin/bashSUM=0
for(( i=1; i<=100; i++))
doSUM=$[$SUM+$i]
done
echo SUM=$SUM
4、while 循环
1.基本语法
while [ 条件判断式 ]
do操作
done
注意:while 和 条件判断式的 [ 之间有空格
2.示例
从命令行输入一个数n,统计从1 累加到 n 的值是多少
#!/bin/bash
i=1
SUM=0
while [ $i -le $1 ]
doSUM=$[$SUM+$i]i=$[$i+1]
done
echo SUM=$SUM
5、read读取控制台输入
1.基本语法
read [选项] [参数]
2.常用选项
-p :指定读取值时的提示符
-t :指定读取值时的等待时间(秒),如果没有在指定的时间内输入,就不再等待
3.参数
变量:指定读取值的变量名
4.示例
(1)读取控制台输入的一个NUM1值
(2)读取控制台输入的一个NUM2值,在10秒内输入
超过10秒后自动退出
六、函数
1、函数介绍
Shell编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。
1.系统函数
(1)basename
功能: 返回完整路径最后 / 的部分,常用于获取文件名
基本语法:basename [pathname] [suffix]
basename [string] [suffix]
basename命令会删掉所有的前缀,包括最后一个 “ / ” 字符,然后将字符串显示出来
选项 [suffix]:如果suffix被指定了,basename会将pathname或string中的suffix去掉
示例:返回/home/aaa/test.txt 的 “ test.txt ” 部分
(2)dirname
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
基本语法:dirname 文件绝对路径
从给定的包含绝对路径文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录部分)
示例:返回 /home/aaa/test.txt 的 /home/aaa 部分
2.自定义函数
(1)基本语法
[function] funname[()]
{Action;[return int;]
}
调用直接写函数名 : funname [值]
示例:
自定义函数getSum,计算输入两个参数的和
七、综合案例——定时备份数据库
1、要求
每天凌晨 2:30 备份 数据库 goose 到 /data/backup/db
备份开始和备份结束能够给出相应的提示信息
备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:2021-0312 230201.tar.gz
在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db
# 当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME# 数据库的地址
HOST=localhost
DB_USR=root
DB_PASSWD=goose000
DATABASE=goose
# 创建备份目录
# 如果不存在就创建,如果存在就直接使用
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"# 备份数据库
mysqldump -u${DB_USR} -p${DB_PASSWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz# 将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
# 删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库 ${DATABASE} 成功"
接着使用crontab -e命令,输入
30 2 * * * /usr/sbin/mysql_db_backup.sh
相关文章:
Linux的Shell编程
一、什么是Shell 1、为什么要学习Shell Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。 对于JavaEE和Python程序员来说,工作的需要。Boss会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个…...
【八股文】volatile关键字的底层原理是什么
volatile只能保证可见性和有序性 volatile如何保证可见性 当对volatile变量进行写操作的时候,JVM会向处理器发送一条lock前缀的命令,将这个缓存中的变量会写到系统内存中。 所以,如果一个变量被volatile所修饰,每次数据变化之后…...
一种基于大规模语言模型LLM的数据分析洞察生成方法
从复杂数据库中提取洞察对数据驱动决策至关重要,但传统手动生成洞察的方式耗时耗力,现有自动化数据分析方法生成的洞察不如人工生成的有洞察力,且存在适用场景受限等问题。下文将介绍一种新的方法,通过生成高层次问题和子问题,并使用SQL查询和LLM总结生成多表数据库中的见…...
三大供应链管理模式——解决方案与实操案例详解
库存压到喘不过气,紧急订单却总赶不上交付?这是许多企业的真实困境——推式供应链盲目备货导致积压,拉式供应链又因响应慢而丢单。供应链管理,本质上是在“计划”与“变化”之间把握平衡。上篇文章,我们系统梳理了供应…...
【C++】STL库面试常问点
STL库 什么是STL库 C标准模板库(Standard Template Libiary)基于泛型编程(模板),实现常见的数据结构和算法,提升代码的复用性和效率。 STL库有哪些组件 STL库由以下组件构成: ● 容器…...
集成学习之随机森林
目录 一、集成学习的含义 二、集成学习的代表 三、集成学习的应用 1、分类问题集成。(基学习器是分类模型) 2、回归问题集成。(基学习器是回归模型) 3、特征选取集成。 四、Bagging之随机森林 1、随机森林是有多个决策树&a…...
【SpringBatch】03步骤对象 (Step)控制与执行流程设计
目录标题 六、步骤对象 Step6.1 步骤介绍6.2 简单Tasklet6.3 chunk居于块Tasklet**ChunkTasklet 泛型** 6.4 步骤监听器6.5 多步骤执行6.6 步骤控制6.6.1 条件分支控制-使用默认返回状态6.6.2 条件分支控制-使用自定义状态值 6.7 步骤状态6.8 流式步骤 六、步骤对象 Step 前面…...
走进Java:String字符串的基本使用
❀❀❀ 大佬求个关注吧~祝您开心每一天 ❀❀❀ 目录 一、什么是String 二、如何定义一个String 1. 用双引号定义 2. 通过构造函数定义 三、String中的一些常用方法 1 字符串比较 1.1 字符串使用 1.2 字符串使用equals() 1.3 使用 equalsIgnoreCase() 1.4 cpmpareTo…...
AI如何变革亚马逊广告投放?DeepBI的智能优化解析
在亚马逊平台上,广告投放的方式正经历着从人工精细化运营到AI自动化优化的深刻变革。传统的广告投放依赖人工操作,涉及海量数据分析、手动调价、竞价策略优化等环节,既耗时又易受人为因素影响。而AI驱动的智能投放系统,如DeepBI&a…...
小程序电子画册制作,用户体验为王!
家人们,现在小程序电子画册超火,不管是展示产品还是分享故事都超实用。但在小程序电子画册制作过程中,用户体验真的得好好考量!今天就和大家唠唠这其中的门道。 1、加载速度:快才是王道 打开小程序的瞬间,…...
【商城实战(49)】解锁小程序端适配与优化,让商城飞起来
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析
【完整版】3月19日,黄仁勋Nvidia GTC 2025 主题演讲|英伟达 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析 一、引言 1.1 分析内容 本研究主要采用了文献研究法、数据分析以及专家观点引用相结合的方法。在文献研究方面,广泛收集了…...
《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用
《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用 《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用内核对象内核对象的定义内核对象归操作系统所有 基于 Windows 的线程创建进程与线程的关系Windows 中线程的创建方…...
线性规划的基本解、基本可行解和可行解
在线性规划中,基本解、基本可行解和可行解是非常重要的概念,特别是在使用单纯形法求解时。下面详细解释这些概念,并说明如何计算它们。 1. 线性规划问题的标准形式 线性规划的标准形式为: 其中: A 是 mn 的矩阵&…...
【AVRCP】服务发现互操作性:CT 与 TG 的 SDP 协议契约解析
目录 一、服务发现的核心目标:能力画像对齐 二、控制器(CT)服务记录:控制能力的声明 2.1 必选字段:角色与协议的刚性契约 2.1.1 服务类标识(Service Class ID List) 2.1.2 协议描述列表&am…...
[从零开始学习JAVA] Stream流
前言: 本文我们将学习Stream流,他就像流水线一样,可以对我们要处理的对象进行逐步处理,最终达到我们想要的效果,是JAVA中的一大好帮手,值得我们了解和掌握。(通常和lambda 匿名内部类 方法引用相…...
K8S学习之基础三十八:Kube-static-metrics监控
Kube-static-metrics监控 kube-static-metrics组件可以通过监听apiserver生成有关资源对象的状态指标,比如Node、Pod,需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以可以使用Prom…...
JAVA-多线程join()等待一个线程
引言:更多线程的认识可以看一篇博客: JAVA-Thread类实现多线程-CSDN博客 一、join()的作用 我们知道线程是随机调度执行的,但是有时候我们需要另一个任务完成了,我们才能继续,这个时候我们就可以使用join去等待线程结束…...
HashMap 常用方法
HashMap 常用方法 方法作用示例put(K key, V value)添加键值对map.put("apple", 10);get(Object key)获取指定键的值map.get("apple"); → 10remove(Object key)删除指定键的键值对map.remove("orange");containsKey(Object key)检查是否包含指…...
LogicFlow介绍
LogicFlow介绍 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码平…...
Docker搭建MySQL主从服务器
一、在主机上创建MySQL配置文件——my.cnf master服务器配置文件路径:/data/docker/containers/mysql-cluster-master/conf.d/my.cnf slave服务器配置文件路径: /data/docker/containers/mysql-cluster-master/conf.d/my.cnf master服务配置文件内容 …...
计算机二级web易错点(4)-选择题
选项 A:<input type"radio"> 用于创建单选按钮,同一组单选按钮中只能选择一个选项,所以该选项不符合要求。选项 B:HTML 中没有 type"check" 这种类型,是错误的写法,不能产生复选…...
3.19学习总结
学习了Java中的面向对象的知识点 完成一道算法题,找树左下角的值,错误的以为左下角只能是最底层的左节点,但指的是最底层最左边的节点...
Swagger-告别手写文档
文章目录 1. 引言2. Swagger是什么?3. SpringBoot2.7.3集成Swagger4. 常见注解 1. 引言 在RESTful API开发中,维护准确、易读的接口文档是团队协作的核心挑战,通常接口文档分为离线的和实时的。离线的接口文档工具有 YAPI等,其中…...
LeetCode-回文数
原题链接:9. 回文数 - 力扣(LeetCode) 首先我会想到的是,将这个数字转成字符串,然后通过前后指针判断是否相等,最终返回结果是否为回文数,时间复杂度:O(n),空间复杂度&am…...
数据结构之链表(双链表)
目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点: 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插: 头插: 4.双链表的尾删和头删 尾删: 头删: …...
硬件基础(5):(2)二极管分类
文章目录 📌 二极管的分类与详细介绍1. **整流二极管(Rectifier Diode)**特点:选型依据:补充说明: 2. **快恢复二极管(Fast Recovery Diode)**特点:选型依据:…...
MQTT 和 Modbus 的优缺点对比
MQTT和Modbus协议是物联网(IoT)躲不开的两种协议,市面上覆盖了百分之98的产品。 MQTT由IBM在1999年发布。2014年,MQTT成为OASIS(结构化信息标准促进组织)的标准,后来被ISO/IEC 20922正式采纳&a…...
Android14 系统左右声音通道设置代码
Android14 系统左右声音通道设置代码 文章目录 Android14 系统左右声音通道设置代码一、前言二、系统级设置左右声音通道分析1、各方案设置左右声音通道的主要代码(1)3588 Android13 方案的实现(2)9679 Android14 方案的实现&…...
【Golang】go如何通过atomic原子操作来确保数据一致性
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
2025年汽车加气站操作工考试精选题库
汽车加气站操作工题库中题目及答案: 单项选择题 1、按压力容器的设计压力分为( )个压力等级。 A. 3 B. 4 C. 5 答案:B 2、缓冲罐的安装位置在天然气压缩机( )。 A. 前 B. 后 C. 中间 答案&#…...
LLVM学习--外部项目
不包含于核心LLVM和Clang存储库的项目需要单独下载。在本章中,我们将介绍各种其他官方LLVM项目,并介绍如何构建和安装它们。仅仅对核心LLVM工具感兴趣的读者可以跳过本章,或者在需要的时候翻阅。 在本章中,我们将介绍以下项目安装…...
AUTOSAR_DoIP_Detailed
AUTOSAR DoIP模块详解 基于AUTOSAR标准的诊断通信协议实现 目录 架构概述通信流程消息格式配置结构详细序列总结1. 架构概述 1.1 模块架构 DoIP模块是AUTOSAR基础软件中负责诊断通信的核心组件。它通过TCP/IP网络实现诊断工具与ECU之间的通信。主要功能包括: 基础功能 基于UD…...
C语言:(大数相加版)数字阶梯求和
题目: 给定a和n,计算aaaaaaa...a(n个a)的和。 输入 测试数据有多组,输入a,n(1<a<9,1<n<100)。 输出 对于每组输入,请输出结果。 分析: 1. 方式和规定:大数相加必然越界…...
Echarts 折线图
功能 每月记录值,当数据大于600画红线,小于300画蓝线,其他在中间值为黑线。鼠标移动上去后,现在数据值。 option {tooltip: {trigger: axis, // 触发类型:坐标轴触发show: true, // 显示提示框formatter: function …...
element-plus中Dropdown下拉菜单组件的使用
1、基本使用 复制下面的代码: <!-- 选择查询类型 --> <el-dropdown trigger"click"><span class"el-dropdown-link"><span style"width:60px;color:#404040">查询类型</span><el-icon class"e…...
Kafka详解——介绍与部署
1. 什么是 Kafka? Kafka 是一个分布式的消息队列系统,最初由 LinkedIn 开发,后来成为 Apache 开源项目。它的主要用途包括实时数据处理、日志收集、数据流管道构建等。Kafka 具备高吞吐量、可扩展性、持久性和容错性,广泛应用于大…...
ngx_http_core_srv_conf_t
定义在 src\http\ngx_http_core_module.h typedef struct {/* array of the ngx_http_server_name_t, "server_name" directive */ngx_array_t server_names;/* server ctx */ngx_http_conf_ctx_t *ctx;u_char *file_…...
4.angular 服务
服务是在controller里面引入的服务: 最好是内部服务在前面,自定义服务在后面 内部服务 $scope $scope.$watch(‘属性名’, function(newVal, oldVal) {}, true) true是深度监听,对象函数等$scope.$apply 触发页面更新,里面传入回调函数,比如说之前那个…...
[动手学习深度学习]26. 网络中的网络 NiN
前面的LeNet、AlexNet、VGG在设计上的共同之处在于:先以卷积层构成的模块充分抽取空间特征,再以全连接层构成的模块来输出分类结果 其中AlexNet和VGG对LeNet的改进主要在于如何对这两个模块价款(增加通道数)和加深 这一节的NiN提出…...
【设计模式】原型模式
三、原型模式 3.2 原型模式 同工厂模式一样,原型(Prototype) 模式也是一种创建型模式。原型模式通过一个对象 (原型对象)克隆出多个一模一样的对象。实际上,该模式与其说是一种设计模式,不如说是 一种创建对象的方法(对象克隆),尤其是创建给…...
力扣题目汇总 使用贪心算法解决问题
贪心算法是一种通过局部最优解来获得全局最优解的算法。它的核心思想是:在每一步中选择当前看起来最优的解,并希望通过一系列局部最优选择最终得到全局最优解。 121.买卖股票的最佳时机 分析: 在每一天求出当前最优的利润,也就…...
Mac下Ollama安装全攻略:开启本地大模型之旅
文章目录 Mac下Ollama安装全攻略:开启本地大模型之旅一、Ollama 是什么功能特点优势应用场景 二、安装前准备(一)系统要求(二)硬件要求 三、下载安装包(一)官网下载(二)其…...
[HelloCTF]PHPinclude-labs超详细WP-Level 1-FILE协议
源码分析 <?php include("get_flag.php");isset($_GET[wrappers]) ? include("file://".$_GET[wrappers]) : ;highlight_file(__FILE__); ?>第一句 include("get_flag.php");, 使代码包含了 get_flag.php 的内容 大概是生成 Flag 之类的…...
Skia 图形引擎介绍
文章目录 一、Skia 的基本概念1. 定位与作用2. 历史背景 二、Skia 的核心架构1. 模块化设计2. 渲染流程3. 跨平台适配 三、Skia 在 Flutter 中的角色1. 自绘 UI 的核心依赖2. 跨平台一致性3. 性能优化 四、Skia 的性能优势1. 高效的图形处理2. 与原生渲染的对比3. 性能瓶颈 五、…...
构建高可靠NFS存储:自动化挂载保障机制的设计与优势
一、背景与需求场景 在分布式系统或集群架构中,NFS(Network File System)是跨节点共享存储的经典方案。然而,传统/etc/fstab配置的静态挂载方式存在明显缺陷: 服务启动顺序不可控,网络未就绪时挂载失败临…...
Spring Boot对接twilio发送邮件信息
要在Spring Boot应用程序中对接Twilio发送邮件信息,您可以使用Twilio的SendGrid API。以下是一个简单的步骤指南,帮助您完成这一过程: 1. 创建Twilio账户并获取API密钥 注册一个Twilio账户(如果您还没有的话)。在Twi…...
如何创建并保存HTML文件?零基础入门教程
原文:如何创建并保存HTML文件?零基础入门教程 | w3cschool笔记 本文将以Windows系统为例,教你用最简单的记事本创建并保存第一个HTML网页。 📝 第一步:准备工具 文本编辑器:使用系统自带的记事本ÿ…...
vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
1.动画文件.vue <template><div class"dashboard" click"setFullScreen"><div class"warp-box"><el-scrollbar ref"scrollRef" height"100%" scroll"handelScroll"><div class"…...
C#的简单工厂模式、工厂方法模式、抽象工厂模式
工厂模式是一种创建型设计模式,主要将对象的创建和使用分离,使得系统更加灵活和可维护。常见的工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式,以下是 C# 实现的三个案例: 简单工厂模式 简单工厂模式通过一个工厂类来创建…...