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

shell脚本之条件判断,循环控制,exit详解

if条件语句的语法及案例

一、基本语法结构

1. 单条件判断
if [ 条件 ]; then命令1命令2...
fi
2. 双分支(if-else)
if [ 条件 ]; then条件为真时执行的命令
else条件为假时执行的命令
fi
3. 多分支(if-elif-else)
if [ 条件1 ]; then命令1
elif [ 条件2 ]; then命令2
else命令3
fi
4. 嵌套结构
if [ 条件1 ]; thenif [ 条件2 ]; then命令1fi
else命令2
fi
5.多条件判断语句case
case 变量名 in
值1)
指令1
;;
值2)
指令2
;;
值3)
指令3
;;
*)
默认
esac

二、条件测试语法

1. 数值比较
if [ $a -eq 10 ]; then ...    # 等于
if [ $a -ne 10 ]; then ...    # 不等于
if [ $a -gt 10 ]; then ...    # 大于
if [ $a -lt 10 ]; then ...    # 小于
if [ $a -ge 10 ]; then ...    # 大于等于
if [ $a -le 10 ]; then ...    # 小于等于
2. 字符串比较
if [ "$str" = "hello" ]; then ...    # 等于(注意用双引号)
if [ "$str" != "hello" ]; then ...   # 不等于
if [ -z "$str" ]; then ...           # 字符串为空
if [ -n "$str" ]; then ...           # 字符串非空
3. 文件测试
if [ -e "file.txt" ]; then ...      # 文件或目录存在
if [ -f "file.txt" ]; then ...      # 文件存在且为普通文件
if [ -d "dir" ]; then ...           # 目录存在
if [ -r "file.txt" ]; then ...      # 文件可读
if [ -w "file.txt" ]; then ...      # 文件可写
if [ -x "script.sh" ]; then ...     # 文件可执行
4. 逻辑组合
# 使用 &&(逻辑与)
if [ -f "file.txt" ] && [ -r "file.txt" ]; then ...# 使用 ||(逻辑或)
if [ $a -eq 1 ] || [ $a -eq 2 ]; then ...# 使用 !(逻辑非)
if [ ! -d "dir" ]; then ...

三、案例示例

1. 判断文件是否存在
#!/bin/bashif [ -e "data.txt" ]; thenecho "文件存在"cat data.txt
elseecho "文件不存在,创建中..."touch data.txt
fi
2. 检查参数数量
#!/bin/bashif [ $# -ne 2 ]; thenecho "错误:需要两个参数" >&2echo "用法:$0 参数1 参数2" >&2exit 1
elseecho "参数1: $1"echo "参数2: $2"
fi
3. 数值比较
#!/bin/bashread -p "请输入一个数字: " numif [ "$num" -lt 0 ]; thenecho "负数"
elif [ "$num" -eq 0 ]; thenecho "零"
elseecho "正数"
fi
4. 字符串匹配
#!/bin/bashread -p "请输入yes或no: " answerif [ "$answer" = "yes" ]; thenecho "你选择了yes"
elif [ "$answer" = "no" ]; thenecho "你选择了no"
elseecho "无效输入"
fi
5. 检查命令执行结果
#!/bin/bashif grep -q "error" log.txt; thenecho "日志中发现错误"mail -s "系统异常" admin@example.com < log.txt
elseecho "系统正常"
fi
6. 嵌套条件
#!/bin/bashread -p "请输入年龄: " ageif [ "$age" -ge 18 ]; thenif [ "$age" -lt 60 ]; thenecho "成年人"elseecho "老年人"fi
elseecho "未成年人"
fi
7.case语句使用 
由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符, 并输出
相应的提示信息。[root@kittod ~]# cat in.sh
#!/bin/bash
read -p "Please enter a character, press enter to continue: " KEY
case "$KEY" in
[a-z]|[A-Z])
echo "Input is letter"
;;
[0-9])
echo "Input is number"
;;
*)
echo "Input is other characters"
esac

四、高级语法

1. 使用 [[ ]] 替代 [ ]
# [[ ]] 支持更复杂的表达式
if [[ "$str" == hello* ]]; then ...    # 模式匹配
if [[ $a -gt 10 && $b -lt 20 ]]; then ...    # 逻辑组合
2. 使用 (( )) 进行数值比较
if (( a > 10 )); then ...    # 无需引号,支持算术表达式
3. 使用 test 命令
if test -f "file.txt"; then ...    # 等同于 [ -f "file.txt" ]

