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

Shell编程入门--概念、特性、bash配置文件

目录

  • 一、Shell概念
    • 1.定义
    • 2.分类和使用场景
      • 2.1.分类和切换
      • 2.2.使用场景
    • 3.特性
      • 3.1.文件描述符与输出重定向
      • 3.2.历史命令---history
      • 3.3.别名 --alias
      • 3.4.命令排序执行
      • 3.5.部分快捷键
      • 3.6.通配符置换
    • 4.脚本规范
    • 5.脚本运行方式
      • 5.1.bash脚本执行
      • 5.2.bash脚本测试
  • 二、bash配置文件
    • 1.全局配置文件
    • 2.个人配置文件

一、Shell概念

1.定义

  • 程序 语言 编程
  • 语言:自然语言(汉语 英语)、计算机语言(c语言、c++、java、php、python、go、shell)
  • 编译型语言:c、c++、java
  • 解释型语言:php、python、bash(shell)

编译型语言:编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。像C/C++等都是编译型语言。
解释型语言:源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript/Shell等都是解释型语言

c 编译型执行代码需要编译成cpu能认识的二进制码 x86指令集
java 编译型执行编译–>字节码,cpu不能直接运行,只能被Java虚拟机执行
shell 解释型语言执行 慢

编译型语言的执行方式
在这里插入图片描述
解释型语言的执行方式
在这里插入图片描述
Shell定义

Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语言可以编写功能很强、代码简短的程序。
shell是外壳的意思,就是系统的外壳,我们可以通过shell的命令来控制和操作操作系统,比如linux中的shell命令就包括ls、cd、pwd等等,总结来说shell就是一个命令解释器,他通过接收用户输入的shell命令来启动、停止程序的运行或者对计算机进行控制。

2.分类和使用场景

2.1.分类和切换

[root@localhost ~]# cat /etc/shells    //查看所有shell
/bin/sh
/bin/bash    //默认的shell
/usr/bin/sh    //centos中脚本使用的默认shell
/usr/bin/bash[root@localhost ~]# echo $SHELL    //查看当前正在使用的shell
/bin/bash[root@localhost ~]# vim /etc/passwd  //编辑登录shell

2.2.使用场景

Shell 能做什么?

  1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)—初始化脚本
  2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)—一键安装la/nmp环境,通过脚本自动上线代码
  3. 应用管理程序 (KVM)—通过脚本批量创建虚拟机
  4. 日志分析处理程序(PV, UV, 200, !200,grep/awk/sed)
  5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
  6. 自动化信息采集及监控程序(收集系统/应用状态信息,CPU、Mem、Disk、Net、TCP Status、Apache、MySQL)
  7. 配合Zabbix信息采集(收集系统/应用状态信息,CPU、Mem、Disk、Net、Apache、MySQL)
  8. Shell可以做任何运维的事情(一切取决于业务需求)

3.特性

3.1.文件描述符与输出重定向

在 shell程序中,最常使用的FD (file descriptor) 大概有三个,分别是:
  0: Standard Input (STDIN)
  1: Standard Output (STDOUT)
  2: Standard Error Output (STDERR)
在标准情况下, 这些FD分别跟如下设备关联:
  stdin(0): keyboard 键盘输入,并返回在前端
  stdout(1): monitor 正确返回值 输出到前端
  stderr(2): monitor 错误返回值 输出到前端

将程序的标准输出(stdout)和标准错误(stderr)一起重定向到一个文件(该用法最常用):&> a.txt
将标准输出(stdout)重定向到标准错误(stderr),用的较少(了解即可):1 >&2
将标准错误(stderr)重定向到标准输出(stdout),用的较少(了解即可):2 >&1
一般来说, “1>” 通常可以省略成 “>”

1.例子,当前目录下只有a.txt,没有b.txt
[root@localhost ~]# touch a.txt
[root@localhost ~]# ls a.txt b.txt  >file.out  2>&1
[root@localhost ~]# cat file.out 
ls: cannot access b.txt: No such file or directory
a.txt2.或者也可以:
[root@localhost ~]# ls a.txt b.txt &>cat.txt
[root@localhost ~]# cat cat.txt
ls: 无法访问b.tx: 没有那个文件或目录
a.txt3.通过cat的方式将内容写入到文件中
[root@localhost ~]# cat >> b.txt <<eof
> ni hao a haha
> eof
[root@localhost ~]# cat b.txt 
ni hao a haha//注:这里也可以使用EOF需要成对使用即可!

