Shell编程规范与变量-01

一、Shell脚本概述

     在一些复杂的 Linux 维护工作中,大量重复性的输入和交互操作不仅费时费力,而且容易出错,而编写一个恰到好处的 Shell 脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。

1.1、Shell的作用

     Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

1.2、编写第一个Shell脚本

     Bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell。Bash 的全称为 BourneAgain Shell,是最受欢迎的开源软件项目之一。本课程中讲述的所有 Shell 操作,均以 Bash为例。

那么,什么是“Shell 脚本”呢?简单地说,只要将平时使用的各种 Linux 命令按顺序保存到一个文本文件中,然后添加可执行权限,这个文件就成为一个 Shell 脚本了。例如,执行以下操作可以创建第一个脚本文件:first.sh。

上述 first.sh 脚本文件中,包括三条命令:cd /boot/、pwd、ls -lh vml*。执行此脚本文件后,输出结果与依次单独执行这三条命令是相同的,从而实现了“批量处理”的自动化过程

脚本执行方式汇总:

①:指定解释器的方式(先打开一个bash,然后执行脚本,运行完再退出到上一级bash)

bash +脚本文件

sh +脚本文件:是bash的软链接

②:直接加载脚本(在当前的bash程序环境下执行)

. +脚本文件

source +脚本文件

③:指定路径方式引用脚本(是一个标准的执行,需要该文件有执行权)

也可以使用“/root/first.sh”

“./first.sh”是因为当前目录下已经有了aa.sh文件

1和3执行方式和得到的结果是一样的

     当然,一个合格的 Shell 脚本程序应该遵循标准的脚本结构,而且能够输出友好的提示信息,更加容易读懂。对于代码较多,结构复杂的脚本,应添加必要的 。改写后的first.sh 脚本内容如下所示。

     上述 first.sh 脚本文件中,第一行“#!/bin/bash”是一行特殊的脚本声明,表示此行以后的语句通过/bin/bash 程序来解释执行;其他以“#”开头的语句表示注释信息;echo 命令用于输出字符串,以使脚本的输出信息更容易读懂。例如,执行改写后的 first.sh 脚本,输出结果如下所示。

     直接通过“./first.sh”的方式执行脚本,要求文件本身具有 x 权限,在某些安全系统中可能无法满足此条件。鉴于此,Linux 操作系统还提供了执行 Shell 脚本的其他方式——指定某个 Shell 来解释脚本语句,或者通过内部命令 source(或点号“.”)来加载文件中的源代码执行。例如,使用“sh first.sh”或“. first.sh”也可以执行 first.sh 脚本中的语句。

     Linux 系统中包括大量的 Shell 脚本文件,在学习 Shell 脚本的过程中可用来作为参考,但应尽量避免直接修改系统内的 Shell 脚本文件,以免导致服务或系统故障

1.3、重定向与管道操作

    由于 Shell 脚本“批量处理”的特殊性,其大部分操作过程以静默方式运行,不需要用户进行干预。因此学会提取、过滤执行信息变得十分重要。本小节主要介绍 Shell 环境中的两个 I/O 操作:重定向和管道。

1、重定向操作

    Linux 系统使用文件来描述各种硬件、设备等资源,如以前学过的硬盘和分区、光盘等设备文件。用户通过操作系统处理信息的过程中,包括以下几类交互设备文件。

① 标准输入(STDIN):默认的设备是键盘,文件编号为 0,命令将从标准输入文件中读取在执行过程中需要的输入数据。

② 标准输出(STDOUT):默认的设备是显示器,文件编号为 1,命令将执行后的输出结果发送到标准输出文件。

③ 标准错误(STDERR):默认的设备是显示器,文件编号为 2,命令将执行期间的各种错误信息发送到标准错误文件。

      标准输入、标准输出和标准错误默认使用键盘和显示器作为关联的设备,与操作系统进行交互,完成最基本的输入、输出操作,即从键盘接收用户输入的各种命令字串、辅助控制信息,并将命令结果输出到屏幕上;如果命令执行出错,也会将错误信息反馈到屏幕上。

      在实际的 Linux 系统维护中,可以改变输入、输出内容的方向,而不使用默认的标准输入、输出设备(键盘和显示器),这种操作称为重定向。

(1)重定向输出

重定向输出指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。重定向输出使用“>”或“>>”操作符号,分别用于覆盖或追加文件。

