Shell脚本攻略:Shell编程规范与变量

news2024/11/25 20:31:16

一、理论

1.Shell脚本编程规范

(1)Shell简介

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。

291445ebd3284cb884213b0e51a22cb3.png

(2)Shell脚本的概念及处理逻辑

         ① Shell脚本

            1)将要执行的命令按顺序保存到一个文本文件       

            2)给该文件可执行权限
            3)可结合各种Shell控制语句完成更复杂的操作

         ②  处理处理

              1)顺序执行:程序按从上到下的顺序执行

              2)选择执行:程序执行过程中,根据条件的不同选择不同的分支继续执行

              3)循环执行:程序在执行过程中需要重复执行多次某些语句(根据已知次数、已知条件)

(3)Shell脚本的应用场景

         ① 重复性操作
         ② 交互性任务
         ③ 批量事务处理
         ④ 服务允许状态监控
         ⑤ 定时任务执行

(4)运行Shell脚本的四种方式

         调试阶段,可以不赋权执行:

         ① sh first.sh

e0b140641257420bb6de60ce605c1e63.png
         ② bash first.sh

9ef9ff08d02549c1acfd3a39ada2506b.png
         ③ source first.sh   (全量查询,结束自动切换目录 

55b6248180784ca3ab26cee550d0d69d.png

         正式上线,必须赋权执行:

         chmod 777 first.sh
         ④ ./first.sh

3e90bcb87f8a49259d5a3f70a50aaee3.png

(3)Shell的分类

sh:UNIX最初使用的 shell,已经被bash所替换。
bash:基准于GNU的框架下发展出的Shell,是 sh 的扩展。(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell。
csh:语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。
nologin:奇怪的shell,这个shell可以让用户无法登录主机。

b8d8f22472724a2f93dcb2cfc8f4055c.png

(4)Shell脚本的作用
         ① 自动化运维
         ② 批量化重复操作可以编写脚本结合计划任务自动周期运行
         ③ 减轻管理员工作量
         ④ 提高处理文本文件的速度
         ⑤ 避免配置出错

(5)管道操作

将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。

(6)重定向交互式硬件设备

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出    /dev/stderr2显示器

(5)重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据
重定向输出>将标准输出结果 保存 到指定的文件,并且覆盖原有内容
>>将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容
重定向错误输出2>将错误信息 保存 到指定的文件,并且覆盖原有内容
2>>将错误信息 追加 到指定的文件的尾部,不覆盖原有内容
混合输出&>将标准输出、标准错误保存到同一文件中
2>&1将标准错误输出重定向到标准输出

2.Shell脚本变量揭秘

(1)变量的作用

变量用来存放系统和用户需要使用的特定参数(值)。

(2)自定义变量

      ① 定义新的变量

变量名:使用固定的名称,由系统预设或用户定义
      1)不要使用系统的命令作为变量名
      2)不要使用中文
      3)不能特殊符号开头 可以用_来开头
      4)在指定变量名的时候有一个默认的规则:书本:book 老师:teacher a= b=
      5)要有注释,还要注意前后一致

变量值:

      1)整数型:int

      2)字符型:string

      3)  布尔型:boolean

      4)浮点型:float

      ② 查看和引用变量的值

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

ca272eafdefb4e1bb48a24f354995570.png

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

ce77d46cf4d04bbeaafb7b3cbdab2316.png

      ③ 变量赋值的特殊操作

           1)赋值时使用引号:
           双引号:允许通过$符号引用其他变量值。弱引用,其中的变量引用会被替换为变量值
           单引号:禁止引用其他变量值,$视为普通字符。强引用,其中的变量引用不会被替换为变量值,而保持原字符串
           反撇号:命令替换,提取命令执行后的输出结果,`…`和$(…)作用相同

9dc9f1be09664f03b81940281544a379.png

           2)read命令

           read命令获取输入内容
           -p prompt:指定提示符,用于提示用户输入数据。
           -a array:将输入数据存储到一个数组中。

           方法一:
          read -p "提示信息" 变量名
          echo $变量名

          方法二:
          echo -n "提示信息"
          read 变量名
         echo $变量名

          数组输入:

          read -a 