3.2.历史命令—history

上下健
! 关键字
! 历史命令行号
!! 执行上一条命令
!$ 上一条命令的最后一个参数
esc . 上一条命令的最后一个参数
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令

3.3.别名 --alias

[root@localhost ~]# alias    //查看别名
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'设置别名 
1.临时设置
[root@localhost ~]# aa=88    
[root@localhost ~]# echo $aa
882.永久设置
[root@localhost ~]# vim /root/.bashrc
aa=88
[root@localhost ~]# source /root/.bashrc  //让文件生效

3.4.命令排序执行

&& 逻辑与,前面执行成功,后面才执行。前面命令执行失败,后面命令也不执行
|| 逻辑或,前面执行失败,后面执行,前面命令执行成功,后面不执行。
; 从左往右按顺序执行,不管前面执行成功与否,后面都执行

3.5.部分快捷键

Ctrl+a 切换到命令行开始(跟home一样,但是home在某些unix环境下无法使用)
Ctrl+u 清除剪切光标之前的内容
Ctrl+k 清除剪切光标之后的内容
ctrl+y 粘贴刚才所删除的字符
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令
Ctrl+l 清屏
Ctrl+c 终止
Ctrl+e 切换到命令行末尾

3.6.通配符置换

在 Shell命令中,通常会使用通配符表达式来匹配一些文件
*    ?    []    {}

字符含义实例
*匹配 0 或多个字符a*b a与b之间可以有任意长度的任意字符,也可以一个也没有, 如aabcb, axyzb, a012b, ab
?匹配任意一个字符a?b a与b之间必须也只能有一个字符,可以是任意字符, 如aab, abb, acb, a0b
[list]匹配 list 中的任意单一字符a[xyz]b a与b之间必须也只能有一个字符,但只能是 x 或 y 或 z, 如: axb, ayb, azb
[!list]匹配 除list 中的任意单一字符a[!0-9]b a与b之间必须也只能有一个字符,但不能是阿拉伯数字, 如axb, aab, a-b
[c1-c2]匹配 c1-c2 中的任意单一字符[0-9] [a-z] a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b
{string1,string2,…}匹配 sring1 或 string2 (或更多)其一字符串a{abc,xyz,123}b a与b之间,只能是abc或xyz或123这三个字符串之一
[root@localhost tmp]# rm -rf *
[root@localhost tmp]# touch aabcb axyzb a012b ab acb
[root@localhost tmp]# ls
a012b  aabcb  ab  acb  axyzb
[root@localhost tmp]# ls a*b
a012b  aabcb  ab  acb  axyzb
[root@localhost tmp]# ls a?b
acb[root@localhost tmp]# rm -rf *
[root@localhost tmp]# touch axb ayb azb axyb
[root@localhost tmp]# ls
axb  axyb  ayb  azb
[root@localhost tmp]# ls a[xy]b
axb  ayb
[root@localhost tmp]# ls a[!xy]b
azb
[root@localhost tmp]# ls a[!x]b
ayb  azb[root@localhost tmp]# rm -rf *
[root@localhost tmp]# touch a0b a1b a9b
[root@localhost tmp]# ls a[0-9]b
a0b  a1b  a9b[root@localhost tmp]# rm -rf *
[root@localhost tmp]# touch aabcb axyzb a012b ab
[root@localhost tmp]# ls a{abc}b        //a{abc}b被当作文件名
ls: cannot access a{abc}b: No such file or directory
[root@localhost tmp]# ls a{abc,}b
aabcb  ab
[root@localhost tmp]# ls a{abc,xyz}b
aabcb  axyzb
[root@localhost tmp]# ls a{abc,xyz,012}b
a012b  aabcb  axyzb
//拓展
[root@localhost tmp]# ls a[0-9a-z][0-9a-z][0-9a-z]b
a012b  aabcb  axyzb

4.脚本规范

