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

命令行之巅:Linux Shell编程的至高艺术(中)

文章一览

  • 前言
  • 一、输入/输出及重定向命令
    • 1.1 输入/输出命令
      • 1.1.1 read命令
      • 1.1.2 echo命令
    • 1.2 输入/输出重定向
    • 1.3 重定向深入讲解
    • 1.4 Here Document
      • 1.4.1 /dev/null 文件
  • 二、shell特殊字符和命令语法
    • 2.1 引号
      • 2.1.1 双引号
      • 2.1.2 单引号
      • 2.1.3 倒引号
    • 2.2 注释、管道线和后台命令
    • 2.3 命令执行操作符
    • 2.4 复合命令
  • 三、shell脚本调试
    • 3.1 解决环境设置问题
    • 3.2 解决脚本错误
  • 四、文件包含

前言

在Shell编程中,重定向和特殊字符是非常重要的概念。它们允许我们控制输入和输出,并使我们能够构建复杂的脚本和命令。通过重定向和特殊字符,我们可以将命令的输出保存到文件中,从文件中读取输入,以及将多个命令连接在一起执行。这些功能极大地增强了Shell编程的灵活性和实用性。

重定向是将命令的输入或输出从默认位置改变到指定的位置的过程。在命令行中,我们可以使用特殊字符来指定要进行重定向的位置。例如,使用>字符将命令的输出重定向到文件中。这使得我们可以将命令的结果保存到文件中,而不是在终端上显示出来。类似地,使用<字符可以将文件中的内容重定向为命令的输入。这使得我们可以从文件中读取数据,而不是手动输入。此外,还可以使用>>字符将输出追加到文件中,而不是覆盖原有内容。

本篇文章将会讲解重定向以及一些特殊字符与命令

一、输入/输出及重定向命令

1.1 输入/输出命令

1.1.1 read命令

利用read命令从键盘上读取数据,然后赋给指定的变量。

一般格式: read [-u fd] [-n nchars] [name1 name2…]

变量个数M与输入数据N个数之间的关系:

例:(判断闰年与平年)

#!/bin/bash
#determing if a year is a leap year
echo  "Input a year number"                         #提示输入一个年号
read  year                                                     #读取输入的年号
let  "leap=year%4==0&&year%100!=0||year%400==0"     #计算给定年号是闰年吗?
if [ $leap –eq 0 ]                                            #若leap等于0,则不是闰年
then  echo  "$year is not a leap year. "         #输出不是闰年信息
else  echo  " $year is a leap year. "              #否则,输出闰年信息
fi 

1.1.2 echo命令

显示其后的变量值或者直接显示它后面的字符串。

一般格式: echo [-neE] [arg…]

-e 选项代表不换行

$ echo  -e  "Enter  the  file  name  ->\c" 
Enter  the  file  name  ->$ ▌

这种形式与带“-n”选项的命令行功能相同:

-n 选项代表解释转义符

$ echo  -n  "Enter  the  file  name  ->"
Enter  the  file  name  ->$ ▌

1.2 输入/输出重定向

1.输入重定向符

一般形式是:命令 < 文件名

让命令(或可执行程序)从指定文件中取得输入数据。例如:

\$ score < file1

注意

$ wc -l zhangyu
2 zhangyu
$ wc -l < zhangyu
2

上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。

2.输出重定向符

一般形式是:命令 > 文件名

把命令(或可执行程序)执行的结果输出到指定的文件。例如:

\$ who > abc

3.输出附加定向符

一般形式是: 命令>>文件名

把命令(或可执行程序)的输出附加到指定文件的后面,而该文件原有内容不被破坏。例如:

$ date>> file2

注意:需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

1.3 重定向深入讲解

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
command1 < infile > outfile

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

1.4 Here Document

Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

command << delimiter  document  
delimiter

它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意

结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。

开始的delimiter前后的空格会被忽略掉

wc -l << EOF  欢迎来到  章鱼大数据  www.ipieuvre.com  
EOF  

1.4.1 /dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

command > /dev/null  

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望屏蔽 stdout 和 stderr,可以这样写:

command > /dev/null 2>&1  
sudo apt-get update  > /dev/null 2>&1

二、shell特殊字符和命令语法

2.1 引号

2.1.1 双引号