995751cbd3484c0abd3f4b0a1bfc0a97.png

      ④ 设置变量的作用范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所有子shell环境中可以继续使用

全局变量格式1: export   变量名   

全局变量格式2:export 变量名=变量值

      ⑤ 数值变量的运算

      1)整数变量的运算
      格式:expr 变量1 运算符 变量2 [运算符 变量3]
      运算符:+ 加法、- 减法、\* 乘法、/ 除法、% 取余

094c0e1e10121c712f37b567fead6867.png

             2)bc

             bc是一个简单易用的计算器程序,可以用于执行基本的数学运算,
包括加、减、乘、除和取余等操作。
在Shell编程中,可以使用bc命令将数学表达式计算结果输出到标准输出或保存到文件中,以满足不同的需求。

             3)非整数运算:
bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。

处理方式混合运算
bcf=$(echo "4.3+2.5"|bc)
echo "4.3+2.5=$f"
 
f=$(echo "4.3-2.5"|bc)
echo "4.3-2.5=$f"
f=$(echo "4.30*2.50"|bc)
echo "4.3*2.5=$f"
 
f=$(echo "scale=2;4.3/2.5"|bc)
echo "4.3/2.5=$f"
 
f=$(echo "2.2/(2.2-1.1)*2+1.1"|bc)
echo "2.2/(2.2-1.1)*2+1.1=$f"
awkf=$(awk 'BEGIN{print 4.5+3.4 }')
echo "4.5+3.4=$f"
 
f=$(awk 'BEGIN{print 4.5-3.4 }')
echo "4.5-3.4=$f"
 
f=$(awk 'BEGIN{print 4.5*3.4 }')
echo "4.5*3.4=$f"
 
f=$(awk 'BEGIN{print 4.5/3.4 }')
echo "4.5/3.4=$f"
 
f=$(awk 'BEGIN{print (4.5-3.4)*2+3 }')
echo "(4.5-3.4)*2+3=$f"

               4)备注

          变量名=$((表达式))  等价于  变量名=$(expr 表达式)   等价于    变量名=$[表达式] 

(3)特殊变量

     ① 环境变量

系统维护的变量,用于设置工作环境,使用env命令可以查看所有环境变量。

环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。
每个用户还有自己的独立配置文件(~/.bash_profile)。可以用来长期变更或设置某个环境变量。

用户级环境变量: 这些变量只对当前用户可见。每个用户可以定义自己的环境变量,用于满足个人需求。
例如,HOME变量指定了当前用户的主目录路径。

预定义环境变量: 操作系统或应用程序预先定义了一些常用的环境变量,用于提供特定的信息和功能。
例如,USER变量保存当前用户名,LANG变量指定了当前系统的默认语言。

自定义环境变量: 用户和应用程序可以定义自己的环境变量,用于存储特定的信息或配置。
这些变量可以根据需要随时创建、修改和删除。

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径
 

     ② 位置变量

通过命令行给脚本传递参数,主要指执行脚本时后面所跟着位置。

$1-$9:脚本后1-9的位置

${10}:脚本后10以上的位置需要借助变量分隔符{},不然会将$1认为是一个位置变量然后输出再加上后面的数字。

     ③ 预定义变量

系统已经定义好的变量:

$*:表示所有位置参数的内容看成一个整体返回

$@:表示输出脚本后的所有位置参数,且认为每个是独立的值

$0:表示当前执行的脚本或程序的名称 当前脚本的名字

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

$?:表示前一条命令执行后的返回状态,返回值为 0 表示上一条命令执行正确,返回任何非 0值均表示执行出现异常。使用方法echo  $?

$!:后台任务最后一个id,使用方法echo  $!

备注:

$*、$@不加双引号时表现一致;加双引号时,$*会将所有参数作为一个整体。
 

      ④ 只读变量:

       只可以读取不能修改的变量,相当于常量,用处较少。

       readonly 命令设置只读变量,只读变量不可以被重新赋值、不可以被删除,unset 命令用于删除变量。