[root@localhost ~]# vim helloworld.sh   //.sh代表这个文件是个shell脚本,拓展名后缀,如果省略.sh则不易判断该文件是否为shell脚本
1. #!/usr/bin/env bash        //shebang蛇棒, 解释器, 翻译 
2. #
3. # Author: soso666
4. # Email: soso666@163.com       //一些注释,可以解释一下脚本作用
5. # Github: https:github.com/soso666
6. # Date: 2019/12/24
7. printf "hello world"//功能说明:打印hello world[root@localhost ~]# sh helloworld.sh 
hello world

5.脚本运行方式

5.1.bash脚本执行

[root@localhost ~]# vim /opt/test/script/test.sh
#!/bin/bash
# 获取主机基本信息
time=`date +%F-%T`              #等同于 $(date +%F-%T)
#ifconfig命令需要安装net-tools工具包
ip=`ifconfig |grep broadcast|awk '{print $2}'`
echo "现在的时间是:" $time
echo "当前的用户是:" $USER
echo "当前的用户标识:" $UID
echo "当前的主机名称是:" $HOSTNAME
echo "当前可用网卡IP是:" $ip[root@localhost ~]# cd /opt/test/script/

1.source 文件名
使用当前shell(父shell)执行 比如cd /tmp会改变当前shell环境,但是其他的方式不会

[root@localhost script]# source test.sh
现在的时间是: 2023-09-07-19:52:54
当前的用户是: root
当前的用户标识: 0
当前的主机名称是: localhost.localdomain
当前可用网卡IP是: 192.168.221.136

2.bash或者sh 文件名

[root@localhost script]# bash test.sh
现在的时间是: 2023-09-07-19:53:03
当前的用户是: root
当前的用户标识: 0
当前的主机名称是: localhost.localdomain
当前可用网卡IP是: 192.168.221.136[root@localhost script]# sh test.sh
现在的时间是: 2023-09-07-19:53:09
当前的用户是: root
当前的用户标识: 0
当前的主机名称是: localhost.localdomain
当前可用网卡IP是: 192.168.221.136

3.相对路径或者绝对路径
需要提前授权

[root@localhost script]# ./test.sh
-bash: ./test.sh: 权限不够
[root@localhost script]# chmod +x ./test.sh[root@localhost script]# ./test.sh
现在的时间是: 2023-09-07-19:56:25
当前的用户是: root
当前的用户标识: 0
当前的主机名称是: localhost.localdomain
当前可用网卡IP是: 192.168.221.136[root@localhost script]# /opt/test/script/test.sh
现在的时间是: 2023-09-07-19:56:36
当前的用户是: root
当前的用户标识: 0
当前的主机名称是: localhost.localdomain
当前可用网卡IP是: 192.168.221.136

5.2.bash脚本测试

1.这将执行该脚本并显示所有变量的值

[root@localhost ~]# sh -x /root/helloworld.sh
+ printf 'hello world'
hello world

2.不执行脚本只是检查语法模式,将返回所有错误语法

[root@localhost ~]# sh -n /root/helloworld.sh

3.执行脚本前把脚本内容显示在屏幕上

[root@localhost ~]# sh -v /root/helloworld.sh
#!/usr/bin/env bash
#
# Author: soso666
# Email: soso666@163.com
# Github: https:github.com/soso666
# Date: 2019/12/24
printf "hello world"
hello world

二、bash配置文件

1.全局配置文件