若重定向输出的目标文件不存在,则会新建该文件,然后将前面命令的输出结果保存到该文件中;若目标文件已经存在,则将输出结果覆盖或追加到文件中。例如,若要将当前主机的 CPU 类型信息(uname -p)保存到 kernel.txt 文件中,而不是直接显示在屏幕上,可以执行以下操作。

当需要保留目标文件原有的内容时,应改用“>>”操作符号,以便追加内容而不是全部覆盖。例如,执行以下操作可以将内核版本信息追加到 kernel.txt 文件中。

(2)重定向输入

重定向输入指的是将命令中接收输入的途径由默认的键盘改为指定的文件,而不是等待从键盘输入。重定向输入使用“操作符。

通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。例如,使用passwd 命令为用户设置密码时,每次都必须根据提示输入两次密码字串,非常烦琐,若改用重定向输入将可以省略交互式的过程,而自动完成密码设置(结合 passwd 命令的“--stdin” 选项来识别标准输入)。

非交互式命令语句可以更方便的在 Shell 脚本中使用,从而大大减少程序被打断的过程, 提高脚本执行的效率。

(3)错误重定向

错误重定向指的是将执行命令过程中出现的错误信息(如选项或参数错误等)保存到指定的文件,而不是直接显示在屏幕上。错误重定向使用“2>”操作符,其中“2”是指错误文件的编号(在使用标准输出、标准输入重定向时,实际上省略了 1、0 编号)。

在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据;对于Shell 脚本,还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁。例如,执行以下操作可以将使用 tar 命令进行备份时出现的错误信息保存到 error.log文件中。

使用“2>”操作符时,会像使用“>”操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,则应改用“2>>”操作符。

当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符“>”“2>”将两类输出信息分别保存到不同的文件,也可以使用“&>”操作符将两类输出信息保存到同一个文件。例如,在编译源码包的自动化脚本中,若要忽略 make、makeinstall 等操作过程信息,则可以将其定向到空文件/dev/null。

2、管道操作

管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。

在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。例如,使用 grep 命令查询使用/bin/bash 作为 Shell 的系统用户名时,会输出符合条件的整行内容,在此基础上可以结合管道操作与 awk 命令做进一步过滤,只输出用户名和登录 Shell 列。

上例中 awk 命令的作用是以冒号“:”作为分隔,输出第 1 个、第 7 个区域的字符串。其中的“-F”部分用来指定分隔符号(未指定时,默认以空格或制表符分隔)。关于 awk 命令的更多用法,在后面的章节中再做详细介绍,本章不做过多讲解。

又如,若要提取根分区(/)的磁盘使用率信息,可以执行以下操作,其中用到了 df、grep、awk 命令和管道操作。

重定向与管道操作是 Shell 环境中十分常用的功能,若能够熟练掌握并灵活运用,将有助于编写代码简洁但功能强大的 Shell 脚本程序。

1.2、Shell变量的作用、类型

   各种 Shell 环境中都使用到了变量的概念。Shell 变量用来存放系统和用户需要使用的 特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使

用变量, Shell 程序能够提供更加灵活的功能,适应性更强。
   常见 Shell 变量的 类型包括自定义变量、环境变量、只读变量、位置变量、预定义变量