由双引号括起来的字符(除$、倒引号(`)和转义字符(\)外)均作为普通字符对待。

$ cat  exam9
echo  "current  directory  is  ` pwd ` "      #倒引号表示命令替换
echo  "home  directory  is  $HOME"       #以HOME的值代替$HOME
echo  "file*.?"                                          #其中的字符都作为普通字符出现
echo  "directory  '$HOME ' "                   #单引号仍作为普通字符出现
echo  "Filename  is  No\$\* "                   #其中有转义字符
$ exam9
current  directory  is  /home/ciee/dir1
home  directory  is  /home/ciee
file*.?
directory  '/home/ciee'
Filename  is No$\* 

2.1.2 单引号

由单引号括起来的所有字符都作为普通字符出现。例如:

$ str=' echo  "directory  is  $HOME" '
$ echo  $str
echo  "directory  is  $HOME "

2.1.3 倒引号

用倒引号括起来的字符串被shell解释为命令行。

可以将一个命令的执行结果赋给变量,即命令替换

一般形式是:变量名=`命令表` 例如:dir=`pwd`

另一种形式是:变量名=$(命令表) 例如:dir=$(pwd)

$ users=` who | wc -l `
$ echo  The  number  of  users  is  $users
The  number  of  users  is  3
$ Nuser=`echo  The  number  of  users  is  \` who | wc -l \` `
$ echo  $Nuser
The  number  of  users  is  3

2.2 注释、管道线和后台命令

1.注释

  • shell程序中以“#”开头的正文行表示注释。

  • #! /bin/bash 说明该脚本是用Bourne Again shell编写的,应该调用相应的解释程序予以执行。

2.管道线

$ ls -l $HOME | wc –l

执行时,前一个命令的输出正好是下一个命令的输入。

$ ls | grep m?.c | wc –l

3.后台命令

$ gcc m1.c m2.c -o prog&

$

后台进程的调度优先级都低于前台进程的优先级

2.3 命令执行操作符

1.顺序执行

各条命令之间以分号(;)隔开,从左到右依次执行。例如:

\$ pwd ; who | wc -l ; cd /home/bin

2.逻辑与

一般形式:命令1 && 命令2

先执行命令1,如果成功,才执行命令2;否则,不执行命令2。例如:

\$ cp ex1 ex10 && rm ex1

3.逻辑或

一般形式:命令1 || 命令2

先执行命令1,如果不成功,则执行命令2;否则,不执行命令2。例如:

$ cat abc || pwd

用&&或||可以把多个命令联系起来

2.4 复合命令

1.{ }形式

以{ }括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。成组命令的执行顺序是根据命令出现的先后次序由左至右执行

$ { echo “User Report for date.”;who; }

应注意,左括号“{”后面应有一个空格右括号“}”之前应有一个分号(;)。

花括号也可以包含若干单独占一行的命令,例如:

{  echo  "Report  of  users  for  ` date ` . "
echo
echo  "There  are  ` who | wc -l `  users  logged  in. "
echo
who | sort ; } 

2.( )形式

(echo  "Current  directory  is  ` pwd ` . "
cd  /home/cieeqc ;  ls -l ;
cp  m1  em1 && rm  m1
cat  em1) 

二者执行过程相同,但存在重要区别:{ }成组命令只在本shell内执行命令表,不产生新的进程;而()成组命令在新的子shell内执行,要建立新的子进程。

$ a="current  value "
$ echo  $a
current  value
$ ( a="new  value-1 " ;  echo  $a )
new  value-1                                                 #(子shell内部a的值)
$ echo  $a
current  value                                              # (与前者不同,这是外部a的值)
$ {  a="new  value-2 " ; echo  $a ;  }
new  value-2                                                #(a的新值)
$ echo  $a
new  value-2                                                #(同一进程,a的值也相同)
$ pwd
/home/ciee /dir1
$ (cd  /bin ;  pwd )                                        #(在子shell中将工作目录改为/bin)
/bin
$ pwd
/home/ciee /dir1                                     #(仍是原来的目录,不受上面命令影响)
$ {  cd  /bin ;  pwd ;  }
/bin
$ pwd
/bin                                                              #(同一进程,前后关联)

三、shell脚本调试

3.1 解决环境设置问题

环境设置不对通常包括以下情况:

​ ① 不能直接在其他shell下运行bash脚本。解决的办法是在脚本的第一行写上:#!/bin/bash。

​ ② 在PATH环境变量中没有包括“.”(当前目录)。解决办法是设置PATH:PATH=$PATH:.

​ ③ 脚本文件与已存在命令的名字相同。

3.2 解决脚本错误

基本的错误类型有两种:语法错误逻辑错误

  • 语法错误是编写程序时违反了所用编程语言的规则而造成的。
  • 逻辑错误通常是由于程序的逻辑关系存在问题。对此类问题需要进行程序调试。

调试技巧——设置x标志:

  • 使用set -x命令:设置x标志后,执行下面命令前先显示该行的内容。

  • 使用bash –x命令:在启动shell时,将它设置成跟踪模式。

四、文件包含

Shell和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格  #或  source filename  

相关文章:

命令行之巅:Linux Shell编程的至高艺术(中)

文章一览 前言一、输入/输出及重定向命令1.1 输入/输出命令1.1.1 read命令1.1.2 echo命令 1.2 输入/输出重定向1.3 重定向深入讲解1.4 Here Document1.4.1 /dev/null 文件 二、shell特殊字符和命令语法2.1 引号2.1.1 双引号2.1.2 单引号2.1.3 倒引号 2.2 注释、管道线和后台命令…...

利用Gurobi追溯模型不可行原因的四种方案及详细案例

文章目录 1. 引言2. 追溯不可行集的四种方法2.1 通过约束增减进行判断2.2 通过computeIIS函数获得冲突集2.3 利用 feasRelaxS() 或 feasRelax() 函数辅助排查2.4 利用 IIS Force 属性1. 引言 模型不可行是一个让工程师头疼的问题,对于复杂模型而言,导致模型不可行的原因可能…...

「matplotlib」绘制图线和数据点的样式风格和颜色表大全

绘制图线和数据点的样式风格和颜色表大全 显示图例 legend() 属性 linestyle 属性 marker 属性color 1、legend() 显示坐标轴中图线的对应标注的显示位置plt.legend(loc) locloc codebest &#xff08;default&#xff09;0upper right1upper left2lower left3lower rig…...

【基础还得练】 KKT 条件

优秀教程-真正理解拉格朗日乘子法和 KKT 条件&#xff1a; link优秀教程-最优化(6)&#xff1a;一般约束优化问题的最优性理论&#xff1a; link KKT条件&#xff08;Karush-Kuhn-Tucker条件&#xff09;是非线性规划中的一组必要条件&#xff0c;在某些情况下也是最优解的充分…...

Node.JS 版本管理工具 Fnm 安装及配置(Windows)

安装流程可参考&#xff1a;fnm 安装及配置(Windows)_fnm安装-CSDN博客 然后就是在git bash如何生效 在 Git Bash 中使用 fnm 需要确保你正确设置了环境变量。你可以按照以下步骤进行配置&#xff1a; 1. **打开 Git Bash**&#xff1a; 启动 Git Bash。 2. **编辑 .bas…...

STM32-笔记11-手写带操作系统的延时函数

1、为什么带操作系统的延时函数&#xff0c;和笔记10上的延时函数不能使用同一种&#xff1f; 因为笔记10的延时函数在每次调用的时候&#xff0c;会一直开关定时器&#xff0c;而在FreeRTOS操作系统中&#xff0c;SysTick定时器当作时基使用。 时基是一个时间显示的基本单位。…...

CCNP_SEC_ASA 第六天作业

实验需求&#xff1a; 为保障内部用户能够访问Internet&#xff0c;请把10.1.1.0/24网络动态转换到外部地址池202.100.1.100-202.100.1.200&#xff0c;如果地址池耗尽后&#xff0c;PAT到Outside接口 提示&#xff1a;需要看到如下输出信息 Inside#telnet 202.100.1.1 Trying …...

Python小括号( )、中括号[ ]和大括号{}代表什么

python语言最常见的括号有三种&#xff0c;分别是&#xff1a;小括号( )、中括号[ ]和大括号也叫做花括号{ }&#xff0c;分别用来代表不同的python基本内置数据类型。 小括号&#xff08;&#xff09;&#xff1a;struct结构体&#xff0c;但不能改值 python中的小括号( )&am…...

electron node-api addon开发

解决方案入口 拷贝日志以及json等第三方源码 增加包含目录 编写接口 默认模板已经有一个回调函数了 照葫芦画瓢就行 其中几个重要的点要注意 1.参数传入 比如如下的例子&#xff1a; 头文件定义&#xff1a; public:下增加 Napi::Value StartAnswer (const Napi::Callb…...

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…...

uniapp中wx.getFuzzyLocation报错如何解决

一、用wx.getLocation接口审核不通过 用uniapp开发小程序时难免需要获取当前地理位置。 代码如下&#xff1a; uni.getLocation({type: wgs84,success: function (res) {console.log(当前位置的经度&#xff1a; res.longitude);console.log(当前位置的纬度&#xff1a; r…...

Peter Lax线性代数教材:Linear Algebra and Its Applications 2nd Ed

这本线性代数教材&#xff0c;印象很深刻&#xff0c;记得是高中时期自学线性代数的时候看过。这本书跟Gilbert Strang的教材MIT线性代数教材&#xff1a;Linear Algebra and Its Applications相比&#xff0c;内容没这么紧凑&#xff0c;而且表述也更加代数风格&#xff0c;很…...

vue3封装而成的APP ,在版本更新后,页面显示空白

一、问题展示 更新之后页面空白&#xff0c;打不开 &#xff0c;主要是由于缓存造成的 二、解决办法 1、随机数代码实现 使用随机数来动态的生成静态资源目录名可以避免浏览器缓存&#xff0c;但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大&#xff0c;可…...

技术栈整理

java系列: javaSE, javaEE&#xff0c;jdk8&#xff0c;jdk17&#xff0c;jdk21 springframework(4, 5, 6) springboot(2, 3) mybatis mybatisplus hibernate springjpa&#xff0c;springjdbc springmvc, springwebflux&#xff0c;structs springsecurity dubbo zookeeper s…...

初始c语言第一个c语言项目

第一个c语言项目 //c语言中一定要有main函数 //主函数//printf是一个库函数 //专门用来打印数据//std 标准 //i-input //o-output // #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//c语言规定main函数是程序的入口 //标准的主函数的写法 int main() {printf(&qu…...

CSS实现无限滚动的列表

CSS本身不能实现无限滚动的列表&#xff0c;无限滚动通常需要结合HTML、CSS和JavaScript来完成。以下是一个简单的实现无限滚动的列表的示例&#xff0c;它使用了JavaScript来动态加载和展示内容。 <!DOCTYPE html> <html lang"en"> <head> <me…...

【ES6复习笔记】Spread 扩展运算符(8)

在现代前端开发中&#xff0c;JavaScript 的扩展运算符&#xff08;Spread Operator&#xff09;是一个非常有用的特性&#xff0c;它允许你将数组或对象展开&#xff0c;以便在函数调用、数组拼接、对象复制等场景中更方便地处理数据。扩展运算符&#xff08;spread&#xff0…...

【Rust自学】7.3. use关键字 Pt.1:use的使用与as关键字

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.3.1. use的作用 use的作用是将路径导入到当前作用域内。而引入的内容仍然是遵守私有性原则&#xff0c;也就是只有公共的部分引入进来才…...

Vscode + gdbserver远程调试开发板指南:

本章目录 步骤环境准备网络配置vscode配置步骤 (全图示例)开发板配置开始调试注意: 每次断开之后&#xff0c;开发板都需要重新启动gdbserver才可调试。 参考链接: 步骤 环境准备 将交叉编译链路径加入$PATH变量&#xff1a;确保系统能够找到所需的工具。 export PATH$PATH:/p…...

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…...

shardingsphere分库分表项目实践5-自己用java写一个sql解析器+完整项目源码

前1节我们介绍了 shardingsphere 分表分库的sql解析与重写&#xff1a; shardingsphere分库分表项目实践4-sql解析&重写-CSDN博客 那么shardingsphere sql 解析底层究竟是怎么实现的呢&#xff0c;其实它直接用了著名的开源软件 antlr . antlr 介绍&#xff1a; ANTLR&a…...

【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.2.1. 路径的简介 在Rust里&#xff0c;如果想要找到模块里的某个东西&#xff0c;就必须知道并使用它的路径。Rust中的路径就跟文件系统…...

ubuntu虚拟机中搭建python开发环境

1.Anaconda安装 1&#xff09;Anaconda下载 清华大学开源软件镜像站下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 官网&#xff1a;https://www.anaconda.com/distribution/ 2&#xff09;运行 .sh 文件 bash Anaconda3-5.2.0-Linux-x86_…...

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口&#xff0c;同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能&#xff1a; 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…...

三相电的相电压、线电压、额定值、有效值,变比,零序电压,零序电流,三相三线制的三角形连接,三相四线制的星形连接

在二次设备配置中经常有根电压系统相关的名词&#xff0c;本身不是学电气的&#xff0c;有些名词经常查了忘&#xff0c;后续工作所有遇到跟电气相关的知识总结在此帖&#xff0c;便于后续直接查看&#xff0c;避免每次都要重新查、重新梳理。 相电压和线电压的关系是根号3倍&a…...

基于 Slf4j 和 AOP 的自动化方法执行时间日志记录方案

前言 其实这个需求很简单&#xff0c;但是这个需求又是项目中必不可少的&#xff0c;尤其对于性能调优这块&#xff0c;但是使用哪种方式更加方便呢&#xff0c;这就是本篇博文需要讨论的重点 系统时间 可以通过 System.currentTimeMillis() 或 System.nanoTime() 来实现。 …...

C语言-数据结构-树

目录 一,树 1,基本术语: 2,树的性质: 3,树的遍历: 4,森林的遍历: 5,树和二叉树的转换: 6,二叉树和森林的转化: 7,树的存储: 1,双亲表示法 2、孩子链存储结构 3、孩子兄弟链存储结构 二,二叉树: 1,二叉树的性质: 2,二叉树的遍历: 3,二叉树的存储结构: 顺序存储:…...

探究音频丢字位置和丢字时间对pesq分数的影响

丢字的本质 丢字的本质是在一段音频中一小段数据变为0 丢字对主观感受的影响 1. 丢字位置 丢字的位置对感知效果有很大影响。如果丢字发生在音频信号的静音部分或低能量部分&#xff0c;感知可能不明显&#xff1b;而如果丢字发生在高能量部分或关键音素上&#xff0c;感知…...

【Linux】flock 文件级别的锁定

flock 是 Linux/Unix 系统中的一个命令&#xff0c;用于实现文件级别的锁定。它允许你在多个进程之间共享对文件的访问&#xff0c;但确保在同一时间只有一个进程可以访问文件&#xff0c;避免竞态条件&#xff08;race conditions&#xff09;和数据不一致问题。 flock 的基本…...

每天40分玩转Django:Django部署概述

一、Django部署概述 在开发阶段,我们通常使用Django内置的轻量级开发服务器runserver。但在生产环境中,为了应对大量并发请求,需要使用高性能的WSGI服务器,如Gunicorn、uWSGI等。同时还要配置Nginx等Web服务器作为反向代理,实现负载均衡、静态文件处理等。下面是Django部署的整…...

【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)

出这篇文章的主要一个原因就是ai回答的性能差异和实际测试完全不同&#xff0c;比如说是先获取构造函数再构造比Activator.CreateInstance(type)快&#xff0c;实际却相反 对测试结果的评价基于5.0&#xff0c;因为找不到unity6确切使用的net版本&#xff0c;根据c#9推测是net5…...

防抖和节流的方法详解和CSS文本溢出小知识

1.防抖 防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时 场景:搜索框输入发请求,一些拖拽盒子,或者滚动事件 防抖的实现:利用间歇函数 const timer =setTimeout(callback函数,间隔时间) //执行完会返回自身的这个定时器的编号//事件所触发的函…...

深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐

Maven 和 Gradle 是 Java 项目中最常用的构建工具。它们各有优势&#xff0c;适用于不同的场景。本文将对两者进行详细的对比&#xff0c;并推荐一些常用的 Maven 和 Gradle 仓库&#xff0c;帮助开发者高效管理依赖。 一、Maven 和 Gradle 的使用比较 1.1 基本介绍 Maven 基…...

CSS---实现盒元素div内input/textarea的focus状态时给父元素加属性!

注意兼容性&#xff0c;低版本浏览器无效 要实现当 textarea 文本框获得焦点时&#xff0c;自动给其父元素添加类名或样式&#xff0c;您可以使用 CSS 的 :focus-within 伪类选择器。这个选择器会在元素本身或其任何子元素获得焦点时应用样式。 示例代码 假设您有以下 HTML 结…...

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域&#xff0c;追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证&#xff0c;成为能够帮助企业降低安装成本&#xff0c;提高设备性能的创新解决方案。 【全球认证&#xff0c;品质保障】ATV320 系列秉持施耐德…...

Dynamo:Amazon 的高可用键值仓储

大家觉得有意义和帮助记得及时关注和点赞!!! Dynamo 是 Amazon 的高可用分布式键值存储&#xff08;key/value storage&#xff09;系统。这篇论文发表 的时候&#xff08;2007&#xff09;它还只是一个内部服务&#xff0c;现在&#xff08;改名为 DynamoDB&#xff09;已经发…...

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…...

离散数学 群(半群,群,交换群,循环群,对称群,置换群,置换,交代群,轮换)详细,复习笔记

半群: 设G是一个非空集合&#xff0c;若为G上的二元代数运算&#xff0c;且满足结合律&#xff0c;则称该代数系统(G,)为半群 性质:非空,封闭,结合律 独异点: 含有单位元的半裙 练习题&#xff1a; 例:设S是一个非空集合&#xff0c;p(S)是S的幂集&#xff0c;∩和U是p(S…...

Android Java 版本的 MSAA OpenGL ES 多重采样

最近多次被小伙伴问到 OpenGL 多重采样&#xff0c;其实前面文章里多次讲过了&#xff0c;就是构建2个缓冲区&#xff0c;多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...

学习笔记之初识HALCON

目录 一、概要 二、数据结构 1、图像Image 2、Region区域 3、XLD 三、图像预处理 1、图像的变换与校正 2、图像增强 四、图像的形态学处理 1、边界提取 2、孔洞填充 3、骨架 五、图像金字塔 六、区域分割 1、区域生长 2、区域分裂与合并 七、边缘检测 1、Pre…...

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言&#xff1a;在现代嵌入式硬件设计中&#xff0c;开关元件作为电路中的重要组成部分&#xff0c;起着至关重要的作用。三种主要的开关元件——IGBT&#xff08;绝缘栅双极型晶体管&#xff09;、MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09;和三极管&#…...

【Rust自学】7.1. Package、Crate和定义Module

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.1.1. Rust的代码组织 代码组织主要包括&#xff1a; 那些细节可以对外暴露&#xff0c;而哪些细节是私有的在作用域内哪些名称有效… …...

【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。

起因&#xff1a; pyinstaller加上 --icon 参数打包时报错。 命令如下&#xff1a; 解决&#xff1a; 关闭 Windows 的病毒防护即可&#xff0c;步骤如下。 点屏幕右下角通知栏&#xff0c;进入“病毒和威胁防护”&#xff1a; 打开&#xff1a; 关闭实时保护&#xff08…...

广东粤万润与时序数据库TDengine携手打造智慧酒店新未来:数据驱动智能化转型

在智能化转型浪潮席卷全球的当下&#xff0c;智慧酒店行业已然成为推进智能生活应用的先锋领域。从智能照明到环境监测&#xff0c;从安防系统到沉浸式影音娱乐&#xff0c;智慧酒店通过技术赋能为用户提供了更加舒适、高效且个性化的服务体验。然而&#xff0c;随着设备的增多…...

基于云计算的分布式文件存储系统设计与实现

基于云计算的分布式文件存储系统设计与实现 第一章 绪论 1.1 研究背景及意义 随着互联网技术的飞速发展&#xff0c;云计算作为一种新兴的计算模式&#xff0c;以其弹性伸缩、按需分配和成本效益高等特点&#xff0c;逐渐成为信息技术领域的研究热点。它为大数据处理、高性能…...

基于顺序表实现队列循环队列的处理

文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列&#xff08;校招难度&#xff09; 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源&#xff1a; 我们的这个队列里面是有9个位置的&#xff0c;我们知道这个队列…...

leecode377.组合总和IV

本题其实是多重背包问题&#xff0c;对于价值和重量都是nums[i]的的物品&#xff0c;求装满这个容量为4的背包共有多少种排列方式 如果是组合问题&#xff0c;那么遍历顺序是先物品后背包&#xff0c;这样能保证物品按从小到大顺序依次放置&#xff0c;对于实例1求出来为4&…...

变量与数据类型 - 整型、浮点型、字符型等

引言 在编程中&#xff0c;变量和数据类型是基础中的基础。理解它们如何工作以及如何正确使用它们对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的几种基本数据类型&#xff1a;整型、浮点型、字符型等&#xff0c;并通过实例帮助读者更好地理解和掌握这些概念。 一…...

selenium学习笔记(二)

文章目录 前言设计模式POMPOM概念POM优势POM设计原则POM的实现 selenium的常用操作处理动态元素截图操作勾选复选框多层框架/窗口定位操作下拉框上传文件操作处理弹窗切换窗口拖拽操作 如何处理浏览器驱动更新导致的问题selenium与网站监控监听网页内容变化监控网络请求 seleni…...

vue和uniapp中,点击按钮 传递当前item对象,并从selectData数组中删除该条item数据

在 Vue 中,可以通过点击按钮传递 item 对象,并从 selectData 数组中删除该条数据。可以使用 Array.prototype.filter() 方法来实现这一点。以下是一个示例: 说明 数据结构:selectData 是一个包含多个对象的数组,每个对象都有 id 和 name 属性。渲染列表:使用 v-for 指令…...