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 号,既然是唯一标识,这…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...