f30552777270452384b019d79548a095.png

二、实验

1.shell脚本实现位置变量运算

(1)进入脚本

5f08255f4ccf4e8ba5fd863e84a3855e.png

(2) 将括号内num1与num2相加的执行结果赋值给变量sum

2912be2fc4bb4adaa1718ec331729ad2.png

 (3)执行脚本

a9d522ac23d3447d98739165f92b3b34.png

2.Shell脚本实现read命令

(1)进入脚本

58125c8cb64b4d7ea80adb4ff9452cff.png

 (2)编辑脚本

d872bc0844ab44eaa18d45aa07247827.png

(3)执行脚本

2142ab6426a74e17be983a9254f19dd8.png

 3.Shell脚本实现if条件判断

(1)进入文件

485150b8afc94b23aecec2f5696a1a48.png

(2)编辑文件

f5f2fcea118a48e6a6038e3006898a1d.png

(3)执行脚本

数字相同

e6c868373f3147ffa9386c8dadcaeab3.png

数字不同

71ce73f300e9463d9a41270934334b42.png

4.Shell脚本实现浮点运算

进行浮点运算,需要借助bc,awk 处理。

加法:

b444fe2a5a8646f5b4e092c70c6dafe2.png

减法:

4df094d84ae742b48ed2596102bf12c9.png

乘法:

550d4eb4eb8943d2b327b035743cf806.png

除法:

结果大于1

b773b1857f004aa28ffc83a99944ff45.png

结果小于1

97704af71d4f407db0da749929857c45.png

混合:

 c9baeac8a3cb47f1a528212723d6e600.png

三、问题

1.Linux 执行命令为什么要加 ./(点斜杠)

(1)当前文件夹下有一个名为 first.sh 的 shell 脚本,但是在执行它的时候却提示找不到文件

d045fc65925d47a4b6329d34c46735f8.png

(2)原因分析:

虽然终端是在当前目录,而且当前目录中有要执行的文件,但是终端就是找不到它。需要指定文件的相对或绝对路径来告诉终端我们想运行的文件在哪里。

在 Linux 中,点字符(.)表示工作目录,斜杠(/) 是 Linux 中的路径分隔符,用它来分离工作目录(.)与文件名。为什么需要 ./ ?因为我们的工作目录不包含在环境变量( $PATH )中。如果在路径名中存在 ./ 字符,那么就不搜索 $PATH。如果 ./ 不在路径名中,那么只在 $PATH 中搜索。

所以这就解释了为什么如果在 first.sh 前不加 ./ 就不能正常运行,原因就是在环境变量中没有名为 first.sh 的命令。$PATH:决定了shell将到哪些目录中寻找命令或程序,$PATH的值是一系列目录,当你运行一个程序时,Linux 在这些目录下进行搜索。

(3)输入命令 echo $PATH 查看当前的环境变量。

db8f3482df1a4dd58862e8eb05ef002c.png

(4)在 Linux 上使用的命令都可以在这里面找到,例如ls 命令。但是如果我们想看命令具体的位置,可以使用 which 命令。

f96e9a767f594d83a97d94d051c69217.png