五、常见错误及注意事项

  1. 空格问题
    [ 和 ] 内部必须有空格,例如:

    # 正确
    if [ "$a" -eq 10 ]; then ...# 错误(缺少空格)
    if ["$a"-eq 10]; then ...
    
  2. 变量引用加引号
    防止变量为空时导致语法错误:

    # 正确
    if [ -z "$str" ]; then ...# 错误(当 $str 为空时会变成 [ -z ],语法错误)
    if [ -z $str ]; then ...
    
  3. 整数比较用 -eq,而非 =

    # 正确(数值比较)
    if [ "$a" -eq 10 ]; then ...# 错误(字符串比较)
    if [ "$a" = 10 ]; then ...
    

六、总结

语法结构适用场景示例
[ 条件 ]传统条件测试[ -f "file.txt" ]
[[ 条件 ]]增强型条件测试(推荐)[[ $a -gt 10 && $b -lt 20 ]]
(( 条件 ))纯数值比较(( a > 10 ))
test 条件等同于 [ ]test -d "dir"

合理使用 if 条件语句可以让脚本根据不同情况执行不同逻辑,增强脚本的灵活性和健壮性。

exit详细介绍

一、基本语法

exit [N]
  • N:可选参数,表示退出状态码(整数,范围通常为 0~255)。
    • 若省略 Nexit 将返回最后一条命令的执行状态码
    • 状态码可通过 $? 变量在脚本外获取(例如在终端中执行 echo $?)。

二、退出状态码的含义

1. 标准状态码
  • 0:表示脚本正常执行完毕(无错误)。
  • 非 0:表示脚本异常终止或执行过程中出现错误(常见值:1~255)。
2. 常用非零状态码(约定俗成)
状态码含义说明
1通用错误(例如参数错误、文件不存在)。
2Shell 内置命令错误(如 cd 命令失败)。
126命令存在但不可执行(如脚本无执行权限)。
127命令不存在(如拼写错误的命令)。
130脚本被中断信号(如 Ctrl+C)终止。
255非法退出状态码(超出范围的数值会被取模为 255,例如 exit 300 等价于 exit 44)。

三、exit 的典型用法场景