本节将分别介绍这四种 Shell 变量的使用。
  1、定义新的变量

   Bash 中的变量操作相对比较简单,不像其他高级编程语言(如 C/C++Java 等)那 么复杂。在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋 给初始值(内容)即可。

   定义变量的基本格式为变量名=变量值等号两边没有空格。变量名称需以字母或下 划线开头,名称中不要包含特殊字符(如+-*/.?%&#)。例如,若要定 义一个名为“Product”的变量(值为 Python)和一个名为“Version”的变量(值为 2.7.13), 可以执行以下操作。

 2、查看和引用变量的值

   通过在变量名称前添加前导符号“$”,可以引用一个变量的值。使用 echo 命令可以查看 变量,可以在一条 echo 命令中同时查看多个变量值。

  

   当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号 “{}” 将其括起来,否
则将无法确定正确的变量名称。对于未定义的变量,将显示为空值。

 3、变量赋值的特殊操作

    在等号“=”后边直接指定变量内容是为变量赋值的最基本方法,除此之外,还有一些特殊的赋值操作,可以更灵活地为变量赋值,以便适用于各种复杂的管理任务。

 (1)双引号(“”)

   双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号 括起来;其他情况下双引号通常可以省略。例如,若要将 Python 2.7.13 赋值给变量 PYTHON,应执行 PYTHON=“Python 2.7.13”操作

   双引号范围内,使用“$”号可以引用其他变量的值(变量引用),从而能够直接调 用现有变量的值来赋给新的变量。例如,执行以下操作可以调用变量 Version 的值,将其赋 给一个新的变量 PyVersion,最终的值为Python 2.7.13”

2)单引号(

   当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来在单

引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待但赋值内容中包
含单引号( )时,需使用 \’ 符号进行转义,以免冲突。

 3)反撇号(`)

    反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括 起来的范围内必须是能够执行的命令行,否则将会出错。例如,若要在一行命令中查找 useradd 命令程序的位置并列出其详细属性,可以执行以下操作。

    上述操作相当于连续执行了两条命令——先通过 which useradd 命令查找出 useradd 命令的程序位置,然后根据查找结果列出文件属性。执行过程中,会用 which useradd 命令的输出结果替换整个反撇号范围。 又如,若要提取 vsftpd 服务的禁止登录用户列表,并将其赋值给变量 DenyList,可以 执行以下操作。

   上述操作相当于连续执行了两条命令——先通过 which useradd 命令查找出 useradd 命令的程序位置,然后根据查找结果列出文件属性。执行过程中,会用 which useradd 命令 的输出结果替换整个反撇号范围。

   又如,若要提取 vsftpd 服务的禁止登录用户列表,并将其赋值给变量 DenyList,可以 执行以下操作。

    需要注意的是,使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用 “$()”来代替反撇号操作,以解决嵌套的问题。例如,若要查询提供 useradd 命令程序的软件 包所安装的配置文件位置,可以执行以下操作(从里到外先后执行替换)。

  4read 命令

   除了上述赋值操作以外,还可以使用 Bash 的内置命令 read 来给变量赋值read 命令 用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入 一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给 最后一个变量)。若指定的变量只有一个,则将整行内容赋值给此变量。

      例如,执行以下操作将会等待用户输入文字,并将输入的内容赋值给变量 ToDir1

   为了使交互式操作的界面更加友好,提高易用性,read 命令可以结合“-p”选项来设置提 示信息,以便告知用户应该输入什么内容等相关事项。例如,若希望提示用户输入备份文件 的存放目录,并将输入的路径信息赋值给变量 ToDir2,可以执行以下操作。

  4、设置变量的作用范围

   默认情况下,新定义的变量只在当前的Shell环境中生效,因此称为局部变量。当进入子进程或新的子Shell环境时,局部变量将无法再使用。例如,直接执行Bash进入一个新的子Shell脚本后,将无法引用父级Shell环境中定义的Product、Version等变量。

   为了使用户定义的变量在所有的子Shell环境中能够继续使用,减少重复设置工作,可以通过内部命令export将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用“$”符号),变量名之间以空格分隔。

      使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义新定义全局变量时就不需要提前进行赋值了。例如,执行以下操作可以直接新建一个名为FQDN的全局变量。

 5.数值变量的运算

    Shell 变量的数值运算多用于脚本程序的过程控制(如循环次数、使用量比较等,后续 章节会介绍)。在 Bash Shell 环境中,只能进行简单的整数运算,不支持小数运算。整数 值的运算主要通过内部命令 expr 进行,基本格式如下所示。需要注意,运算符与变量之间必须有至少一个空格。

    其中,变量 1 、变量 2…… 对应为需要计算的数值变量(需要以 “$” 符号调用),常用的
几种运算符如下所述:
   ① + :加法运算;
   ② - :减法运算;
   ③ \* :乘法运算,注意不能仅使用 “*” 符号,否则将被当成文件通配符;
   ④ / :除法运算;
   ⑤ % :求模运算,又称为取余运算,用来计算数值相除后的余数。
   

  以下操作设置了 X(值为 35)、Y(值为 16)两个变量,并依次演示了变量 X、Y 的 加、减、乘、除、取模运算结果:

   若要将运算结果赋值给其他变量,可以结合命令替换操作(使用反撇号)。例如,计算变量 Y 3 次方,并将结果赋值给变量 Ycube。

2.2 特殊的 Shell 变量

     除了用户自行定义的 Shell 变量以外,在 Linux 系统和 Bash Shell 环境中还有一系列的特殊变量——环境变量、只读变量、位置变量、预定义变量。下面分别进行介绍。

 1.环境变量

    环境变量指的是出于运行需要而由 Linux 系统提前创建的一类变量,主要用于设置用户 的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。环境变量的 值由 Linux 系统自动维护,会随着用户状态的改变而改变。

    使用 env 命令可以查看到当前工作环境下的环境变量,对于常见的一些环境变量应了解其各自的用途。例如,变量 USER 表示用户名称,HOME 表示用户的宿主目录,LANG 表示语言和字符集,PWD 表示当前所在的工作目录,PATH 表示命令搜索路径等。

    PATH 变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序 时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提 示“command not found”。例如,first.sh 脚本位于/root 目录下,若希望能直接通过文件名称 来运行脚本,可以修改 PATH 变量以添加搜索路径,或者将 first.sh 脚本复制到现有搜索路 径中的某个文件夹下。

    在 Linux 系统中,环境变量的全局配置文件为/etc/profile在此文件中定义的变量作用于所有用户。除此之外,每个用户还有自己的独立配置文件(~/.bash_profile)。若要长期 变更或设置某个环境变量,应在上述文件中进行设置。例如,执行以下操作可以将记录的历 史命令条数改为 200 条(默认为 1000 条),只针对 root 用户。

    上述修改只有当 root 用户下次登录时才会生效。若希望立即生效,应手动修改环境变 量,或者可以加载配置文件执行。

2.只读变量

   Shell 变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只 读变量主要用于变量值不允许被修改的情况。例如脚本中定义了一个变量“log_path”用来定 义日志文件的路径,在脚本的执行过程中如果不想被修改,就可以将该变量设置为只读变量。 使用 readonly 命令将变量定义为只读变量,定义之后不能通过再次赋值的方式进行修改。

3.位置变量

     为了在使用 Shell 脚本程序时,方便通过命令行,为程序提供操作参数,Bash 引入了 位置变量的概念。当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符 串参数按照从左到右的顺序依次赋值给位置变量

     位置变量也称为位置参数,使用 $1 $2 $3 $9 表示。例如,当执行命令行 “ls -lh
/boot/” 时,其中第 1 个位置变量为 “-lh” ,以 “$1” 表示;第 2 个位置变量为 “/boot/” ,以 “$2”
示。命令或脚本本身的名称使用 “$0” 表示,虽然 $0 与位置变量的格式相同,但是 $0 属于预
定义变量而不是位置变量。
   
   为了说明位置变量的作用,下面编写一个加法运算的小脚本 adder2num.sh ,用来计算
两个整数的和。需要计算的两个整数在执行脚本时以位置变量的形式提供。

4.预定义变量

   预定义变量是由 Bash 程序预先定义好的一类特殊变量用户只能使用预定义变量,而 不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一 个符号组合表示,较常用的几个预定义变量的含义如下:

   ① $#:表示命令行中位置参数的个数;

   ② $*:表示所有位置参数的内容;

   ③ $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0

值均表示执行出现异常;
   ④ $0 :表示当前执行的脚本或程序的名称;
   ⑤ $!:上一个进程的进程号,父进程;
   ⑥ $$:当前执行该脚本的进程的进程号。
   为了说明预定义变量的作用,下面编写一个备份操作的小脚本,用来打包命令行指定的
多个文件或目录,并输出相关信息。其中,新建的压缩包文件名称中嵌入 UNIX 时间戳(从
1970 1 1 日至今经过的秒数),通过 “date +%s” 命令获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361248.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu上安装Python3

安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip验证查看版本 python3 --version

web渗透-SSRF漏洞及discuz论坛网站测试

一、简介 ssrf(server-side request forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,ssrf是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统&…

excel字符串列的文本合并

excel表有两列,第一列是“姓名”,第二列是“诊断”,有高血压、糖尿病等。我想出一个统计表,统计“姓名”,把某一个姓名的诊断不重复的用、拼接起来,比如“张三”的诊断为“点高血压”、糖尿病。我们可以用T…

适用于轨道交通专用的板卡式网管型工业以太网交换机

是网管型 CompactPCI板卡式冗余环网交换机。前面板带有6个 10/100/1000Base-T(X)M12接口。后面的CPCI接口有 8个10/100/1000Base-T (X) 以太网接口。 是特别为轨道交通行业EN50155标准要求而设计的坚固型交换机。它同时具有以下特性: ● 支持2线以太网距离扩展端口&…

springcloud第4季 springcloud-alibaba之nacos+openfegin+gateway+sentinel熔断限流【经典案例】

一 说明 1.1 架构说明 本案例实现原理: 采用alibaba的nacos,openfegin,sentinel,gateway等组件实现熔断限流。 主要理解sentinel的ResouceSentinel和fallback的区别联系。 ResourceSentinel 主要是页面配置熔断限流规则&#…

试析C#编程语言的特点及功能

行步骤,而不必创建新方法。其声明方法是在实例化委托基础上,加一对花括号以代表执行范围,再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…

【干货】Vue3 组件通信方式详解

前言 毫无疑问,组件通信是Vue中非常重要的技术之一,它的出现能够使我们非常方便的在不同组件之间进行数据的传递,以达到数据交互的效果。所以,学习组件通信技术是非常有必要的,本文将总结Vue中关于组件通信的八种方式…

【博士每天一篇文献-算法】Fearnet Brain-inspired model for incremental learning

阅读时间:2023-12-16 1 介绍 年份:2017 作者:Ronald Kemker,美国太空部队;Christopher Kanan,罗切斯特大学 期刊: arXiv preprint 引用量:520 Kemker R, Kanan C. Fearnet: Brain-…

宠物领养救助管理系带万字文档java项目基于springboot+vue的宠物管理系统java课程设计java毕业设计

文章目录 宠物领养救助管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 宠物领养救助管理系统 一、项目演示 宠物领养救助系统 二、项目介绍 基于springbootv…

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天,WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化,开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构(Browser/Server Architecture)作为一种常见的WEB应用架构…

Chatopera 云服务实现类海尔服务智能客服的功能点比较 | Chatopera

在上一篇文章中,我分享了《智能客服体验分析,使用小程序海尔服务完成电器报修》。如果使用 Chatopera 云服务实现一个类似的应用,如何做呢?借助 Chatopera 云服务 可以实现一个智能客服,那么和现在的海尔服务小程序会有…

WordPress软件下载主题Inpandora

Inpandora(中文名为潘多拉)是一款基于软件下载站定制的WordPress主题,帮助站长使用WordPress快速搭建一个专业的WordPress软件博客。Inpandora这款WordPress主题可以说是因软件而生,从UI设计到后台设置功能,都充分体现…

云计算运维工程师的突发状况处理

云计算运维工程师在应对突发的故障和紧急情况时,需要采取一系列迅速而有效的措施来最小化服务中断的时间并恢复系统的稳定性。 以下是一些关键步骤和策略: 快速响应: 立即识别并确认故障的性质和范围。通知团队成员和相关的利益相关者,确保所有人了解当前情况。故障诊断:…

MD5加密接口

签名算法 app_key和app_secret由对方系统提供 MD5_CALCULATE_HASH_FOR_CHAR(中文加密与JAVA不一致) 代码: *获取传输字段名的ASCII码,根据ASCII码对字段名进行排序SELECT * FROM zthr0051WHERE functionid iv_functionidINTO …

想布局短视频赛道,云微客AI矩阵系统告诉你诀窍

随着人工智能技术的不断发展,越来越多的企业和个人创作者开始意识到智能化的重要性。而现阶段,随着短视频市场的膨胀扩大,批量成片、智能创作、定时发布是当下重要的趋势,企业如果想在短视频赛道分一杯羹,智能化的平台…

首次30米空间分辨率生成中国年度耕地栅格数据1986-2021

中国1986-2021年30米分辨率年度耕地数据集 数据介绍 精确、详细且及时的耕地范围信息对于粮食安全保障和环境可持续性至关重要。然而,由于农业景观的复杂性和足够训练样本的缺乏,在大范围下进行高时空分辨率的耕地动态监测仍然具有挑战性,尤其…

kafka进阶核心原理详解:案例解析(第11天)

系列文章目录 kafka高级(重点) kafka核心概念汇总 kafka的数据位移offset Kafka的基准/压力测试 Kafka的分片副本机制 kafka如何保证数据不丢失 kafka的消息存储及查询机制 生产者数据分发策略 消费者负载均衡机制 kafka的监控工具:kafka-eagle…

台灯学生用哪个牌子最好?五款学生专用台灯大全分享

随着科技的持续进步,电子产品无疑为我们的生活带来了极大的便利,同时也暗藏了不少隐患。其中最令广大家长忧心的便是孩子视力的健康,他们从小就面临着手机和电视等屏幕对孩子视力的潜在威胁。为了应对这一问题,家长们不遗余力地寻…

Python:基于TSFEL库对时间序列进行特征分析

1. TSFEL 时间序列作为主要TSFEL提取方法的输入传递,要么作为先前加载在内存中的数组传递,要么存储在数据集中的文件中。 由于TSFEL可以处理多维时间序列,因此随后应用了一套预处理方法,以确保信号质量足够和时间序列同步&#xf…

Linux上搭建邮件服务

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 Linux上搭建邮件服务 前言电子邮件的工作原理和基本组成部分1. 电子邮件的工作原理2. 电子邮件的…