/etc/bashrc、/etc/profile、/etc/profile.d/*.sh

如果修改/etc/profile文件修改出错,导致无法敲系统命令,例如:ls,怎么解决呢?
在命令行中输入
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
然后将该命令【追加】到/etc/profile文件中,修改完后
source /etc/profile

2.个人配置文件

~/.bash_profile、~/.bashrc

profile类的文件:设定环境变量,运行命令或脚本,用户在登录的时候会自动生效
bashrc类的文件:定义命令别名

用户登录时加载bash配置文件的过程:
登录式shell加载配置文件过程:先个人,再公共;先局部,再全局
~/.bash_profile --> ~/.bashrc --> /etc/bashrc —> /etc/profile --> /etc/profile.d/*.sh
这里的优先级是影响范围最小的优先级最高

非登录式shell加载配置文件过程
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

下面的文件为系统的每个用户设置环境信息Shell设置文件:
/etc/profile(系统级)启动时执行
        这是系统最主要的shell设置文件,也是用户登陆时系统最先检查的文件,有关重要的【环境变量】都定义在此,其中包括 PATH,USER,MAIL,HOSTNAME,HISTSIZE,INPUTRC等。而在文件的最后,它会检查并执行/etc/profile.d/*.sh的脚本。
~/.bash_login(用户级)登录时执行,默认不存在
        如果~/.bash_profile文件不存在,则系统会转而读取.bash_login这个文件内容。这是用户的登陆文件,在每次用户登陆系统时,bash都会读此内容,所以通常都会将登陆后必须执行的命令放在这个文件中。
~/.bash_logout 离开时执行如果想在注销shell前执行一些工作,都可以在此文件中设置。
例如:vi ~.bash_logout
         clear #仅执行一个clear命令在你注销的时候
~/.bash_history(用户级) 这个文件会记录用户先前使用的历史命令。

相关文章:

Shell编程入门--概念、特性、bash配置文件

目录 一、Shell概念1.定义2.分类和使用场景2.1.分类和切换2.2.使用场景 3.特性3.1.文件描述符与输出重定向3.2.历史命令---history3.3.别名 --alias3.4.命令排序执行3.5.部分快捷键3.6.通配符置换 4.脚本规范5.脚本运行方式5.1.bash脚本执行5.2.bash脚本测试 二、bash配置文件1…...

读书笔记:彼得·德鲁克《认识管理》第14章 工作、做工与员工

一、章节内容概述 虽然工作的历史与人类一样久远&#xff0c;但对工作展开系统研究不过是近百年之内的事&#xff0c;并且“做工”&#xff0c;也就是人从事工作&#xff0c;迄今为止仍很少受到 系统关注。然而我们知道&#xff0c;工作和做工不同&#xff0c;工作是客观的“事…...

diffusers库中stable Diffusion模块的解析

diffusers库中stable Diffusion模块的解析 diffusers中&#xff0c;stable Diffusion v1.5主要由以下几个部分组成 Out[3]: dict_keys([vae, text_encoder, tokenizer, unet, scheduler, safety_checker, feature_extractor])下面给出具体的结构说明。 “text_encoder block…...

智慧城市照明为城市节能降耗提供支持继电器开关钡铼S270

智慧城市照明&#xff1a;为城市节能降耗提供支持——以钡铼技术S270继电器开关为例 随着城市化进程的加速&#xff0c;城市照明系统的需求也日益增长。与此同时&#xff0c;能源消耗和环境污染问题日益严重&#xff0c;使得城市照明的节能减排成为重要议题。智慧城市照明系统…...

固高GTS800控制卡开发数控系统宏程序心得

在对固高GTS800控制卡做数控系统开发时&#xff0c;经过多年的总结与积累&#xff0c;总算是实现了一个数控系统的基本功能。 基本实现宏程序的译码与执行同时执行&#xff0c;虽然不是实时执行&#xff0c;但在充分利用插补缓存区的基础上&#xff0c;实现了相对的实时性。 …...

linux入门---线程池的模拟实现

目录标题 什么是线程池线程的封装准备工作构造函数和析构函数start函数join函数threadname函数完整代码 线程池的实现准备工作构造函数和析构函数push函数pop函数run函数完整的代码 测试代码 什么是线程池 在实现线程池之前我们先了解一下什么是线程池&#xff0c;所谓的池大家…...

jQuery HTML/CSS 参考文档

jQuery HTML/CSS 参考文档 文章目录 应用样式 示例属性方法示例 jQuery HTML/CSS 参考文档 应用样式 addClass( classes ) 方法可用于将定义好的样式表应用于所有匹配的元素上。可以通过空格分隔指定多个类。 示例 以下是一个简单示例&#xff0c;设置了para标签 <p&g…...

QT 布局管理综合实例

通过一个实例基本布局管理&#xff0c;演示QHBoxLayout类、QVBoxLayout类及QGridLayout类效果 本实例共用到四个布局管理器&#xff0c;分别是 LeftLayout、RightLayout、BottomLayout和MainLayout。 在源文件“dialog.cpp”具体代码如下&#xff1a; 运行效果&#xff1a; Se…...

使用 pubsub-js 进行消息发布订阅

npm 包地址 github 包地址 pubsub-js 是一个轻量级的 JavaScript 基于主题的消息订阅发布库 &#xff0c;压缩后小于1b。它具有使用简单、性能高效、支持多平台等优点&#xff0c;可以很好地满足各种需求。 功能特点&#xff1a; 无依赖同步解耦ES3 兼容。pubsub-js 能够在…...

TA Shader基础

渲染管线 概念&#xff1a;GPU绘制物体的时候&#xff0c;标准的&#xff0c;流水线一样的操作 游戏引擎如何绘制物体&#xff1a;CPU提供绘制数据&#xff08;顶点数据&#xff0c;纹理贴图等&#xff09;给GPU&#xff0c;配置渲染管线&#xff08;装载Shader代码到GPU&…...

VScode + opencv(cmake编译) + c++ + win配置教程

1、下载opencv 2、下载CMake 3、下载MinGW 放到一个文件夹中 并解压另外两个文件 4、cmake编译opencv 新建文件夹mingw-build 双击cmake-gui 程序会开始自动生成Makefiles等文件配置&#xff0c;需要耐心等待一段时间。 简单总结下&#xff1a;finish->configuring …...

Vue中的常用指令v-html / v-show / v-if / v-else / v-on / v-bind / v-for / v-model

前言 持续学习总结输出中&#xff0c;Vue中的常用指令v-html / v-show / v-if / v-else / v-on / v-bind / v-for / v-model 概念&#xff1a;指令&#xff08;Directives&#xff09;是Vue提供的带有 v- 前缀 的特殊标签属性。可以提高操作 DOM 的效率。 vue 中的指令按照不…...

ChatGPT 提问技巧

ChatGPT是由 OpenAI 训练的⼀款⼤型语⾔模型&#xff0c;能够和你进⾏任何领域的对话。 它能够⽣成类似于⼈类写作的⽂本。您只需要给出提示或提出问题&#xff0c;它就可以⽣成你想要的东⻄。 在此⻚⾯中&#xff0c;您将找到可与 ChatGPT ⼀起使⽤的各种提示。 只需按照下…...

2023-11-09 LeetCode每日一题(逃离火灾)

2023-11-09每日一题 一、题目编号 2258. 逃离火灾二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid &#xff0c;它表示一个网格图。每个格子为下面 3 个值之一&#xff1a; 0 表示草地。1 表示着火的格子。2 表示一…...

阿里云-maven私服idea访问私服与组件上传

1.进入aliyun制品仓库 2. 点击 生产库-release进入 根据以上步骤修改本地 m2/setting.xml文件 3.pom.xml文件 点击设置获取url 4. idea发布组件...

Ubuntu上的TFTP服务软件

2023年11月11日&#xff0c;周六下午 目录 tftpd-hpa atftpd 配置和启动 tftpd-hpa 这是一个TFTP服务器软件包&#xff0c;提供了一个简单的TFTP服务器。 你可以使用以下命令安装它&#xff1a; sudo apt-get install tftpd-hpaatftpd 这是另一个常用的TFTP服务器软件包…...

jedis、lettuce与redis交互分析

概念梳理&#xff1a; redis是缓存服务器&#xff0c;jedis、lettuce都是Java语言下的redis客户端&#xff0c;用于与redis服务器进行交互。springboot项目中一般使用的是spring data redis&#xff0c;spring data redis依赖与jedis或lettuce&#xff0c;可以进行配置&#x…...

C++算法:矩阵中的最长递增路径

涉及知识点 拓扑排序 题目 给定一个 m x n 整数矩阵 matrix &#xff0c;找出其中 最长递增路径 的长度。 对于每个单元格&#xff0c;你可以往上&#xff0c;下&#xff0c;左&#xff0c;右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外&#xff08;即不允…...

OpenWRT配置SFTP远程文件传输,让数据分享更安全

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xf…...

已解决:rm: 无法删除“/opt/module/zookeeper-3.4.10/zkData/zookeeper_server.pid“: 权限不够

解决&#xff1a; ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Stopping zookeeper ... /opt/module/zookeeper-3.4.10/bin/zkServer.sh: 第 182 行:kill: (4149) - 不允许的操作 rm: 无法删除"/opt/module/zooke…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...