shell条件测试
目录
1.1.用途
1.2.基本语法
1.2.1.格式:
1.2.2.例
1.3 文件测试
1.4.整数测试
1.4.1.作用
1.4.2.操作符
1.4.3.示例:
1.5.逻辑操作符
1.5.1.符号
1.5.2.例:
1.6.命令分隔符
1.1.用途
为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符.
通过这些运算符,shell程序能够判断某种或者几个条件是否成立。
条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以了解和掌握这些条件测试是非常重要的
1.2.基本语法
1.2.1.格式:
格式1: test -参数 条件表达式
格式2: [ 条件表达式 ] # 注意: [ ] 的左右要有空格
格式3: [[ 条件表达式 ]] # 注意: [ ] 的左右要有空格,格式1.2的增强版本,支持通配符 # 只有[[ ]]可以支持并且启用双重正则
格式4: ((条件表达式))注意:
test单独使用,判断条件为真,echo s?返回0,假返回1
test与[ ]等价
[[ ]] 是扩展命令,可以使用通配符等进行模式匹配,&& >等操作符可以直接应用于双中括号中,但不能用于单中括号中
(())一般用于if语句里,两端不需要有空格,测试对象为整数在[ ]中参数:-a并且,-o或者
1.2.2.例
格式一:
test -参数 条件表达式
测试passwd是否为普通文件
[root@server ~]# test -f /etc/passwd # -f 是否为普通文件
[root@server ~]# echo $? # 以上俩条命令要配合使用# 返回值0成立,返回值1不成立。
# test配合自编逻辑表示
[root@server ~]# test -f /etc/hosts && echo 1 || echo 0
1
[root@server ~]# test -f /etc/a1.txt && echo 1 || echo 0
0
# 解析:并且(&&):左侧成立则右侧执行,
或者(||):左侧成立则右侧不执行
扩展:
[root@server ~]# test -f /etc/hosts && echo "文件为普通文件" || echo "文件不为普通文件"
文件为普通文件
[root@server ~]# test -f /etc/a1.txt && echo "文件为普通文件" || echo "文件不为普通文件"
文件不为普通文件
格式二:
[ 条件表达式 ] # 注意: [ ] 的左右要有空格 # test与[ ]等价
[root@server ~]# [ -f /etc/hosts ] && echo 1 || echo 0
1
[root@server ~]# [ -f /etc/a1.txt ] && echo 1 || echo 0
0
[root@server ~]# [ -f /etc/hosts ] && echo "文件为普通文件" || echo "文件不为普通文件"
文件为普通文件
[root@server ~]# [ -f /etc/a1.txt ] && echo "文件为普通文件" || echo "文件不为普通文件"
文件不为普通文件
[root@server ~]# [ 3 > 2 && 1 < 2 ] && echo yes ||echo no
-bash: [: 缺少 `]' # 不支持通配符等进行模式匹配
no
格式三:
[[ 条件表达式 ]] # 注意: [ ] 的左右要有空格,格式1.2的增强版本,支持通配符
[root@server ~]# [[ 3>2 || 1>2 ]]
-bash: 条件命令中有未预期的符号 284
-bash: “3>”附近有语法错误 # 报错原因<, > 俩侧需要加空格&&(并且):
[root@server ~]# [[ 3 > 2 && 1 > 2 ]] && echo yes ||echo no
no
[root@server ~]# [[ 3 < 2 && 1 > 2 ]] && echo yes || echo no
no
[root@server ~]# [[ 3 < 2 && 1 > 2 ]] && echo yes || echo no
no
[root@server ~]# [[ 3 < 2 && 1 < 2 ]] && echo yes || echo no
no
[root@server ~]# [[ 3 > 2 && 1 < 2 ]] && echo yes ||echo no
yes # 结论:左右都成立才返回真||(或者):
[root@server ~]# [[ 3 > 2 || 1 > 2 ]] && echo yes ||echo no
yes[root@server ~]# [[ 3 > 2 || 1 > 2 ]] && echo yes || echo no
yes
[root@server ~]# [[ 3 < 2 || 1 < 2 ]] && echo yes || echo no
yes
[root@server ~]# [[ 3 < 2 || 1 > 2 ]] && echo yes || echo no
no # 结论:只要左右有一方成立则返回为真[root@server ~]# [[ -f /etc/passwd ]] && echo 1 || echo 0
1
格式四:
((条件表达式)) # 一般只支持整数的操作
[root@server ~]# ((3>5)) && echo 1 || echo 0
0
[root@server ~]# ((3<5)) && echo 1 || echo 0
1不可执行:
[root@server ~]# ((3.1<5)) && echo 1 || echo 0
-bash: ((: 3.1<5:语法错误: 无效的算术运算符 (错误符号是 ".1<5")
0[root@server ~]# ((-f /etc/passwd)) && echo 1 || echo 0
-bash: ((: -f /etc/passwd:除以 0 (错误符号是 "etc/passwd")
0
1.3 文件测试
可使用以下命令的参数:test ,[ ] [[ ]]
参数 作用 -b 文件名 检测文件是否是块设备文件,是返回 true -c 文件名 是否是字符设备文件 -d 文件名 是否是目录 -f 文件名 是否是普通文件 (不是目录,也不是设备文件) -S 文件名 是否为socket文件 -P 文件名 是否为管道符文件 -L 文件名 是否为链接文件 -u 文件名 是否有suid的权限 -s 文件名 是否为空(文件大小是否大于0) ,不为空返回 true -e 文件名 检测文件 (包括目录)是否存在,如果是,则返回 true -r 文件名 检测文件是否可读,如果是,则返回 true。 -w 文件名 检测文件是否可写,如果是,则返回 true -X 文件名 检测文件是否可执行,如果是,则返回 true -n 参数 检测数字是否为整数 f1 -nt f2 文件f1比文件f2新则为真 (根据文件修改时间计算) f1 -ot f2 文件f1比文件f2旧则为真 (根据文件修改时间计算)
例:
[root@server ~]# [ -e /etc/passwd ] && echo yes || echo no
yes
[root@server ~]# [ -f /etc/passwd ] && echo yes || echo no
yes
[root@server ~]# [ -d /etc/passwd ] && echo yes || echo no
no
[root@server ~]# [ -d /etc ] && echo yes || echo no
yes
[root@server ~]# [ -s /etc/passwd ] && echo yes || echo no
yes
[root@server ~]# [ -x /bin/over ] && echo yes || echo no
yes
# d开头的均为块文件。c 为字符串文件, l开头为链接文件
则有:
[root@server ~]# [ -c /dev/sr0 ] && echo yes || echo no
no
[root@server ~]# [ -b /dev/sr0 ] && echo yes || echo no
yes[root@server ~]# [ -L /dev/cdrom ] && echo yes || echo no
yes # 光盘的快捷方式
[root@server ~]# touch /etc/a.txt
[root@server ~]# [ -s /etc/a.txt ] && echo yes || echo no
no
[root@server ~]# echo "hello world" > /etc/a.txt
[root@server ~]# [ -s /etc/a.txt ] && echo yes || echo no
yes读,写,执行:
[root@server ~]# ll /etc/a.txt
-rw-r--r--. 1 root root 12 12月 10 16:30 /etc/a.txt
[root@server ~]# [ -r /etc/a.txt ] && echo yes || echo no
yes
[root@server ~]# [ -w /etc/a.txt ] && echo yes || echo no
yes
[root@server ~]# [ -x /etc/a.txt ] && echo yes || echo no
nof1 -nt f2:比较的主要是最近改动时间
例题:编写脚本,测试根目录文件是否存在,文件名从键盘输入,若不存在则创建
方法一:使用read命令来获取变量名
[root@server ~]# vim test1.sh
#!/bin/bash read -p "请输入文件名称:" filename if test -e /$filename thenecho "$filename exists and it is a normal file" elseecho "$filename doesn't exit!!"echo "create file $filename"touch /$filename fi
执行查看/下是否存在mnt,并且查看nmt是否存在,若不存在则创建
方法二:使用位置变量来获取变量名
[root@server ~]# vim test1.sh
#!/bin/bash filename=$1 if test -e /$filename thenecho "$filename exists and it is a normal file" elseecho "$filename doesn't exit!!"echo "create file $filename"touch /$filename fi
执行查看/下是否存在mnt,并且查看mnnt是否存在,若不存在则创建
注意:使用find检索文件,无论成功与否状态码均为一
1.4.整数测试
1.4.1.作用
用于比较两个数值的大小关系,操作的对象是数值
1.4.2.操作符
整数二元比较操作符使用参考
#知识扩展
在[ ]以及 test 中使用的比较符号 在(())和[[ ]] 中使用的比较符号 说明 -eq ==或= 相等,全拼为 equal -ne != 不相等,全拼为 not equal -gt > 大于,全拼为 greater than -ge >= 大于等于,全拼为 greater equal -lt < 小于,全拼为 less than -le <= 小于等于,全拼为 less equal
#=~ : 检查左侧内容是否匹配右侧的正则表达式
1.4.3.示例:
[root@server ~]# [ 6 -gt 3 ] && echo yes || echo no
yes
[root@server ~]# [ 6 -lt 3 ] && echo yes || echo no
no
[root@server ~]# test 6 -lt 3 && echo yes || echo no
no
[root@server ~]# test 6 -gt 3 && echo yes || echo no
yes
[root@server ~]# [[ 6 < 3 ]] && echo yes || echo no
no
[root@server ~]# [[ 6 > 3 ]] && echo yes || echo no
yes
[root@server ~]# ((6>3)) && echo yes || echo no
yes
[root@server ~]# ((6<3)) && echo yes || echo no
no
[root@server ~]# ((6 < 3)) && echo yes || echo no
no
#=~ : 检查左侧内容是否匹配右侧的正则表达式
[root@server ~]# n1=123
[root@server ~]# [[ $n1 =~ ^[0-9]+$ ]] && echo yes || echo no
yes # 匹配n1内的内容是否全为数字[root@server ~]# n1=123abd
[root@server ~]# [[ $n1 =~ ^[0-9]+$ ]] && echo yes || echo no
no
[root@server ~]# n1="china"
[root@server ~]# [[ $n1 =~ ^[0-9]+$ ]] && echo yes || echo no
no
例题一:编写表达式,测试系统用户以50个为界限输出相关信息。(多余或少于)
[root@server ~]# [[ $(cat /etc/passwd |wc -l) > 50 ]] && echo "用户大于50" || echo "用户小于50"
用户小于50
例题二:判断当前的已登录的账户数,超过5个则输出提示信息
方法一:
[root@server ~]# who |cut -d " " -f1 | sort -u | wc -l # 过滤登陆用户个数
1# who:查看账户信息
# cut -d " " -f1: 以空格作为列间隔符,截取第1列
# sort -u : 去重后排序
[root@server ~]# [ $(who |cut -d " " -f1 | sort -u | wc -l) -lt 5 ] && echo "登陆用户数小于5" || echo "登陆用户数大于5"
登陆用户数小于5方法二:
[root@server ~]# num=$(who |cut -d " " -f1 | sort -u | wc -l)
[root@server ~]# [ $num -lt 5 ] && echo "登陆用户数小于5" || echo "登陆用户数大于5"
登陆用户数小于5
例三:如果/var/log/messages 文件行数大于50行,则显示提示信息
方法一:
[root@server ~]# mnu=$(cat /var/log/messages | wc -l)
[root@server ~]# echo $mnu
102
[root@server ~]# [ $mnu -gt 50 ] && echo "文件行数大于50" || echo "文件行数小于50"
文件行数大于50方法二:
[root@server ~]# [ $(cat /var/log/messages | wc -l) -lt 50 ] && echo "文件行数小于50" || echo "文件行数大于50"
文件行数大于50
[root@server ~]# [ $(cat /var/log/messages | wc -l) -gt 50 ] && echo "文件行数大于50" || echo "文件行数小于50"
文件行数大于50[root@server ~]# (( $(cat /var/log/messages | wc -l) > 50 )) && echo "文件行数大于50" || echo "文件行数小于50"
文件行数大于50
注意:[root@server ~]# [[ $(cat /var/log/messages | wc -l) > 50 ]] && echo "文件行数大于50" || echo "文件行数小于50"
文件行数小于50# 答案错误,原因:双方括号
[[ ]]
,它是 Bash shell 特有的条件判断符号。在这个命令中,$(cat /var/log/messages | wc -l)
的计算方式与第一个命令相同。然而,条件判断符号>
在双方括号中被解释为字符串的比较而不是数字的比较,因此结果是错误的。
例三:编写一个脚本mkfs.sh,功能: 显示root账户下的文件信息,之后建立一个aa目录,在aa目录中新建一个文件bb.txt,并修改为可执行的权限
[root@server ~]# vim mkfs.sh
# Author: xx # Email: xx@163.com # Organization: http://www.xx.com/xx/ # Created Time : 2023-12-10 18:40:07 # Description: ############################################################## ls /root mkdir /root/aa touch /root/aa/bb.sh chmod a+x /root/aa/bb.txt
[root@server ~]# bash mkfs.sh
例四: 编写脚本mkd.sh,从键盘输入一个目录名,判断是否存在,不存在则创建
方法一:
[root@server ~]# vim mkd.sh
# 任务:编写脚本mkd.sh,从键盘输入一个目录名,判断是否存在,不存在则创建read -p "请输入一个目录名称:" dir[ -d /$dir ] && ls -l $dir && echo "目录$dir存在" || echo "$dir目录不存在,创建目录$dir" && mkdir /$dirls /
测试:查看根目录下是否有haha目录
方法二:
#!/bin/bash # 任务:编写脚本mkd.sh,从键盘输入一个目录名,判断是否存在,不存在则创建read -p "请输入一个目录名称:" dir[ -d /$dir ] && ls -l $dir && echo "目录$dir存在" || (echo "$dir目录不存在,创建目录$dir" ; mkdir /$dir;ls -l /)
注意: ";" 链接括号中多个子语句,从左到右一次执行
测试:查看根目录下是否有haha目录
例5: 编写脚本sum1.sh,从键盘读入俩个整数存储到x,y中,计算其和值后输出
方法一:(缺点:每输入一次(无论对错)就要执行一次.sh文件)
read -p "输入整数x:" x read -p "输入整数y:" y [[ $x =~ ^[0-9]+$ ]] && [[ $y =~ ^[0-9]+$ ]] && echo "输出整数x+y的结果;$[x+y]" || echo ">请输入数字"
方法二:
read -p "输入整数x:" x read -p "输入整数y:" y if [ -n $x -a -n $y ] # 判断是否为空 thenif [[ $x =~ ^[0-9]+$ && $y =~ ^[0-9]+$ ]] # 判断是否为数字thensum=$[x+y]echo "俩参数和为$sum"elseecho "请输入数字"fi elseecho "请输入有效数字"fi
例6: 编写脚本user1.sh,显示所有账户,选择一个账户输入,若id为0则表示管理员,否则表示其他账户
首先取出账户名:paswd文件的第列
[root@server ~]# cat /etc/passwd | cut -d ":" -f1
去重并排序:
[root@server ~]# cat /etc/passwd | cut -d ":" -f1 | sort -u
[root@server ~]# vim user2.sh
#!/bin/bashcat /etc/passwd |cut -d ":" -f1 | sort -u read -p "请输入账户名" name [ $(id -u $name) -eq 0 ] && echo "该账户为管理员" || echo "此账户为普通用户"
例7: 编写脚本line1.sh,统计/etc/sos/sos.conf文件中的空白行,若有空白行则显示行数,否则输出提示信息(空白行:行首行尾以及中间没有内容"^$"来表示空白行)
[root@server ~]# grep ^$ /etc/sos/sos.conf |wc -l
4 # 输出文件中的空白行 (使用正则表达式中的^:行首,$:行尾表示。)[root@server ~]# vim line1.sh
#!bin/bash num=$( grep ^$ /etc/sos/sos.conf |wc -l )if [ $num -gt 0 ] then echo "/etc/sos/sos.conf有$num行"echo "行好为:"grep -n ^$ /etc/sos/sos.conf else echo “该文件没有空白行” fi
扩展:将以上服务业务扩展到任何可读文件
read -p "输入文件路径:" filenamenum=$( grep ^$ /$filename |wc -l )if [ $num -gt 0 ] thenecho "/$filename有$num行"echo "行号为:"grep -n ^$ /$filename elseecho “该文件没有空白行” fi
1.5.逻辑操作符
1.5.1.符号
逻辑操作符
在[]和 test 中使用的操作符 在[[ ]] 和(())中使用的操作符 说明 -a && and,与,两端都为真,则结果为真 -o || or,或,两端有一个为真,则结果为真 ! ! not,非,两端相反,则结果为真
1.5.2.例:
root@server ~]# [ -f /etc/passwd -a -f /etc/services ] && echo 1 || echo 0
1
[root@server ~]# [ -f /etc/passwd -o -f /etc/services ] && echo 1 || echo 0
1[root@server ~]# [ -f /etc/passwd -a -d /etc/services ] && echo 1 || echo 0
0
[root@server ~]# [ -f /etc/passwd -o -d /etc/services ] && echo 1 || echo 0
1
1.6.命令分隔符
cmd1;cmd2 以独立的进程依次执行cmd1和cmd2
(cmd1;cmd2) 在同一进程中依次执行cmd1和cmd2
cmd1&cmd2 cmd1和cmd2同时执行,分属于不同的进程
cmd1&&cmd2 当cmd1为真时,则执行cmd2
cmd1llcmd2 当cmd1不为真时,则执行cmd2
cmd& 后台执行
例:
判断一个账户是否存在,若账户fox10不存在,则添加账户
[root@server ~]# id fox10 &> /dev/null && echo "fox10已存在" || useradd fox10
# 第一次执行命令无返回值,原因,系统判断无fox10因此添加账户ox10
[root@server ~]# id fox10 &> /dev/null && echo "fox10已存在" || useradd fox10
fox10已存在 # 由于上一次执行命令时以添加fox10因此显示已存在注意: &> /dev/null 表示将左侧命令执行的正确(或错误)输出到“黑洞”即不显示到屏幕
相关文章:

shell条件测试
目录 1.1.用途 1.2.基本语法 1.2.1.格式: 1.2.2.例 1.3 文件测试 1.4.整数测试 1.4.1.作用 1.4.2.操作符 1.4.3.示例: 1.5.逻辑操作符 1.5.1.符号 1.5.2.例: 1.6.命令分隔符 1.1.用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&am…...
python在线读取传奇列表,并解析为需要的JSON格式
python在线读取传奇列表,并解析为需要的JSON格式,以下为传奇中使用的TXT列表格式, [Server] ; 使用“/”字符分开颜色,也可以不使用颜色,支持以前的旧格式,只有标题和服务器标题支持颜色 ; 标题/颜色代码(0-255)|服务器标题/颜色代码(0-255)|服务器名称|服务器IP|服务器端…...

【docker 】 安装docker(centOS7)
官网 docker官网 github源码 官网 在CentOS上安装Docker引擎 官网 在Debian上安装Docker引擎 官网 在 Fedora上安装Docker引擎 官网 在ubuntu上安装Docker引擎 官网 在RHEL (s390x)上安装Docker引擎 官网 在SLES上安装Docker引擎 最完善的资料都在官网。 卸载旧版本 …...
智能网联汽车场景数据图像标注要求及方法
智能网联汽车场景数据图像标注要求及方法 1 范围 本标准规定了智能网联汽车场景数据图像中交通参与者、交通信号灯、交通标志、交通标线、可行驶区域、光照条件、遮挡截断情况7类元素的标注要求及方法。 本标准适用于智能网联汽车图像数据标注。 2 规范性引…...

四. 基于环视Camera的BEV感知算法-BEVFormer
目标 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. BEVFormerv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第四章—…...

gin投票系统3
对应视频v1版本 1.优化登陆接口 将同步改为异步 原login前端代码: <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>香香编程-投票项目</title> </head> <body> <m…...

windows如何解决端口冲突(实用篇)
在项目设计中,环境配置成功点击运行瞬间,一大堆红爆出,8080端口占用,这个是很烦人的。。。 解决方式: 笨方法:一、查看所有端口实用情况(挨个扫) 按住【WINR】快捷键打开运行输入…...

「PPT 下载」Google DevFest Keynote | 复杂的海外网络环境下,如何提升连接质量
(全网都在找的《社交泛娱乐出海作战地图》,点击获取👆) 12 月 10 日,“Google DevFest 2023 上海站”大会如期在上海市东方万国宴会中心举办。延续过往的技术交流碰撞、前沿技术学习基调传统,本届大会聚焦行…...

Logstash输入Kafka输出Es配置
Logstash介绍 Logstash是一个开源的数据收集引擎,具有实时管道功能。它可以从各种数据源中动态地统一和标准化数据,并将其发送到你选择的目的地。Logstash的早期目标主要是用于收集日志,但现在的功能已经远远超出这个范围。任何事件类型都可…...

Bash脚本处理ogg、flac格式到mp3格式的批量转换
现在下载的许多音乐文件是flac和ogg格式的,QQ音乐上下载的就是这样的,这些文件尺寸比较大,在某些场合使用不便,比如在车机上播放还是mp3格式合适,音质这些在车机上播放足够了,要求不高。比如本人就喜欢下载…...
Android 依据Build相关信息判断机型
Android 依据Build相关信息判断机型 本文主要通过Build的相关信息获取机型,目前机型判断的较少,后续继续维护更新 public static String parseBuild() {StringBuilder sb new StringBuilder();String deriveFingerprint Build.FINGERPRINT;String manufacturer Build.MANU…...

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项一阶段样题一
2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防…...

ARM:作业3
按键中断代码编写 代码: key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gic.h"void key1_it_config(); voi…...

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含python、JS工程源码)+数据集+模型(二)
目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架,引入CNN进行模型训练,采用Dropout梯度…...
*上位机的定义
上位机是指在分布式控制系统中,负责监控和控制下位机(也称为远程终端设备)的计算机或者计算机网络。它通常是一个高性能的计算设备,运行着特定的监控软件,用于实时监测、控制和管理下位机设备。 上位机负责与各个下位…...

架构LAMP
目录 1.什么是LAMP 2.LAMP组成及作用 3.搭建Apache httpd服务 4.编译安装mysqld 服务 5.编译安装PHP 解析环境 6.安装论坛 1.什么是LAMP LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务…...
vue实现浏览器不同分辨率下的不同样式,css的媒体查询与js判断当前浏览器宽度
前言: 实现实现浏览器不同分辨率下的不同样式的方法很多,这里整理两种,1个是css的媒体查询来实现,另一个是js判断当前浏览器的宽度,然后动态给他添加不同的class名,或者动态用style修改样式,添加…...

CentOS7 安装包 MariaDB 10.4.x
CentOS7 安装包 MariaDB 10.4.x 统一 MariaDB安装包 https://www.alipan.com/s/fvLg3gN7LPX 提取码: nh81 打开「阿里云盘」...
js中箭头函数简单介绍
1.箭头函数是 ES6 中新增的一种函数定义方式, 简单举例为 var nameA function(a){return a} 可以用箭头函数简化为 var nameA a >a; 返回的是你输入的值 比如 nameA(5) 返回的就是5 nameA(2) 返回的就是2 以上两个表达的含义是一样的。nameA为名字 2.…...

分布式ID服务实践
背景 分布式场景下需要一个全局 ID 来标识唯一性,比如在单数据库时通过表唯一主键即可实现唯一 ID,分库分表时就需要全局唯一 ID。 业务对唯一 ID 的要求如下: 全局唯一性 不能出现重复的 ID 号,既然是唯一标识,这…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...