【Shell】环境变量 自定义变量 特殊变量

Shell变量:环境变量

目标

1、理解什么是系统环境变量?

2、掌握常用的系统环境变量都有哪些?

Shell变量的介绍

变量用于存储管理临时的数据, 这些数据都是在运行内存中的.

变量类型

  1. 系统环境变量

  2. 自定义变量

  3. 特殊符号变量

系统环境变量

介绍

是系统提供的共享变量.是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用

Shell的配置文件分类

1.全局配置文件 /etc/profile /etc/profile.d/*.sh /etc/bashrc

2.个人配置文件 当前用户/.bash_profile 当前用户/.bashrc

一般情况下,我们都是直接针对全局配置进行操作。

环境变量分类

在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

系统级环境变量:Shell环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用, 全局共享 用户级环境变量:Shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用, 登录用户使用

查看当前Shell系统环境变量

查看命令

env

效果

查看Shell变量(系统环境变量+自定义变量+函数)

命令

set

效果

常用系统环境变量

变量名称含义
==PATH==与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割
HOME当前用户主目录:/root
SHELL当前shell解析器类型:/bin/bash
==HISTFILE==显示当前用户执行命令的历史列表文件:/root/.bash_history
PWD显示当前所在路径:/root
OLDPWD显示之前的路径
HOSTNAME显示当前主机名:itheima
HOSTTYPE显示主机的架构,是i386、i686、还是x86、x64等:x86_64
==LANG==设置当前系统语言环境:zh_CN.UTF-8

环境变量输出演示

 

小结

1.系统环境变量是什么?

是系统提供的环境变量, 通过加载Shell配置文件中变量数据共享给Shell程序使用

2.环境变量的分类?

系统级环境变量, Shell环境加载全局配置文件中定义的变量

用户级环境变量, Shell环境加载个人配置文件中定义的变量

3.env与set区别

env用于查看系统环境变量

set用于查看系统环境变量+自定义变量+函数

4.常用环境变量

变量名称含义
PATH命令搜索的目录路径, 与windows的环境变量PATH功能一样
LANG查询系统的字符集
HISTFILE查询当前用户执行命令的历史列表

Shell变量:自定义变量

目标

理解自定义变量的分类

能够自定义变量进行增\删\改\查

自定义变量介绍

就是自己定义的变量

分类

  1. 自定义局部变量

  2. 自定义常量

  3. 自定义全局变量

自定义局部变量

介绍

就是定义在一个脚本文件中的变量, 只能在这个脚本文件中使用的变量, 就是局部变量

定义与使用

定义语法

var_name=value

变量定义规则

  1. 变量名称可以有字母,数字和下划线组成, 但是不能以数字开头

  2. 等号两侧不能有空格

  3. 在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算

  4. 变量的值如果有空格, 必须使用双引号括起来

  5. 不能使用Shell的关键字作为变量名称

演示

查询变量值语法

# 语法1: 直接使用变量名查询
$var_name
# 语法2: 使用花括号
${var_name}
# 区别: 花括号方式适合拼接字符串

演示

注意: 如果"My name is ${var2}Style"$var2 不带花括号, 系统会认为获取$var2Style 变量数据, 这个变量不存在就获取不到数据,执行效果如下

结论: 推荐大家使用花括号才是编程好习惯

变量删除

语法

unset var_name

演示

自定义常量

介绍

就是变量设置值以后不可以修改的变量叫常量, 也叫只读变量

语法

readonly var_name

演示

自定义全局变量

父子Shell环境介绍

例如: 有2个Shell脚本文件 A.sh 和 B.sh

如果 在A.sh脚本文件中执行了B.sh脚本文件, 那么A.sh就是父Shell环境, B.sh就是子Shell环境

自定义全局变量介绍

就是在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用

自定义全局变量语法

export var_name1 var_name2

案例需求

测试全局变量在子Shell中是否可用, 在父Shell中是否可用

案例实现步骤

  1. 创建2个脚本文件 demo2.sh 和 demo3.sh

  2. 编辑demo2.sh

    命令1:定义全局变量VAR4

    命令2: 执行demo3.sh脚本文件

  3. 编辑demo3.sh

    输出全局变量VAR4

  4. 执行demo2.sh脚本文件

案例演示

  1. 创建demo2.sh和demo3.sh文件

  1. 编辑demo2.sh, 里面定义变量VAR4并设置为全局, 并里面执行demo3.sh脚本文件

    vim demo2.sh

  1. 编辑demo3.sh, 里面打印VAR4

    vim demo3.sh

  1. 执行脚本文件demo2.sh, 观察打印VAR4效果

  1. 执行脚本文件后, 在交互式Shell环境打印VAR4, 观察打印VAR4效果

结论

全局变量在当前Shell环境与子Shell环境中可用, 父Shell环境中不可用

小结

自定义变量的分类

自定义局部变量: 就是在一个脚本文件内部使用 var_name=value

自定义常量: 不可以修改值的变量, readonly var_name

自定义全局变量: 设置变量在当前脚本文件中与子Shell环境可以使用的变量, export var_name

自定义变量进行增\删\改\查

定义和修改: var_name=value

查询:${var_name} 或 $var_name

删除: unset var_name

Shell变量:特殊变量

目标

能够说出常用的特殊变量有哪些

特殊变量:$n

语法

$n

含义

用于接收脚本文件执行时传入的参数
$0 用于获取当前脚本文件名称的
$1~$9, 代表获取第一输入参数到第9个输入参数
第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取

执行脚本文件传入参数语法

sh 脚本文件 输入参数1 输入参数2 ...

案例需求

创建脚本文件demo4.sh文件, 并在脚本文件内部执行打印脚本文件名字, 第一个输入参数, 第二个输入参数

实现步骤

  1. 创建脚本文件demo4.sh

  2. 编辑demo4.sh的文件内容

    # 命令1: 打印当前脚本文件名字
    # 命令2: 打印第1个输入参数
    # 命令3: 打印第2个输入参数
    # 命令4: 打印第10个输入参数
  3. 执行脚本文件demo4.sh

演示

  1. 创建demo4.sh文件

  1. 编辑demo4.sh文件, 输出脚本文件名称\第一个输入参数\第二个输入参数

  1. 执行demo4.sh文件,输入输出参数itcast itheima的2个输入参数, 观察效果

特殊变量:$#

语法

$#

含义

获取所有输入参数的个数

案例需求

在demo4.sh中输出输入参数个数

演示

编辑demo4.sh, 输出输入参数个数

执行demo4.sh传入参数itcast, itheima, 播仔 看效果

特殊变量:$*$@

语法

$*
$@
# 含义都是获取所有输入参数, 用于以后输出所有参数

$*$@区别

1.不使用双引号括起来, 功能一样$*和$@获取所有输入参数,格式为: $1 $2 ... $n
2.使用双引号括起来"$*"获取的所有参数拼接为一个字符串, 格式为: "$1 $2 ... $n""$@"获取一组参数列表对象, 格式为: "$1" "$2" ... "$n"使用循环打印所有输入参数可以看出区别

循环语法

for var in 列表变量
do      # 循环开始命令  # 循环体
done    # 循环结束

案例需求

在demo4.sh中循环打印输出所有输入参数, 体验$*$@的区别

实现步骤

编辑demo4.sh脚本文件

# 增加命令: 实现直接输出所有输入后参数
# 增加命令: 使用循环打印输出所有输入参数

演示

  1. 编辑demo4.sh文件

  1. 直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引号包含 $*$@ )

    #!/bin/bash
    # 命令1: 打印当前脚本文件名字
    echo "当前脚本文件名称:$0"
    ​
    # 命令2: 打印第1个输入参数
    echo "第一个输入参数:$1"
    ​
    # 命令3: 打印第2个输入参数
    echo "第二个输入参数:$2"
    ​
    # 命令4: 打印第10个输入参数
    echo "第十个输入参数不带花括号获取:$10"
    echo "第十个输入参数带花括号获取:${10}"
    ​
    # 命令5 打印所有输入参数的个数
    echo "所有输入参数个数:${#}"
    ​
    ​
    # 增加命令: 实现直接输出所有输入后参数
    echo '使用$*直接输出:'$*
    echo '使用$@直接输出:'$@
    ​
    # 增加命令: 使用循环打印输出所有输入参数
    echo '循环遍历输出$*所有参数'
    for item in "$*"
    doecho $item
    done
    echo '循环遍历输出$@所有参数'
    for item in "$@"
    doecho $item
    done
  2. 运行观察区别

特殊变量:$?

语法

$?

含义

用于获取上一个Shell命令的退出状态码, 或者是函数的返回值

每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功

一般来说, 返回0代表命令执行成功, 非0代表执行失败

演示

输入一个正确命令, 再输出$?

输入一个错误命令, 在输出$?

特殊变量:$$

语法

$$

含义

用于获取当前Shell环境的进程ID号

演示

查看当前Shell环境进程编号

ps -aux|grep bash

输出 $$ 显示当前shell环境进程编号

小结

常用的特殊符号变量如下

特殊变量含义
$n获取输入参数的 $0, 获取当前Shell脚本文件名字 $1~$9, 获取第一个输入参数到第九个输入参数 ${10} 获取10和10以上的参数需要使用花括号
$#获取所有输入参数的个数
$*$@获取所有输入参数数据 区别: 如果不使用双引号, 功能一样, 获取所有参数数据为一个字符串, 如果使用了双引号, $@获取的就是参数列表对象, 每个参数都是一个独立字符串,
$?获取上一个命令的退出状态码, 一般;来说0代表命令成功, 非0代表执行失败
$$获取当前shell环境进程的ID号

Shell环境变量深入:自定义系统环境变量

目标

能够自定义系统级环境变量

全局配置文件/etc/profile应用场景

当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用

以后只要是所有Shell程序或命令使用的变量, 就可以定义在这个文件中

案例演示

需求

/etc/profile定义存储自定义系统级环境变量数据

创建环境变量步骤

  1. 编辑/etc/profile全局配置文件

    # 增加命令: 定义变量VAR1=VAR1 并导出为环境变量
    # 扩展: vim里面的命令模式使用G快速定位到文件末尾位置, 使用gg定位到文件首行位置
  2. 重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重载, 语法

    source /etc/profile
  3. 在Shell环境中读取系统级环境变量VAR1

创建环境变量演示

编辑/etc/profile文件

vim /etc/profile

添加设置变量VAR1=VAR1并导出成为环境变量, 在/etc/profile文件末尾添加如下命令

# 创建环境变量
VAR1=VAR1
export VAR1

3、保存/etc/profile退出

4、重新加载/etc/profile文件数据更新系统环境变量

source /etc/profile

注意:如果这一步不执行,无法读取更新的环境变量

3、输出环境变量VAR1

echo $VAR1

小结

如何自定义系统级环境变量

  1. 系统级全局配置文件: /etc/profile

  2. 设置环境变量: export var_name=value, 注意环境变量建议变量名全部大写

  3. 修改了/etc/profile文件后, 要立刻加载修改的数据需要重载配置文件: source /etc/profile

Shell环境变量深入:加载流程原理介绍

目标

  1. 能够说出交互式Shell与非交互式Shell

  2. 能够说出登录Shell与非登录Shell环境

Shell工作环境介绍

用户进入linux系统就会初始化Shell环境, 这个环境会加载全局配置文件和用户个人配置文件中环境变量.每个脚本文件都有自己的Shell环境

shell工作环境分类

交互式与非交互式shell

交互式Shell

与用户进行交互, 互动. 效果就是用户输入一个命令, Shell环境立刻反馈响应.

非交互式Shell

不需要用户参与就可以执行多个命令. 比如一个脚本文件含有多个命令,直接执行并给出结果

登录Shell与非登录Shell环境

类型名称含义
shell登录环境需要用户名\密码登录的Shell环境
shell非登录环境不需要用户名,密码进入的Shell环境 或 执行脚本文件

注意:不同的工作环境加载环境变量流程不一样

环境变量初始化流程

1.全局配置文件 /etc/profile /etc/profile.d/*.sh /etc/bashrc

2.个人配置文件 当前用户/.bash_profile 当前用户/.bashrc

环境变量加载初始化过程

小结

  1. 能够说出交互式Shell与非交互式Shell

    交互式Shell: 就是需要用户参与互动的Shell环境, 效果用户输入一个命令, 环境就立刻响应结果

    非交互式Shell: 只执行命令, 不需要用户的参与

  2. 能够说出登录Shell与非登录Shell环境

    登录Shell环境: 要以用户名与密码登录到系统默认采用登录Shell环境

    非登录Shell环境: 不实用用户名与密码进入linux系统的Shell环境

Shell环境变量深入:加载流程测试

目标

理解Shell环境变量的加载流程测试

能够知道环境变量应该配置在哪里

切换Shell环境执行脚本文件介绍

在执行一个脚本文件时可以指定具体Shell环境进行执行脚本文件, 这个就是切换Shell环境执行脚本

Shell登录环境执行脚本文件语法

sh/bash -l/--login 脚本文件

含义: 先加载Shell登录环境流程初始化环境变量, 再执行脚本文件

Shell非登录环境变量执行脚本文件语法

bash # 加载Shell非登录环境
sh/bash 脚本文件 # 直接执行脚本文件

含义: 先执行加载Shell非登录环境流程初始化环境变量, 再执行脚本文件

测试案例

需求

Shell登录环境会运行/etc/profile

Shell非登录环境会运行/.bashrc

在/etc/profile与/当前用户/.bashrc文件分别设置环境变量数据,然后在shell脚本文件中输出环境变量数据,最后切换不同环境执行shell脚本文件观察验证上面的流程运行

分析

  1. 清理工作, 清理/etc/profile文件中VAR1环境变量进行删除, 并且重载这个配置文件

  2. 编辑/etc/profile, 增加环境变量VAR1=VAR1

  3. 编辑/root/.bashrc, 增加环境变量VAR2=VAR2

  4. 创建demo1.sh文件, 读取环境变量数据进行打印

    # 输出环境变量VAR1
    # 输出环境变量VAR2
  5. 以Shell非登录环境执行demo1.sh脚本文件, 观察只会输出VAR2, 不会输出VAR1

  6. 以Shell登录环境执行demo1.sh脚本文件, 观察会输出VAR2和VAR1

演示

编辑/etc/profile文件

vim /etc/profile

编辑添加如下内容,保存退出

在root目录下,编辑.bashrc文件

vim .bashrc

编辑添加如下最后2行内容,保存退出

创建文件demo1.sh

touch demo1.sh

编辑文件demo1.sh,添加如下内容

直接执行脚本文件

bash demo1.sh

直接执行脚本文件, 即没有加载登录Shell环境变量, 也没有加载非登录Shell环境变量

先加载非登录Shell环境变量, 然后执行脚本文件

bash
bash demo1.sh

Shell非登录环境会加载文件 当前用户/.bashrc 的环境变量数据

所以这里会输出VAR2的环境变量数据

先加载登录Shell环境变量, 然后执行脚本文件

bash -l demo1.sh

Shell登录环境会加载文件 etc/profile当前用户/.bashrc 的环境变量数据

所以这里会输出VAR1和VAR2的环境变量数据

小结

1、Shell环境变量初始化加载原理过程

分类初始化环境变量过程执行文件顺序
shell登录环境初始化过程/etc/profile--》/etc/profile.d/*.sh--》~/.bash_profile--》~/.bashrc--》/etc/bashrc
shell非登录环境初始化过程~/.bashrc--》/etc/bashrc--》/etc/profile.d/*.sh

2、那么以到底将环境变量定义到哪里呢?/etc/profile与/etc/bashrc的区别?

需要登录的执行的shell脚本读取的环境变量配置在:/etc/profile、/当前用户/.bash_profile

不需要登录的用户执行的shell脚本读取的环境变量配置在:/当前用户/.bashrc、/etc/bashrc

Shell环境变量深入:识别Shell环境类型

目标

理解如何识别shell登录环境与非登录环境

语法

使用$0识别环境语法

echo $0

输出 -bash 代表:shell登录环境

输出 bash 代表: shell非登录环境

注意:这个 $0 环境变量如果用在子shell中(shell脚本文件)输出Shell脚本本身的文件名

bash命令语法

bash

bash命令:用于切换为Shell非登录环境

分析

1、直接登录系统为shell登录环境输出 $0 观察输出信息效果

2、使用 bash 命令切换为shell非登录环境输出 $0 观察输出信息效果

3、创建test.sh脚本文件,编辑添加输出 $0 ,编程保存完成后执行test.sh脚本文件观察输出信息效果

演示

直接登录linux系统使用如下命令效果

bash命令将当前环境转换为Shell非登录环境

小结

1、如何识别shell登录环境与非登录环境?

$0 用于获取当前Shell环境的类型,  bash代表Shell非登录环境, -bash 代表Shell登录环境
# $0不可以在脚本文件中使用, 因为代表获取脚本文件名字

Shell环境变量深入:详细切换Shell环境

目标

理解切换shell环境的命令

切换shell环境命令介绍

  1. 直接登录加载shell登录环境

  2. su切换用户加载Shell登录与Shell非登录环境

  3. bash加载Shell登录与Shell非登录环境

切换Shell环境命令演示

切换环境方式1:直接登录系统

介绍

直接在虚拟机上使用用户名与密码登录linux系统或使用客户端直接连接远程linux系统

演示

虚拟机本地直接登录演示

客户端远程采用SSH登录演示

切换环境方式2:su切换用户登录

命令

语法1

su 用户名 --login 
或
su 用户名 -l# 切换到指定用户, 加载Shell登录环境变量

语法2

su 用户名  
# 切换到指定用户,  加Shell非登录环境变量
分析步骤

1、创建普通用户userA

2、切换到用户userA,使用-l加载Shell登录环境变量 , 输出环境变量$0,观察输出-bash

4、使用exit退出userA

5、切换到用户userA,加载Shell非登录环境变量,输出环境变量$0,观察输出bash

演示

创建普通用户userA

useradd -m userA

以Shell登录环境执行切换到用户userA,输出环境变量$0,输出 -bash 说明当前为Shell登录环境

使用exit退出userA

以Shell非登录环境执行切换到用户userA,输出环境变量$0,输出 bash 说明当前为Shell非登录环境

切换环境方式3:bash切换

命令

语法1:

bash  # 加载【Shell非登录环境】

语法2:

bash -l  Shell脚本文件 /  bash --login shell脚本文件
sh -l shell脚本文件 / sh --login shell脚本文件
# 先加载【Shell登录环境】然后运行指定Shell脚本文件
分析

使用bash执行test.sh脚本文件,发生错误说明当前环境为Shell非登录环境

演示

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

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

相关文章

表示本机IP地址的方式(三种方式)

1、本机和网络上的其他主机都可以通过IP地址访问到服务器 2、通过 127.0.0.1 或者 localhost 访问 127.0.0.1 和 localhost 它们完全等价 只能 本机 通过 127.0.0.1 或者 localhost 访问,网络上的其他主机无法访问 3、 通过 0.0.0.0 访问服务器 表示所有可…

Leetcode——字符

520. 检测大写字母 class Solution { public:bool detectCapitalUse(string word) {int big 0, small 0, len word.length();for (int i 0; i < len; i) {if (word[i] > 65 && word[i] < 90) {big;}else {small;}}if (big len || small len) {return tr…

2023年中国一次性医用内窥镜市场发展现状分析:相关产品进入上市高峰期[图]

基于对减少交叉感染风险和维护成本的需求等因素&#xff0c;一种新兴的、耗材化的一次性内窥镜可以避免因重复使用产品而导致的感染问题和高额的清洗消毒费用&#xff0c;从而提高患者的安全性并帮助医疗机构节省运营成本。 一次性和可重复使用医用内窥镜特点对比 资料来源&am…

CNN——卷积神经网络

文章目录 多层感知机&#xff08;MLP&#xff0c;Multilayer Perceptron&#xff09;神经网络定义MLP与神经网络的异同相同之处&#xff1a;不同之处&#xff1a;总结 为什么要使用神经网络CNN卷积层&#xff1a;池化层&#xff1a;全连接层&#xff1a; 卷积神经网络的优势pad…

c语言练习94:分割链表

分割链表 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x…

TikTok Shop美国本土店VS跨境店,浅析与选择

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

vuecli2关于下载本地取环境变量没问题部署后路径取不到环境变量问题解决

功能 下载功能,用a标签实现下载 代码错误思路分析 解决办法可以忽略直接看下面 解决思路 在每个config文件中都定义了file_url,本地运行没有问题,但是部署到服务器开发环境, 拿到的是生产环境的FILE_URL地址 首先看了流水线-构建配置-编译配置-编译脚本里的打包命令: ** 本…

数据挖掘原理与算法

一、什么是闭合项集? Close算法对Apriori算法的改进在什么地方? 闭合项集&#xff1a;就是指一个项集x&#xff0c;它的直接超集的支持度计数都不等于它本身的支持度计数。 改进的地方&#xff1a; 改进方向&#xff1a; 加速频繁项目集合的生成&#xff0c;减少数据库库的扫…

微信小程序数据交互------WXS的使用

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.数据库连接 数据表结构&#xff1a; 数据测式&#xff1a; 2.后台配置 pom.xml <?xml version&quo…

重磅发布!RflySim Cloud 智能算法云仿真平台亮相,助力大规模集群算法高效训练

RflySim Cloud智能算法云仿真平台&#xff08;以下简称RflySim Cloud平台&#xff09;是由卓翼智能及飞思实验室为无人平台集群算法验证、大规模博弈对抗仿真、人工智能模型训练等前沿研究领域研发的平台。主要由环境仿真模块、物理效应计算模块、多智能体仿真模块、分布式网络…

基于Java的图书商城管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

CICD 流程学习(四)搜素服务与消息队列

一 搜索服务 1 Lucene概念 Lucene是一种高性能、可伸缩的信息搜索 (IR)库&#xff0c;在2000年开源&#xff0c;最初由鼎鼎大名的Doug Cutting开发。是基于Java实现的高性能的开源项目 Lucene采用了基于倒排表的设计原理&#xff0c;可以非常高效地实现文本查找&#xff0…

香港服务器在国内访问太慢怎么能提高?

​  一直以来&#xff0c;全球化业务需求的增长是跟随着蓬勃向上的互联网而发展的。有了网络&#xff0c;海外贸易就在鼠标的轻点中完成。而IDC市场中的香港服务器也因为免备案政策的特性&#xff0c;开始逐渐成为企业想要跨越地域壁垒而考虑的对象。但在使用过程中&#xff…

14.10 Socket 套接字选择通信

对于网络通信中的服务端来说&#xff0c;显然不可能是一对一的&#xff0c;我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信&#xff0c;而当不需要与客户端通信时&#xff0c;则只需要将该套接字挂到链表中存储并等待后续操作&#xff0c;套接字服务端通过多…

QML中常见模型使用

目录 引言基础知识简单模型重复模型常见视图ListViewRepeater ListModelQbjectModel容器模型数组QStringListQList<XX *> QAbstractItemModelQSortFilterProxyModel 总结 引言 Qt Quick的基础组件中大量使用到模型&#xff0c;如ListView、Repeater等。视图所支持模型类…

爬虫学习日记第八篇(爬取fofa某端口的协议排行及其机器数目,统计top200协议)

需求 找到最常用的200个协议 通过fofa搜索端口&#xff0c;得到协议排名前五名和对应机器的数目。 遍历端口&#xff0c;统计各个协议对应的机器数目&#xff08;不准&#xff0c;但能看出个大概&#xff09; 读写API API需要会员&#xff0c;一天只能访问1000次。 import…

SpringBoot常见异步编程,你会多少?

微信公众号访问地址&#xff1a;SpringBoot常见异步编程&#xff0c;你会多少&#xff1f; 近期热推文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis…

【C++面向对象】2.构造函数、析构函数

文章目录 【 1. 构造函数 】1.1 带参构造函数--传入数据1.2 无参构造函数--不传入数据1.3 实例1.4 拷贝构造函数 【 2. 析构函数 】 【 1. 构造函数 】 类的构造函数是类的一种特殊的成员函数&#xff0c;它会 在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同…

2023年中国自动排气阀产业链、市场规模及存在问题分析]图[

自动排气阀是一种用于排除管道、容器或设备中累积的空气或气体的装置。在液体流动系统中&#xff0c;气体或空气可能会积聚在管道或容器中&#xff0c;影响流体流动、导致气锁和能效降低。自动排气阀的作用是在系统中的气体达到一定压力时&#xff0c;自动地释放气体&#xff0…

非关系型数据库-Redis

一、缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且硬盘也有大小不一的缓存…