(5)在终端中输入:export PATH=$PATH:/data(这是一次临时的指定方法,关闭终端之后就不再生效:

d6c0fec7887140a881f6fcb5a0b34bd6.png

(6)然后执行first.sh

6806d10bb7764d51bdf0c9ed3e978084.png

2. $() 与 ${}区别

(1)$()是将括号内命令的执行结果赋值给变量

94236ec7abb64c27b18d7c6c88f0f610.png

92742f7649554383bfb2e39bd217e6e4.png

(2)${} 是用来作变量替换。一般情况下,$A 与 ${A} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围

653d65e569e2407d926e1734e287e47d.png

 3.cat 与echo区别

(1)cat 

cat命令只是看文本文档文件的命令,二进制文件对于cat命令并不适用(二进制文件的查看通常是反编译或者使用strings命令查看二进制文件的某些细节);

cat命令并不适合查看大的文本文件,比如,超过200M大小的日志文件(tail -f 适合查询日志);

cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的;

cat命令主要的应用在编辑,生成配置文件,查看配置文件,通过管道符 |grep  提取关键的有用信息,合并分片文件,以及在脚本内传递参数变量这些功能,由于管道符的配合加入,使得cat命令的应用极为灵活多变。
cat主要有三大功能:
     ① 一次显示整个文件。
      cat   filename

40cca817836b44ee847edb96a03aa95e.png
     ② 从键盘创建一个文件。
      cat  >  filename

a9ebd666d0fc4a458b2a1b2733b88224.png
      只能创建新文件,不能编辑已有文件.
     ③ 将几个文件合并为一个文件。
      cat   file   file2  > file3

38f6c586621b4b0abc4deb5f459ff2ea.png
 

(2)echo (回显)

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

echo 是一个专门输出自定义内容以及自定义和内置变量的值的命令,类似于Python、java这样的编程语言的内置函数print的简化版命令。

在Linux中,其实自定义内容也就是等于java的字符串,通常加单引号或者双引号,命令执行后返回字符串。在脚本编写进入调试阶段时,通常需要在脚本内echo特定内容以判定脚本是否执行正确。

4.期待操作数报错

060b4344af8243ed90aee31e283472f4.png

解决方法:

运算符左右2侧均需要空格。

4b9d58cb53b74986aebaccf814921563.png

命令后跟参数

ad07244ba79e4418abd70b30f2416886.png

 5.未预期的符号报错

129e774eabf6423fbc924f36938e6496.png

0bc71206edd942d9a742084583c91bf0.png

 解决方法:

变量名称前添加前导符号“$”,从而引用变量的值

d872bc0844ab44eaa18d45aa07247827.png

 6.未找到命令报错

e0f2388dee8c435986239a9c339c9591.png

cc19b57001c84e859ccef0486ad0e9dd.png

 解决方法:

条件判断用“==”,方括号[]内与调用变量间要有空格

6943d5da4b02444fa7331aaa5b47cde2.png

 7.bc运算

(1)减法结果显示不全

bc 作为强大而常用的计算工具,做减法运算时,如果结果值小于1,小数前面的 0 是缺失的:

 acf64d3c48f247b5872cea413ff52ff8.png

 8c0ecc73606648a1b1811feff090fc78.png

 解决方法:

 %.1f表示保留到小数点后1位输出,补全0(%1f表示保留有效位数为1输出)

bd0957ac6c0945e0953e235538312d5e.png

b8c0c961111248448ece60d64e8a1b1b.png

(2)除法结果显示不全(结果大于1)

bc 作为强大而常用的计算工具,做除法运算时,如果结果值大于1,小数后面是缺失的,小数位后显示不全:

433c585ee47f42dc9c769fe317163bfa.png

5b75a174102241838a6b4bb9c42c854e.png

 解决方法:

scale保留运算结果到小数点后2位

962e67c2a10343ad821731cd3105380f.png

8aeb4e15221946dbbd90a51d831e95d7.png

(3)(结果小于1)

除法结果显示不全

bc 作为强大而常用的计算工具,做除法运算时,如果结果值小于1,小数前面的 0 是缺失的,小数位前显示不全:

776ff648fe434bc5b35091f9ef5ae47f.png

37059a974fce4325bbe9c2638603d50b.png

解决方法:

%.2f表示保留到小数点后2位输出,补全0

scale保留运算结果到小数点后2位

97704af71d4f407db0da749929857c45.png

 8a2323ef8f78437485164815147b173c.png

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

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

相关文章

从小白到大神之路之学习运维第28天

第二阶段基础 时 间&#xff1a;2023年5月24日 参加人&#xff1a;全班人员 内 容&#xff1a; ISCSI服务 目录 实验构建iscsi服务 实现步骤&#xff1a;以下实验为例 前提配置&#xff1a; 服务器端&#xff1a; 客户端&#xff1a; 注意事项&#xff1a; 实验构…

新手一定要掌握的实用调试技巧(vs2019)

目录 1、什么是bug&#xff1f; 2、调试是什么&#xff1f; 2.1、调试是什么 2.2、调试的基本步骤 2.3、Debug和Release的介绍 3、Windows环境调试介绍 3.1、调试环境的准备 3.2、学会快捷键 3.3、调试的时候查看程序当前信息 3.3.1、查看临时变量的值 3.3.2、查看内存信息…

【PWN · IntegerOverflow ret2text】[BJDCTF 2020]babystack2.0

第一次遇见整数溢出的题目&#xff0c;值得记录一下&#xff08;虽然这里的整数溢出很简单 目录 前言 一、整数溢出 二、解题思路 1.ELF/checksec查看保护 2.IDA反汇编 3.整数溢出 4.exp编写 总结 前言 整数溢出漏洞——对于有/无符号数&#xff0c;长/短位宽转换时机…

什么是 Spring Boot Actuator?如何在 Spring Boot 中使用 Actuator?

当我们在开发和部署应用程序时&#xff0c;监控应用程序的健康状况和性能是非常重要的。Spring Boot Actuator 为我们提供了一组现成的端点&#xff08;endpoints&#xff09;&#xff0c;可以让我们方便地监控和管理应用程序。在本文中&#xff0c;我们将了解 Spring Boot Act…

Spark+Kafka构建实时分析Dashboard

SparkKafka构建实时分析Dashboard 说明一、案例介绍二、实验环境准备1、实验系统和软件要求2、系统和软件的安装&#xff08;1&#xff09;安装Spark&#xff08;2&#xff09;安装Kafka&#xff08;3&#xff09;安装Python&#xff08;4&#xff09;安装Python依赖库&#xf…

数据仓库hive本地/远程模式安装

文章目录 1.简述2.本地模式2.1安装包准备2.2解压安装mysql2.2.1 解压mysql安装包2.2.2 安装mysql相关组件2.2.3 修改my.cnf配置文件2.2.4 更改所属组2.2.5 启动mysql服务 2.3 hive解压安装及配置2.3.1 解压2.3.2 改名2.3.3 配置环境变量2.3.4 添加hive-site.xml配置文件2.3.5 放…

《Spring Guides系列学习》guide6 - guide10

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

VIBRO METER 带缓冲输出的机械监控系统接口套件

高质量、高可靠性的接口套件&#xff0c;用于现有机械监控系统的缓冲“原始”传感器输出信号。该接口套件支持多达25个通道&#xff0c;可以是动态或转速计(速度)信号。接口套件采用DIN导轨安装&#xff0c;通常安装在装有VM600或VibroSmart机械监控系统的外壳中。 特征 支持…

为 Kotlin 的函数添加作用域限制(以 Compose 为例)

前言 不知道各位是否已经开始了解 Jetpack Compose&#xff1f; 如果已经开始了解并且上手写过。那么&#xff0c;不知道你们有没有发现&#xff0c;在 Compose 中对于作用域&#xff08;Scopes&#xff09;的应用特别多。比如&#xff0c; weight 修饰符只能用在 RowScope 或…

docker快速部署hue+hue集成hive

首先需要安装hive&#xff0c;hive的安装在HIVE的安装与配置_EEEurekaaa&#xff01;的博客-CSDN博客 安装完成之后&#xff0c;使用脚本命令启动hdfs和hive的相关服务。 一、安装docker # 安装yum-config-manager配置工具 $ yum -y install yum-utils # 设置yum源 $ yum-co…

《俞军产品方法论》- 站在更高的角度来拓展产品经理的内涵和边界

关于作者 俞军&#xff0c;互联网产品大神级人物。他是早年百度唯一的产品经理&#xff0c;主持了百度搜索这款产品的无数次进化&#xff0c;并主持设计了百度贴吧、百度 知道等世界级创新产品&#xff0c;后来又成为滴滴出行的产品负责人。他的 “ 俞军产品经理十二条 ” &a…

TexSAW|2023|Cryptography&Misc|WP

Cryptography&#xff5c;Crack the crime 用 nc 连上后&#xff0c;直接得到第一题 是一个简单的base64加密&#xff0c;解密如下&#xff1a; Meet in dubai on Tuesday 填入之后可获得第二题 猜测是古典加密&#xff0c;随后经过N次尝试后发现是rot13加密&#xff0c;解密…

蓝牙耳机怎么选?蓝牙耳机哪些性价比高?2023年蓝牙耳机推荐,蓝牙耳机品牌排行榜,蓝牙耳机最全选购指南

蓝牙耳机怎么选&#xff1f;蓝牙耳机哪些性价比高&#xff1f;2023年蓝牙耳机推荐&#xff0c;蓝牙耳机品牌排行榜&#xff0c;蓝牙耳机最全选购指南 观前提醒&#xff0c;本文中你将会了解到&#xff1a; &#xff5c;蓝牙耳机抄作业环节 &#xff5c;蓝牙耳机基础知识 &a…

快速上手kettle

一、前言 最近由于工作需要&#xff0c;需要用到kettle工具进行数据迁移转换。特意找资料学习了一下&#xff0c;kettle基本操作算是学会了。 所学的也结合实际工作进行了验证。为了防止以后用到忘记了&#xff0c;便写了几篇文章记录一下。 二 、ETL简介 ETL ( Extract-Tran…

synchronized 关键字和 volatile 关键字有什么区别?

synchronized 关键字和 volatile 关键字有什么区别&#xff1f; 在 Java 中&#xff0c;synchronized 关键字和 volatile 关键字都可以用来实现线程安全&#xff0c;但是它们有不同的用途和实现方式。本文将介绍 synchronized 关键字和 volatile 关键字的区别&#xff0c;包括…

二肽二氨基丁酰苄基酰胺二乙酸盐/Dipeptide Diaminobutyroyl Benzylamide Diacetate/SYN-AKE

作用机理----二肽二氨基丁酰苄基酰胺二乙酸盐 类蛇毒三肽通过松弛面部肌肉而作为有效的平滑和祛皱活性产品, 该活性三肽作用方式与 Temple Viper 毒蛇毒液的神经肌肉阻断化合物Waglerin 1 一致。类蛇毒三肽作用于突触后膜, 是肌肉烟碱乙酰胆碱受体(nmAChR)可逆转的拮抗剂。类蛇…

docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana

启动容器报错 直接删除那个name后边的就可以 安装nacos 首先需要拉取对应的镜像文件&#xff1a;docker pull nacos/nacos-server 挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录mkdir -p /mydata/nacos/init.d/ vim /myda…

使用 Kotlin 的 Opt-in (选择加入)功能注解API提示当前非稳定API

前言 之前在给公司项目封装库的时候&#xff0c;领导告诉我封装的漂亮一点&#xff0c;等以后公司发展起来了可能需要把这个库提供给第三方接入使用。 此时&#xff0c;就有这么一个问题&#xff1a;某些功能函数使用条件比较苛刻&#xff0c;直接使用可能会出现意想不到的后…

Mock.js 的语法规范学习

Mock.js 有一套完整的语法规范,可以好好学学。 Mock.js 的语法规范包括两部分&#xff1a; 数据模板定义规范&#xff08;Data Template Definition&#xff0c;DTD&#xff09; 数据占位符定义规范&#xff08;Data Placeholder Definition&#xff0c;DPD&#xff09; 数…

【mediasoup】12: ChannelRequest控制指令

rust 是把worker 当做lib 调用的。node是当做一个进程每一个ChannelRequest 就是一个外部发给worker的控制指令worker要负责处理。控制指令的处理实际是worker做的,worker可能立即执行,可能交给对应的handler去处理 worker根据指令id 来处理 处理完毕后才发消息ack 给控制侧 …