1. 正常退出脚本(返回 0
#!/bin/bash
echo "脚本执行完成"
exit  # 等价于 exit 0
 
  • 执行后,通过 echo $? 可获取状态码 0
2. 异常退出并返回错误码
#!/bin/bash
# 检查文件是否存在
if [ ! -f "data.txt" ]; thenecho "错误:文件 data.txt 不存在!"exit 1  # 退出并返回错误码 1
fiecho "文件存在,继续执行..."
exit 0  # 正常退出
 
  • 若文件不存在,脚本输出错误信息后终止,返回 1;否则返回 0
3. 根据命令执行结果决定是否退出
#!/bin/bash
# 尝试创建目录
mkdir -p "/data/app"
if [ $? -ne 0 ]; then  # $? 存储上一条命令的状态码echo "创建目录失败!"exit 2  # 返回错误码 2
fiecho "目录创建成功"
exit 0
 
  • 通过 $? 判断前一条命令(mkdir)是否执行成功,失败则退出并返回 2
4. 在函数中退出脚本
#!/bin/bash
check_disk_space() {free_space=$(df -h / | awk 'NR==2 {print $4}')if [ "$free_space" -lt "10G" ]; thenecho "磁盘空间不足!"exit 100  # 在函数中直接退出脚本,返回 100fi
}check_disk_space
echo "磁盘空间充足"  # 若空间不足,此行不会执行
exit 0
 
  • 函数中调用 exit 会直接终止脚本,无需返回值传递。

四、注意事项

1. 状态码的范围限制
  • 状态码必须是 0~255 之间的整数,超出范围会被自动取模(例如 exit 300 等价于 exit 44,因为 300 mod 256 = 44)。
2. 子进程中的 exit
  • 在子 Shell(如 (...) 或管道)中执行 exit仅会终止子 Shell,不影响父脚本。例如:
    (echo "子 Shell 开始"exit 1  # 子 Shell 退出,返回码 1
    )
    echo "父脚本继续执行"  # 此行会执行
    echo $?  # 输出 1(子 Shell 的退出码)
    
3. 与 return 的区别
  • exit:用于终止整个脚本,并返回状态码给系统(适用于脚本主流程)。
  • return:用于终止当前函数,并返回状态码给调用者(仅在函数内部使用)。
    func() {return 5  # 函数返回 5,不终止脚本
    }
    func
    echo $?  # 输出 5(函数的返回值)
    

五、最佳实践

  1. 明确返回状态码
    • 正常执行时返回 0,错误时返回有意义的非零码(如 12 等),便于外部脚本或监控工具判断执行结果。
  2. 提前退出
    • 在脚本开头检查必要条件(如权限、文件存在性),不满足时尽早退出并提示错误。
  3. 避免滥用
    • 仅在需要终止脚本时使用 exit,避免在循环或分支中无意义地退出。

六、案例:带状态码的脚本

#!/bin/bash
# 检查当前用户是否为 root
if [ "$USER" != "root" ]; thenecho "错误:必须以 root 身份运行!" >&2  # 错误信息输出到 stderrexit 1  # 非 root 用户,返回 1
fi# 检查磁盘空间
free_space=$(df -BM / | awk 'NR==2 {print $4}' | tr -d 'M')
if [ "$free_space" -lt 100 ]; thenecho "警告:磁盘剩余空间不足 100MB!"exit 2  # 空间不足,返回 2
fiecho "脚本执行成功"
exit 0  # 正常退出,返回 0
 
  • 执行结果:
    $ ./script.sh          # 非 root 用户执行
    错误:必须以 root 身份运行!
    $ echo $?              # 查看状态码
    1$ sudo ./script.sh     # root 用户执行且空间充足
    脚本执行成功
    $ echo $?
    0
    
 

通过合理使用 exit,可以让脚本更健壮、更易调试,尤其在自动化运维和脚本链调用中至关重要。

循环控制

一、for 循环

1. 基本语法(遍历列表)
for 变量名 in 列表元素
do命令序列
done

  • 列表元素:可以是空格分隔的字符串、文件列表、命令输出等。
  • 执行逻辑:变量依次取列表中的每个值,执行循环体。
2. 示例
示例 1:遍历字符串列表
for fruit in apple banana cherry
doecho "当前水果:$fruit"
done
 

输出

 
当前水果:apple
当前水果:banana
当前水果:cherry
示例 2:遍历文件列表
for file in /etc/*.conf
doif [ -f "$file" ]; thenecho "文件:$file"fi
done
示例 3:遍历命令输出
for line in $(cat users.txt)
doecho "用户:$line"
done
3. C 语言风格 for 循环(适用于数值迭代)
for ((初始值; 条件; 增量))
do命令序列
done
 
  • 初始值:变量初始化(如 i=1)。
  • 条件:循环继续的条件(如 i<=10)。
  • 增量:变量更新(如 i++)。
 

示例

 
for ((i=1; i<=5; i++))
doecho "迭代次数:$i"
done
 

输出

 
迭代次数:1
迭代次数:2
迭代次数:3
迭代次数:4
迭代次数:5

二、while 循环

1. 基本语法(条件为真时循环)
while [ 条件 ]
do命令序列
done
 
  • 执行逻辑:先判断条件,若为真则执行循环体,重复直至条件为假。
2. 示例
示例 1:数值累加
sum=0
i=1
while [ $i -le 10 ]
dosum=$((sum + i))i=$((i + 1))
done
echo "1+2+...+10 = $sum"
 

输出

 
1+2+...+10 = 55
示例 2:读取文件逐行处理
while read -r line
doecho "行内容:$line"
done < file.txt
3. 无限循环
while true
doecho "无限循环中...(按 Ctrl+C 终止)"sleep 1
done

三、until 循环

1. 基本语法(条件为假时循环)
until [ 条件 ]
do命令序列
done
 
  • 执行逻辑:先判断条件,若为假则执行循环体,重复直至条件为真(与 while 相反)。
2. 示例
n=10
until [ $n -le 0 ]
doecho "$n"n=$((n - 1))
done
 

输出

 
10
9
8
7
6
5
4
3
2
1

四、循环控制关键字

1. break:跳出当前循环
  • 用法
    for i in 1 2 3 4 5
    doif [ $i -eq 3 ]; thenbreak  # 当 i=3 时,跳出循环fiecho $i
    done
    
 

输出

 
1
2
2. continue:跳过当前迭代,继续下一次循环
  • 用法
    for i in 1 2 3 4 5
    doif [ $i -eq 3 ]; thencontinue  # 当 i=3 时,跳过本次循环fiecho $i
    done
    
 

输出

 
1
2
4
5
3. break n 和 continue n:控制多层循环
  • n 表示跳出 / 跳过的循环层数(默认 n=1,即当前层)。
  • 示例(双层循环)
    for i in a b c
    dofor j in 1 2 3doif [ $j -eq 2 ]; thenbreak 2  # 跳出两层循环(即整个循环)fiecho "$i-$j"done
    done
    
 

输出

 
a-1

五、循环常见应用场景

1. 批量文件操作
# 删除所有 .bak 文件
for file in *.bak
dorm -f "$file"echo "已删除:$file"
done
2. 进度条模拟
echo -n "进度:["
for ((i=0; i<=10; i++))
dosleep 0.5echo -n "#"
done
echo "] 完成"
 

输出

 
进度:##########] 完成
3. 交互式循环(用户输入控制)
while true
doread -p "是否继续?(y/n): " choicecase $choice in[Yy])echo "继续执行...";;[Nn])echo "退出程序"break;;*)echo "无效输入,请重新输入";;esac
done

六、注意事项

  1. 变量引用加引号
    避免列表元素包含空格时被错误分割:

    # 错误(元素包含空格时分割错误)
    for str in "hello world" "hi bash"
    doecho $str  # 正确输出每个元素
    done
    
  2. 避免无限循环
    在 while/until 循环中确保条件最终为真 / 假,否则需用 Ctrl+C 强制终止。

  3. 多层循环性能
    嵌套循环可能影响性能,尽量优化循环逻辑或使用更高效的工具(如 awksed)。

七、循环与数组结合

1. 遍历数组元素
arr=("apple" "banana" "cherry")
for fruit in "${arr[@]}"
doecho "数组元素:$fruit"
done
2. 遍历数组索引
arr=("a" "b" "c")
for i in "${!arr[@]}"  # ${!arr[@]} 获取数组索引
doecho "索引 $i:${arr[$i]}"
done
 

输出

 
索引 0:a
索引 1:b
索引 2:c

总结

循环类型特点适用场景
for 循环遍历固定列表或数值范围,简洁直观批量处理文件、已知次数的任务
while 循环条件为真时持续执行,适合未知次数的循环读取文件、交互式操作
until 循环条件为假时持续执行,逻辑与 while 相反逆序计数、条件反转场景
break/continue控制循环流程,跳出或跳过迭代复杂逻辑分支、提前终止循环

相关文章:

shell脚本之条件判断,循环控制,exit详解

if条件语句的语法及案例 一、基本语法结构 1. 单条件判断 if [ 条件 ]; then命令1命令2... fi2. 双分支&#xff08;if-else&#xff09; if [ 条件 ]; then条件为真时执行的命令 else条件为假时执行的命令 fi3. 多分支&#xff08;if-elif-else&#xff09; if [ 条件1 ]…...

什么是私有IP地址?如何判断是不是私有ip地址

在互联网的世界中&#xff0c;IP地址是设备之间通信的基础标识。无论是浏览网页、发送邮件还是在线游戏&#xff0c;IP地址都扮演着至关重要的角色。然而&#xff0c;并非所有的IP地址都是公开的&#xff0c;有些IP地址被保留用于内部网络&#xff0c;这就是我们所说的私有IP地…...

BGP路由策略 基础实验

要求: 1.使用Preva1策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2.用AS_Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0/24 …...

Java 原生网络编程(BIO | NIO | Reactor 模式)

1、基本常识 Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;是一组接口&#xff0c;使用了门面模式对应用层隐藏了传输层以下的实现细节。TCP 用主机的 IP 地址加上主机端口号作为 TCP 连接的端点&#xff0c;该端点叫做套接字 Socket。 比如三次握手&…...

大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…...

【Java ee初阶】HTTP(4)

构造HTTP请求 1&#xff09;开发中&#xff0c;前后端交互。浏览器运行的网页中&#xff0c;构造出HTTP请求 2&#xff09;调试阶段&#xff0c;通过构造HTTP请求测试服务器 朴素的方案&#xff1a; 通过tcp socket 的方式构造HTTP请求 按照HTTP请求格式&#xff0c;往TCP…...

永久免费!专为 Apache Doris 打造的可视化数据管理工具 SelectDB Studio V1.1.0 重磅发布!

作为全球领先的开源实时数据仓库&#xff0c; Apache Doris Github Stars 已超过 13.6k&#xff0c;并在 5000 余家中大型企业生产环境得到广泛应用&#xff0c;支撑业务核心场景&#xff0c;成为众多企业数据分析基础设施不可或缺的重要基座。过去&#xff0c;Apache Doris 用…...

React中useDeferredValue与useTransition终极对比。

文章目录 前言一、核心差异对比二、代码示例对比1. useDeferredValue&#xff1a;延迟搜索结果更新2. useTransition&#xff1a;延迟路由切换 三、应用场景总结四、注意事项五、原理剖析1. 核心机制对比2. 关键差异3. 代码实现原理 总结 前言 在React的并发模式下&#xff0c…...

Git 项目切换到新的远程仓库地址

已存在的 Git 项目切换到新的远程仓库地址&#xff0c;比如你要换成&#xff1a; gitgithub.com:baoing/test-app.git步骤如下&#xff1a; 查看当前的远程仓库地址&#xff08;可选&#xff09; git remote -v你会看到类似&#xff1a; origin gitgithub.com:old-user/old…...

科技晚报 AI 速递:今日科技热点一览 丨 2025 年 5 月 17 日

科技晚报AI速递:今日科技热点一览 丨2025年5月17日 我们为您汇总今日的科技领域最新动向&#xff0c;带您快速了解前沿技术、突破性研究及行业趋势。 黄仁勋劝特朗普&#xff1a;AI 芯片出口规则得改&#xff0c;中国紧追其后&#xff1a;英伟达 CEO 黄仁勋在华盛顿 “山与谷论…...

基于OpenCV的SIFT特征和FLANN匹配器的指纹认证

文章目录 引言一、概述二、代码解析1. 图像显示函数2. 核心认证函数3. 匹配点筛选4. 认证判断 三、主程序四、技术要点五、总结 引言 在计算机视觉领域&#xff0c;图像特征匹配是一个非常重要的技术&#xff0c;广泛应用于物体识别、图像拼接、运动跟踪等场景。今天将介绍一个…...

【Linux】共享内存

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 ☃️共享内存 &#x1fa84; shmget函数 用来创建共享内存 ✨共享内存的管理指令&#xff1a; &#x1f320; shmid VS key ✨共享内存函数 &#x1f354; shmget() 创建共享内存 &a…...

Cookie、Session、Token

Cookie 1. 什么是cookie? Cookie 是一种由服务器发送到客户端浏览器的小数据片段&#xff0c;用于存储用户的状态信息。例如&#xff0c;用户登录状态或用户偏好设置可以通过Cookie进行管理。计算机cookie更正式地称为 HTTP cookie、网络 cookie、互联网 cookie 或浏览器 coo…...

设计模式Java

UML类图 概述 类图(Class diagram)是显示了模型的静态结构&#xff0c;特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。 类图的作用 在软件工程中&#xff0c;类图是一种静态的结构图&#xff0c…...

Word文档图片排版与批量处理工具推荐

先放下载链接:夸克网盘下载 前几天给大家推荐了 Excel 图片调整软件&#xff0c;当时好多小伙伴问有没有 Word 相关的软件。我在网上找了一圈都没找到合适的&#xff0c;最后在我好久之前记录的一个文档里发现了&#xff0c;这不&#xff0c;马上就来给大家推荐&#xff0c;有…...

[案例五] 实体——赋值质量

最近翻阅了实验室其他人编写的一个“质量赋值”功能,能够直接为实体或组件设定质量。出于好奇,我对其进行了分析。由于自己平时没有用到该功能,所以也借此机会学习一下。 在分析过程中,我发现NX 官方其实并没有提供直接修改质量的功能。一般来说,质量是通过“密度 体积”…...

手撕四种常用设计模式(工厂,策略,代理,单例)

工厂模式 一、工厂模式的总体好处 解耦&#xff1a;客户端与具体实现类解耦&#xff0c;符合“开闭原则”。统一创建&#xff1a;对象创建交由工厂处理&#xff0c;便于集中控制。增强可维护性&#xff1a;新增对象种类时不需要大改动调用代码。便于扩展&#xff1a;易于管理…...

C# 深入理解类(静态函数成员)

静态函数成员 除了静态字段&#xff0c;还有静态函数成员。 如同静态字段&#xff0c;静态函数成员独立于任何类实例。即使没有类的实例&#xff0c;仍然可以调用静 态方法。静态函数成员不能访问实例成员&#xff0c;但能访问其他静态成员。 例如&#xff0c;下面的类包含一…...

数据类型转换

文章目录 基本数据类型&#xff08;primitive type&#xff09;整数类型&#xff1a;浮点类型字符类型boolean类型 类型转换类型转换注意点 基本数据类型&#xff08;primitive type&#xff09; 整数类型&#xff1a; ​ byte占1个字节范围&#xff1a;-128-127 ​ short占…...

深入理解 TypeScript 中的 unknown 类型:安全处理未知数据的最佳实践

在 TypeScript 的类型体系中&#xff0c;unknown 是一个极具特色的类型。它与 any 看似相似&#xff0c;却在安全性上有着本质差异。本文将从设计理念、核心特性、使用场景及最佳实践等方面深入剖析 unknown&#xff0c;帮助开发者在处理动态数据时既能保持灵活性&#xff0c;又…...

AI:人形机器人的应用场景以及商业化落地潜力分析

应用场景分析 人形机器人的设计使其能够适应人类环境&#xff0c;执行多样化任务。以下是未来主要的应用场景及其详细分析&#xff1a; 医疗与护理 具体应用&#xff1a; 老年护理&#xff1a;协助老年人穿衣、洗澡、喂食&#xff0c;或提供情感陪伴。康复辅助&#xff1a;帮助…...

JavaScript入门【3】面向对象

1.对象: 1.概述: 在js中除了5中基本类型之外,剩下得都是对象Object类型(引用类型),他们的顶级父类是Object;2.形式: 在js中,对象类型的格式为key-value形式,key表示属性,value表示属性的值3.创建对象的方式: 方式1:通过new关键字创建(不常用) let person new Object();// 添…...

亲测有效!OGG 创建抽取进程报错 OGG-08241,如何解决?

前言 今天在测试 OGG 一个功能的时候&#xff0c;需要重新初始化 oggca&#xff0c;所以重装了一下 OGG。重建完之后重新添加抽取进程报错&#xff0c;一直无法添加成功&#xff1a; 经过一翻分析&#xff0c;找到了解决方案&#xff0c;本文记录一下解决过程。 问题描述 OG…...

【第二篇】 初步解析Spring Boot

简介 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是为了用来简化Spring应用的初始搭建以及开发过程的。本文章将详细介绍SpringBoot为什么能够简化项目的搭建以及普通的Spring程序的开发。文章内容若存在错误或需改进的地方&#xff0c;欢迎大家指正&#…...

JVM 机制

目录 一、什么是 JVM&#xff1a; 二、JVM 的运行流程&#xff1a; 三、JVM 内存区域划分&#xff1a; 1、( 1 ) 程序计数器&#xff1a; 1、( 2 ) 元数据区&#xff1a; 1、( 3 ) 栈&#xff1a; 1、( 4 ) 堆&#xff1a; 四、类加载&#xff1a; 1、什么时候会触…...

Java泛型详解

文章目录 1. 引言1.1 什么是泛型1.2 为什么需要泛型1.3 泛型的优势2. 泛型基础2.1 泛型类多个类型参数2.2 泛型方法2.3 泛型接口2.4 类型参数命名约定3. 类型擦除3.1 什么是类型擦除3.2 类型擦除的影响1. 无法获取泛型类型参数的实际类型2. 无法创建泛型类型的数组3. 无法使用`…...

机器学习,深度学习,神经网络,深度神经网络之间有何区别?

先说个人观点&#xff1a;机器学习>神经网络>深度学习≈深度神经网络。深度学习是基于深度神经网络的&#xff0c;深度神经网络和浅层神经网络都是神经网络&#xff0c;而机器学习是包括神经网络在内的算法。 一、机器学习 先说涵盖范围最广的机器学习。机器学习&#…...

AtomicInteger

AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子类&#xff0c;用于在多线程环境下对整数进行原子操作。 核心特性 原子性 提供线程安全的原子操作&#xff08;如自增、加法、比较并交换等&#xff09;&#xff0c;确保在多线程环境中操作不会被中…...

威布尔比例风险模型(Weibull Proportional Hazards Model, WPHM)详解:原理、应用与实施

威布尔比例风险模型&#xff08;Weibull Proportional Hazards Model, WPHM&#xff09;详解&#xff1a;原理、应用与实施 一、核心原理&#xff1a;从威布尔分布到比例风险模型 1. 威布尔分布的数学本质 威布尔分布通过两个关键参数&#xff08;形状参数 (k) 和尺度参数 (\…...

Dubbo:Docker部署Zookeeper、Dubbo Admin的详细教程和SpringBoot整合Dubbo的实战与演练

&#x1fa81;&#x1f341; 希望本文能给您带来帮助&#xff0c;如果有任何问题&#xff0c;欢迎批评指正&#xff01;&#x1f405;&#x1f43e;&#x1f341;&#x1f425; 文章目录 一、背景二、Dubbo概述三、Dubbo与SpringCloud的关系四、Dubbo技术架构五、Docker安装Zoo…...

Windows 上安装下载并配置 Apache Maven

1. 下载 Maven 访问官网&#xff1a; 打开 Apache Maven 下载页面。 选择版本&#xff1a; 下载最新的 Binary zip archive&#xff08;例如 apache-maven-3.9.9-bin.zip&#xff09;。 注意&#xff1a;不要下载 -src 版本&#xff08;那是源码包&#xff09;。 2. 解压 Mave…...

Unbuntu 命令

Ubuntu 命令速查表​ ​分类​​命令​​功能描述​​示例/常用选项​​​​文件与目录​ls列出目录内容ls -a&#xff08;显示隐藏文件&#xff09;; ls -lh&#xff08;详细列表易读大小&#xff09; cd切换目录cd ~&#xff08;主目录&#xff09;; cd ..&#xff08;上级…...

机器学习-人与机器生数据的区分模型测试-数据处理1

附件为训练数据&#xff0c;总体的流程可以作为参考。 导入依赖 import pandas as pd import os import numpy as np from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.ensemble import RandomForestClassifier,VotingClassifier from skle…...

【Linux】进程间通信(一):认识管道

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲进程间通信——认识管道 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础&a…...

AMD Vivado™ 设计套件生成加密比特流和加密密钥

概括 重要提示&#xff1a;有关使用AMD Vivado™ Design Suite 2016.4 及更早版本进行 eFUSE 编程的重要更新&#xff0c;请参阅AMD设计咨询 68832 。 本应用说明介绍了使用AMD Vivado™ 设计套件生成加密比特流和加密密钥&#xff08;高级加密标准伽罗瓦/计数器模式 (AES-GCM)…...

第三十四节:特征检测与描述-SIFT/SURF 特征 (专利算法)

一、特征检测:计算机视觉的基石 在计算机视觉领域中,特征检测与描述是实现图像理解的核心技术。就像人类通过识别物体边缘、角点等特征来认知世界,算法通过检测图像中的关键特征点来实现: 图像匹配与拼接 物体识别与跟踪 三维重建 运动分析 其中,SIFT(Scale-Invariant F…...

【AI】SpringAI 第二弹:基于多模型实现流式输出

目录 一、基于多模型实现流式输出 1.1 什么是流式输出 1.2 多模型引入 1.3 代码实现 1.3.1 流式输出的API介绍 1.3.2 Flux 源码分析 二、了解 Reactor 模型 三、SSE 协议 一、基于多模型实现流式输出 1.1 什么是流式输出 流式输出(Streaming Output)是指数据在生成过程…...

SQL语句执行问题

执行顺序 select [all|distinct] <目标列的表达式1> AS [别名], <目标列的表达式2> AS [别名]... from <表名1或视图名1> [别名],<表名2或视图名2> [别名]... [where <条件表达式>] [group by <列名>] [having <条件表达式>] [ord…...

模型量化AWQ和GPTQ哪种效果好?

环境&#xff1a; AWQ GPTQ 问题描述&#xff1a; 模型量化AWQ和GPTQ哪种效果好? 解决方案&#xff1a; 关于AWQ&#xff08;Adaptive Weight Quantization&#xff09;和GPTQ&#xff08;Generative Pre-trained Transformer Quantization&#xff09;这两种量化方法的…...

Github 2025-05-17 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…...

借助 CodeBuddy 打造我的图标预览平台 —— IconWiz 开发实录

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 想做一款自己的图标预览平台 这段时间我在做前端 UI 设计时&#xff0c;常常需要到处找图标素材&#xff0c;复…...

KL散度 (Kullback-Leibler Divergence)

KL散度&#xff0c;也称为相对熵 (Relative Entropy)&#xff0c;是信息论中一个核心概念&#xff0c;用于衡量两个概率分布之间的差异。给定两个概率分布 P ( x ) P(x) P(x) 和 Q ( x ) Q(x) Q(x)&#xff08;对于离散随机变量&#xff09;或 p ( x ) p(x) p(x) 和 q ( x …...

【Linux网络】NAT和代理服务

NAT 之前我们讨论了&#xff0c;IPv4协议中&#xff0c;IP地址数量不充足的问题。 原始报文途径路由器WAN口时&#xff0c;对报文中的源IP进行替换的过程&#xff0c;叫做NAT。 NAT技术当前解决IP地址不够用的主要手段&#xff0c;是路由器的一个重要功能&#xff1a; NAT能…...

DeepSeek赋能电商,智能客服机器人破解大型活动人力困境

1. DeepSeek 与电商客服结合的背景 1.1 电商行业客服需求特点 电商行业具有独特的客服需求特点&#xff0c;这些特点决定了智能客服机器人在该行业的必要性和重要性。 高并发性&#xff1a;电商平台的用户数量庞大&#xff0c;尤其是在促销活动期间&#xff0c;用户咨询量会…...

Unity序列化字段、单例模式(Singleton Pattern)

一、序列化字段 在Unity中&#xff0c;序列化字段是一个非常重要的概念&#xff0c;主要用于在Unity编辑器中显示和编辑类的成员变量&#xff0c;或者在运行时将对象的状态保存到文件或网络中。 1.Unity序列化字段的作用 在编辑器中显示和编辑字段&#xff1a;默认情况下&…...

一个可拖拉实现列表排序的WPF开源控件

从零学习构建一个完整的系统 推荐一个可通过拖拉&#xff0c;来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目&#xff0c;用于在WPF应用程序中实现拖放功能&#xff0c;可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…...

hadoop.proxyuser.代理用户.授信域 用来干什么的

在Hadoop的core-site.xml文件中存在三个可选配置&#xff0c;如下 <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><name>hadoop.proxyuser.root.groups</name><value…...

python 自动化教程

文章目录 前言整数变量​字符串变量​列表变量​算术操作​比较操作​逻辑操作​if语句​for循环遍历列表​while循环​定义函数​调用函数​导入模块​使用模块中的函数​启动Chrome浏览器​打开网页​定位元素并输入内容​提交表单​关闭浏览器​发送GET请求获取网页内容​使…...

C++学习:六个月从基础到就业——C++11/14:列表初始化

C学习&#xff1a;六个月从基础到就业——C11/14&#xff1a;列表初始化 本文是我C学习之旅系列的第四十三篇技术文章&#xff0c;也是第三阶段"现代C特性"的第五篇&#xff0c;主要介绍C11/14中的列表初始化特性。查看完整系列目录了解更多内容。 引言 在C11之前&a…...

城市静音革命:当垃圾桶遇上缓冲器

缓冲垃圾桶的核心原理是通过机械或液压装置实现垃圾桶盖的缓慢闭合&#xff0c;包含以下技术要点&#xff1a;‌能量吸收机制‌液压式&#xff1a;通过活塞挤压油液产生阻尼力&#xff0c;将动能转化为热能耗散弹簧式&#xff1a;利用弹性变形储存和释放能量&#xff0c;配合摩…...