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.mzph.cn/pingmian/32241.shtml

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

相关文章

PyScada(三)后端应用

PyScada 的后端应用 使用后端 要使用后端,请在浏览器中打开http://127.0.0.1 (将 127.0.0.1 替换为 PyScada 服务器的 IP 或主机名),然后使用安装过程 中定义的管理员帐户登录 (TODO 链接到创建超级用户文档&#xf…

Java基础的重点知识-01

文章目录 开发前言Java语言开发环境入门程序说明常量变量和数据类型数据类型转换运算符方法解析 开发前言 常用DOS命令 Java语言的初学者,学习一些DOS命令,会非常有帮助。DOS是一个早期的操作系统,现在已经被Windows系统取代,对于…

Vue2动态代理无须重启项目解决方案

1、痛点 如果我们需要使用不同的环境地址的时候,就需要使用命令或者手动修改vue.config.js中配置来重新启动项目。当项目项目越来越大的时候,我们需要很长的时间来启动项目,如此反复,极大影响我们开发进度。 2、寻求解决方案 ● v…

Windows安装多个jdk环境(jdk6+jdk8+jdk17)保姆级

Windows安装多个jdk环境(jdk6jdk8jdk17)保姆级 背景:新机安装开发环境发现需要找很多文章,,,,这里一篇文章安装所有环境 文章目录 Windows安装多个jdk环境(jdk6jdk8jdk17&#xff09…

经典游戏案例:植物大战僵尸

学习目标:植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…

Django 条件判断模板标签

1&#xff0c;条件判断模板标签 1. 2 {% if %} 标签 {% if variable %}<!-- 如果 variable 为 True&#xff0c;则渲染此处内容 --> {% endif %} 1. 3 {% if %} 与 {% else %} 组合 {% if variable %}<!-- 如果 variable 为 True&#xff0c;则渲染此处内容 -->…

BFS:解决最短路问题

文章目录 什么是最短路问题&#xff1f;1.迷宫中离入口最近的出口2.最小基因变化3.单词接龙4.为高尔夫比赛砍树总结 什么是最短路问题&#xff1f; 最短路问题是图论中的经典问题&#xff0c;旨在寻找图中两个节点之间的最短路径。常见的最短路算法有多种&#xff0c;这次我们…

【python包安装】手动安装libmr

遇到问题 再导入libmr模块时&#xff0c;导入失败 尝试使用pip install libmr安装&#xff0c;安装失败 查询原因是windows上pip安装找不到库&#xff0c;只能采取手动安装。 解决方法 下载libMR库文件 安装方法可以查看README文档 安装libmr之前需要安装Microsoft C14或…

开启数字新纪元:全球首款开源AI女友,你的私人数字伴侣

在这个数字化飞速发展的时代,人工智能已经不再是科幻小说中的幻想,而是实实在在走进了我们的生活。今天,我们要介绍的,不仅仅是一项技术革新,更是一场关于陪伴的革命——全球首款开源AI女友,DUIX,已经横空出世! 🚀 革命性的开源平台 DUIX,由硅基智能精心打造,不…

高中数学:数列-等差数列、等比数列的和与通项公式的关系

一、等差数列 1、通项公式与求和公式 2、性质 性质1 求和公式比上n&#xff0c;依然是一个等差数列。 性质2 等差数列中&#xff0c;每相邻m项和&#xff0c;构成的数列&#xff0c;依然是等差数列&#xff0c;公差&#xff1a;m2d 二、等比数列 1、通项公式与求和公式 a…

INVS利用gatearray实现post-mask的function ECO

随着现代IC的设计发展&#xff0c;设计的规模和复杂度逐步增加&#xff0c;对于验证完备性的挑战越来越大&#xff0c;加之TO的时间压力&#xff0c;芯片设计通常会出现下列的场景&#xff1a; 芯片回片一次点亮大部分的case都可以顺利通过小部分的功能需要修正 对于重要的特…

基于CentOS Stream 9平台 安装/卸载 Redis7.0.15

已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下&#xff1a; mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…

经典游戏案例:愤怒的小鸟

学习目标&#xff1a;愤怒的小鸟核心玩法 游戏画面 项目结构目录 部分核心代码 using System.Collections; using System.Collections.Generic; using birds; using utils; using UnityEngine;public class GameManager : MonoBehaviour {public static GameManager sInstanc…

【C++】优先队列的使用及模拟实现

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、什么是优先队列 二、优先队列的使用 1. 优先队列的构造 2. 优先队列的基本操作 3. 使用示例 三、优先队列模拟实…

【硬件开发】共模电感

为什么电源无论直流还是交流的输入端都需要一个共模电感 图中L1就是共模电感&#xff0c;长下面这个样子&#xff0c;两侧的匝数&#xff0c;线径和材料都是一模一样的 共模电感的作用是为了抑制共模信号 抑制共模信号工作原理 http://【共模电感是如何抑制共模信号的】https…

【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)

2024-03 Python一级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 下列哪个命令&#xff0c;可以将2024转换成2024 呢&#xff1f;&#xff08; A&#xff09;(2分) A.str(2024) B.int(2024) C.fl…

细说AGV的12种导航方式和原理

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 这十二种导航方式各自具有不同的特点和应用场景&#xff0c;下面我将逐一进行简要介绍&#xff1a; 磁钉导航&#xff1a; 原理&#xf…

Python学习笔记17:进阶篇(六)代码测试

代码测试 代码测试是软件开发过程中的关键环节&#xff0c;旨在确保代码质量、功能正确性以及性能符合预期。 在开发过程中&#xff0c;进行代码测试有很多好处&#xff1a; 提高软件质量&#xff1a;通过发现并修复错误&#xff0c;测试有助于提升软件的功能性、可靠性和稳…

LSTM架构的演进:LSTM、xLSTM、LSTM+Transformer

文章目录 1. LSTM2. xLSTM2.1 理论介绍2.2 代码实现 3. LSTMTransformer 1. LSTM 传统的 LSTM (长短期记忆网络) 的计算公式涉及几个关键部分&#xff1a;输入门、遗忘门、输出门和单元状态。 2. xLSTM xLSTM之所以称之为xLSTM就是因为它将LSTM扩展为多个LSTM的变体&#xff…

网络编程--网络理论基础(二)

这里写目录标题 网络通信流程mac地址、ip地址arp协议交换机路由器简介子网划分网关 路由总结 为什么ip相同的主机在与同一个互联网服务通信时不冲突公网ip对于同一个路由器下的不同设备&#xff0c;虽然ip不冲突&#xff0c;但是因为都是由路由器的公网ip转发通信&#xff0c;接…