shell 循环语句
一、命令补充
1. echo 命令
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符有:
| 选项 | 作用 |
|---|---|
| \r | 光标移至行首,并且不换行 |
| \s | 当前shell的名称,如bash |
| \t | 插入Tab键,制表符 |
| \n | 输出换行 |
| \f | 换行,但光标仍停留在原处 |
| \ | 表示插入"\"本身转义 |
| \b | 表示退格 不显示前一个字符 |
| \c | 抑制更多的输出或不换行 |
关于 \b 用法
[root@localhost ~]#echo -e "12345\b678"
##退格删除前面的字符
1234678
[root@localhost ~]#echo -e "12345\b\b678"
123678
[root@localhost ~]#echo -e "12345\b\b\b678"
12678
[root@localhost ~]#echo -e "12345\b\b\b\b678"
16785
###注意退格键和末尾的字符相关,超过末尾的字符数量 会出bug
关于换行
[root@localhost ~]#echo "123456"
123456
#正常换行输出[root@localhost ~]#echo -n "123456"
123456[root@localhost ~]#
#不换行输出[root@localhost ~]#echo -e "123456\c"
123456[root@localhost ~]#
[root@localhost ~]#echo -e "123456\c789"
123456[root@localhost ~]####\c 注意 使用在数字中间会把后面内容删除使用 \n 可以实现输出换行(回车)的操作。比如实现自动硬盘分区#!/bin/bash
read -p "请输入你要分区的设备(/dev/sd*):" disk
read -p "请输入你要分区的大小(+数字G):" numecho -e "n\n\n\n\n${num}\nw\n " | fdisk ${disk}
2. data 命令
- date查看当前系统时间
- -d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
- %F 完整日期格式,等价于 %Y-%m-%d
- %T 时间(24小时制)(hh:mm:ss)
[root@localhost data]#date #查看当前系统时间
2024年 01月 25日 星期四 22:33:46 CST[root@localhost data]#date +%F #完整格式显示日期
2024-01-25[root@localhost data]#date +%T #完整格式显示时间
22:40:39[root@localhost data]#date +%F-%T #时间与日期使用 - 号分隔
2024-01-25-22:42:37
[root@localhost data]#date '+%F '%T #时间与日期使用 空格 号分隔
2024-01-25 22:42:48[root@localhost data]#date -d "-3 day" #前三天
2024年 01月 22日 星期一 22:45:40 CST[root@localhost data]#date -d "+3 day" #后三天
2024年 01月 28日 星期日 22:45:46 CST[root@localhost data]#date -d '-3 day' '+%F '%T
2024-01-22 22:46:20日历:
[root@localhost data]#cal 2024
#查看日历[root@localhost data]#cal 9 2024 #查看哪一年哪一月的日历。九月 2024
日 一 二 三 四 五 六1 2 3 4 5 6 78 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30关于 计划任务 crontab 里 不能有 % 号,想要使用 要加 \ 转义符30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`!!!!!!!!!不加转义符号无法识别!!!!!!!!!!!
30 2 * * * /bin/cp -a /etc/ /data/etc`date +‘%F_%T’` #无法执行。
3. seq
[root@localhost data]#seq 3
1
2
3[root@localhost data]#seq 1 2 10
#从1 开始 步长为2 到10 为止
1
3
5
7
9[root@localhost data]#seq 0 2 10
#从 0 开始 步长为 2 到10 为止 都为偶数。
0
2
4
6
8
10[root@localhost data]#seq 3 -1 1
#从 3 开始 依次 减 1 ,到 1 为止。
3
2
1[root@localhost data]#seq 3 -1 -1
3
2
1
0
-1
二、for 循环
循环含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
- 循环次数事先已知 for
- 循环次数事先未知 while until
常见的循环的命令:for, while, until
列表循环
语法:
for 变量名 in {list}
docommand(需要循环的事件)
donefor i in {1..10}
doecho "i=$i"
done1.for循环有次数
2.for循环开始时,会对变量i进行赋值
3.for循环在赋值后,会执行do 和done之间的代码
4.for循环在第一次循环后执行到done,再次赋值第二个
5.for循环在赋值后,会执行do 和done之间的代码
6.for循环在第一次循环后执行到done,再次赋值第三个
7.for循环在赋值后,会执行do 和done之间的代码
花括号的用法
花括号{}和seq在for循环的应用:
for i in {1..50..2} 1-50的奇数
doecho "$i"
donefor i in {2..50..2} 2-50的偶数
for i in {10..1} 1-10倒序排列$() 和 `` 都是调用命令的执行结果。for i in $(seq 10) 1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长#要想有结果要在后面输入完整的格式。
不带列表循环
语法:
for 变量名
docommand
done
例子:
1. 打印 hello
[root@server ~]# vim for2.sh #!/bin/bash
for i
doecho hello
done[root@server ~]#bash for2.sh
#没有给脚本传参所以执行了没有结果[root@server ~]#bash for2.sh a
#把a赋值给变量i,i有值了它就开始执行do..done了
hello
类似于C语言风格的for循环
语法:
for (( 表达式1; 表达式2; 表达式3 )); do 命令; donefor ((expr1;expr2;expr3))
docommand
doneexpr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出比如:sum=0
for ((i=0;i<=100;i++))
dosum=$[sum+i]
done
echo "$sum"计算 1 到 100 累加的值 5050i=0 是给 i 变量赋值为 0
i<=100 是定义 变量的范围 在范围内继续循环,不在结束循环。
i++ 是 变量 i 每运行一次都会加1。let sum+=i 等于 let sum=sum+i
#需要使用 let 命令++ 自身变量+1
-- 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
例子:
使用脚本 输出 十次 hello world 。#!/bin/bash
for i in {1..10}
doecho "hello world"
done不编辑脚本 使用命令 输出 十次 hello world 。[root@localhost data]#for i in {1..10};do echo "hello world";done
或
[root@localhost data]#for i in `seq 10`;do echo "hello world";done
使用三种方法过滤出当前目录下 以 sh 结尾的文件 且 只显示文件名。[root@localhost data]#ls|grep sh$[root@localhost data]#find -name '*sh'|cut -d "/" -f2[root@localhost data]#for i in *sh;do echo $i;done
#当前目录下以sh 结尾的文件名 会赋值给 变量 i ,然后输出变量,然后循环 直至 全部输出 停止循环。
一 到 一百 奇数和 与 偶数和。
[root@localhost data]#vim he.sh#!/bin/bash
sum=0
for i in {1..100..2}
dosum=$[sum+i]
done
echo "1到100的奇数和为:$sum"sum=0
for i in {0..100..2}
dosum=$[sum+i]
done
echo "1到100的偶数和为:$sum"[root@localhost data]#bash he.sh
1到100的奇数和为:2500
1到100的偶数和为:2550另一种格式:
#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
dosum=$[sum+i]
done
echo "$sum"sum=0
for ((i=1;i<=100;i+=2))
dosum=$[sum+i]
done
echo "$sum"
九九乘法表:
正 九九乘法表#!/bin/bash
for j in {1..9}
dofor i in `seq $j`doecho -e "${i}x${j}=$[i*j]\t\c"
#\t 可以对齐
#\c 不换行(要放在最后)done
echo
done倒 九九乘法表#!/bin/bash
for j in {9..-1..1}
dofor i in `seq $j`doecho -e "${i}x${j}=$[i*j]\t\c"done
echo
done
批量添加用户
#!/bin/bash
read -p "请输入你要添加的用户名称:" usrfor uname in $usr
douseradd $unameecho "123123" |passwd --stdin $uname &>/dev/null
done或#!/bin/bash
ulist=$(cat /opt/user.txt) #用户名称文件
for uname in $ulist
douseradd $unameecho "123123" |passwd --stdin $uname &>/dev/null
done[root@localhost ~]#cat /opt/user.txt
lisi
wangwu
zhangsan
ping 一个网段内所有的ip地址
#!/bin/bash
ip=192.168.80.
for i in {1..254}
do
{ping -c2 -W2 ${ip}${i} &> /dev/nullif [ $? -eq 0 ];thenecho "$i is up" >> /mnt/up.txt
#正确结果追加到/mnt/up.txt 文件里elseecho "$i is down" >> /mnt/down.txt
#错误结果追加到/mnt/down.txt 文件里fi
} &
done
批量改后缀名:
#!/bin/bash
read -p "你想要在mnt目录下改什么后缀的文件(输入后缀):" w
b=`find /mnt/* -name "*.${w}" | wc -l`
if [ $b -gt 0 ];thenread -p "你想要改后缀为:" hfile=`ls /mnt/*.${w}|cut -d "/" -f3`for i in $filedoname=`echo $i | cut -d "." -f1`mv /mnt/$i /mnt/${name}.${h}done
elseecho -e "\E[1;35m没有这个后缀的文件\E[0m"echobash $0
fi纯属乱加的,^-^批量改后缀名:
DIR=/data/test
cd $DIR || { echo 无法进入 $DIR;exit 1; }
for FILE in *
doPRE=`echo $FILE|grep -Eo ".*\."`mv $FILE ${PRE}bak
done #!/bin/bash
cd /data
for file in *
do
name=`echo $file |cut -d "." -f1`
mv $file ${name}.bak
done
关于随机取值
$RANDOM 取值范围: 0-32767
[root@test1 ~]# echo $[$RANDOM%50]
37
#随机输出 0-49 以内的随机数。[root@test1 ~]# echo $[$RANDOM%50+1]
1
#随机输出 1-50 以内的随机数。
三、 while
相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用 while
直到达到条件
while循环
1、语法结构
2、死循环
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
格式:
while 条件判断
do命令
done当命令判断为假时停止
死循环:
while死循环
while [ 1 -eq 1 ] //写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去
docommand
done
#因为1 永远等于 1 ,所以会一直循环。while true
docommand
donewhile :
docommand
done: 是一个空的命令。没有效果; 此命令不做任何操作。 表示总是成功(总为真)
批量建立用户
#!/bin/bash
i=1
while [ "${i}" -le 33 ]
#循环33次 ,变量小于等于33
do
useradd stu${i}
#建立stu1 至 stu33 的用户
echo "123456" |passwd --stdin stu${i} &>/dev/null
if [ $? -eq 0 ]
#使用 $? 判断上一次命令执行结果是否为0(真)
then
echo "用户 stu${i} 被建立"
#等于 0 执行上面语句,不等于执行下面语句
else
echo "用户 stu${i} 建立失败"
fi
let i++
#每循环一次都要给变量加1。
done
猜价格游戏
while 格式#!/bin/bash
p=`echo $[RANDOM%2000+1]`
t=0while true
do
read -p "请输入商品的价格1-1000:" num
let t++
if [ $num -eq $p ]
then
echo "恭喜你猜中了,实际价格是$p"
echo "您一共猜了${t}次"
exit 0
#退出循环,不加会一直循环。
elif [ $num -gt $p ]
then
echo "您猜的价格高了"
else
echo "您猜的价格低了"
fi
done
四、双重循环以及跳出循环
-
break跳出单个循环 break n 数字数字是几代表跳出n层循环
-
continue终止某次循环中的命令,但是不会完全终止命令
-
exit 直接退出脚本
关于 continue
[root@localhost ~]#cat continue.sh
#结束某次循环
#!/bin/bash
for i in {1..10}
do
if [ $i -eq 5 ]
then continue
fi
echo i=$i
done#then后面加上continue 的意思是当变量等于 5 时终止当前循环,但第 6 次循环还会继续执行。
关于 break
[root@localhost ~]#cat break.sh
#结束一层循环
#!/bin/bash
for j in {1..9} #行数
dofor i in {1..9} #列数doif [ $i -eq 5 ]thenbreakfiecho -n "i=$i "done
echo
done#结果 等于 5 时直接结束 本层 循环。 for j in {1..9} 还会继续执行。[root@localhost dst]#bash break.sh
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4
i=1 i=2 i=3 i=4#可以看到 到第四列的时候就没有了 ,这是因为 负责列数的循环已经停止执行了,但行数的
循环还在执行,所以就会出现 九行 四列的情况。
关于 exit
[root@localhost ~]#cat break.sh
#结束一层循环
#!/bin/bash
for j in {1..9} #行数
dofor i in {1..9} #列数doif [ $i -eq 5 ]thenexitfiecho -n "i=$i "done
echo
done#这个将更加暴力,执行第一次行数循环 后 列数的循环执行到第五次将直接退出脚本,不再执行任何的循环。[root@localhost dst]#bash break.sh
i=1 i=2 i=3 i=4 [root@localhost dst]#
五、until 循环
until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环
until 循环语句的语法结构如下所示。
until 条件测试操作
do
命令序列
done
实例1:求和
#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
#变量 i 为假 (不大于 100),将执行循环,当变量大于100退出循环。
do
let sum=$i+$sum
let i++
done
echo sum=$sum
实例2:判断用户是否在线,在线就发消息。
#!/bin/bash
username=$1
if [ $# -lt 1 ]
then
echo "请在脚本后输入 用户名和发送信息"
exit 1
fiif grep "^$username" /etc/passwd &>/dev/null
then :
elseecho "用户不存在"exit 1
fiuntil who |grep $username &>/dev/null
do
echo "用户不在线"
sleep 5
donemes=$2
echo $mes |write $username
select 菜单选择
[root@localhost data]#help select
select: select NAME [in 词语 ... ;] do 命令; done从列表中选取词并且执行命令。WORDS 变量被展开,生成一个词的列表。展开的词集合被打印在标准错误输出设备上,每个以一个数字做前缀。如果没有 `in WORDS'则假定使用`in "$@"'。PS3提示符会被显示并且从标准输入读入一行如果该行由被显示的词对应的数字组成,则 NAME 变量被设定为相应的词。如果行为空,则 WORDS 变量和提示符被重新显示。如果读取了文件结束符,则命令完成。读入任何其他的值会导致 NAME 变量被设定为空。读入的行被存放在变量 REPLY 中。COMMANDS 命令在每次选择之后执行直到执行一个 break 命令。退出状态:返回最后一个执行的命令的状态。一定要使用$REPLY
[root@localhost ~]#select menu in 配置网卡 配置yum源;do echo $menu;done
1) 配置网卡
2) 配置yum源
#? 1
配置网卡
#? 2
配置yum源
#?
[root@localhost ~]#PS3="请选择功能(1-2):";select menu in 配置网卡 配置yum源;do echo $menu;done
1) 配置网卡
2) 配置yum源
请选择功能(1-2):1
配置网卡
请选择功能(1-2):2
配置yum源
请选择功能(1-2):PS1 提示符
PS2 多行重定向
PS3 菜单选择
例子:
#!/bin/bash
sum=0
PS3="请输入(1-6):"
MENU="
宫保鸡丁
酸菜鱼
鱼香肉丝
佛跳墙
水煮肉片
点菜结束
"select menu in $MENU
do
case $REPLY in
1)
echo $menu 价格是20
let sum+=20
;;
2)
echo $menu 价格是60
let sum+=60
;;3)
echo $menu 价格是25
let sum+=25
;;4)
echo $menu 价格是150
let sum+=150
;;5)
echo $menu 价格是60
let sum+=60
;;6)
echo "点菜结束"
break
;;*)
echo "点菜错误,请重新选择"
;;esac
doneecho "总价是$sum"
EOF 菜单
#!/bin/bash
cat <<EOF
1.本地yum仓库 5.
2.pxe网络装机 6.
3.DNS主从 7.
4.LVM逻辑卷 8.
EOF
read -p "输入你要选的选项:(1-10)" a
相关文章:
shell 循环语句
一、命令补充 1. echo 命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符有: 选项作用\r光标移至行首,并且不换行\s当前shell的名称,如bash\t插入Tab键,制表符\n输出换行\f换行,但光标仍停留在…...
C++(1) 命名空间
文章目录 C1. C 概述2.C 相对于 C 语言的增强2.1C 第一行代码2.2 C 补充 bool 类型2.3 作用域运算符2.4 命名空间 namespace2.4.1 命名空间基本内容和开放性2.4.2 多个命名空间操作2.4.3 命名空间函数定义和实现分离2.4.4 匿名命名空间2.4.5 命名空间别名 C 1. C 概述 C 之父…...
【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式
🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…...
React中实现虚拟加载滚动
前言:当一个页面中需要接受接口返回的全部数据进行页面渲染时间,如果数据量比较庞大,前端在渲染dom的过程中需要花费时间,造成页面经常出现卡顿现象。 需求:通过虚拟加载,优化页面渲染速度 缺点:…...
vue中的Mutations
目录 一:介绍 二:例子 一:介绍 Vuex 中的 mutation 非常类似于事件: 每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的函数,并且它会接受 sta…...
C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔
目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1:用 DateAndTime.DateAdd方法 2.实例2:用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…...
四、Kotlin 表达式
1. 常量 & 变量 1.1 可读写变量(var) var x initValue // x 称为可读写变量注意:当 var 声明的变量做成员属性时,默认提供 setter/getter 方法。 1.2 只读变量(val) val x initValue // x 称为只…...
Web开发4:单元测试
在Web开发中,单元测试是一种重要的开发实践,它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试,我们可以验证代码的正确性,减少错误和缺陷,并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…...
Ubuntu 16 让ufw防火墙控制docker容器中所有端口
使用docker ps 查询docker在运行端口。 rootai-0003:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …...
<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…...
vb如何获取鼠标形状的特征码
vb如何获取鼠标形状的特征码 好像按键精灵有一个GetCursorShape()函数可以获取特征码,不知道VB6能不能实现类似的功能? 附注: 1 最好是机器无关的,不是也可以。 2 特征码就是一串数字,用来区分不同的鼠标形状。 3 获取…...
chroot: failed to run command ‘/bin/bash’: No such file or directory
1. 问题描述及原因分析 在busybox的环境下,执行 cd rootfs chroot .报错如下: chroot: failed to run command ‘/bin/bash’: No such file or directory根据报错应该rootfs文件系统中缺少/bin/bash,进入查看确实默认是sh,换成…...
蓝桥杯备战——2.矩阵键盘
1.分析原理图 由上图可以看到若J5跳线帽接地,就S4~S7就可以当做四路独立按键,若接到P44,则就是4*4的矩阵键盘。 2.独立按键处理 相对传统的按键延时消抖方案,这里我采用更高效,更经典,更偏向产品级应用的…...
Docker部署思维导图工具SimpleMindMap并实现公网远程访问
文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性,包含插件化架构、多种结构类型&…...
机器学习实验2——线性回归求解加州房价问题
文章目录 🧡🧡实验内容🧡🧡🧡🧡数据预处理🧡🧡代码缺失值处理特征探索相关性分析文本数据标签编码数值型数据标准化划分数据集 🧡🧡线性回归🧡&am…...
宝塔+nextcloud+docker+Onlyoffice 全开启https
折腾了我三天的经验分享 1.宝塔创建网站 nextcloud版本为28.0.1 php8.2 ,导入nextcloud绑定域名对应的证书 ,不用创建mysql 因为nextcloud 要求是mariadb:10.7 宝塔里没有,就用docker安装一个 端口设置为3307 将数据库文件映射出来/ww…...
呼吸机电机控制主控MCU方案
呼吸机是一种能代替、控制或改变人的正常生理呼吸,增加肺通气量,改善呼吸功能,减轻呼吸功消耗,节约心脏储备能力的装置。呼吸机连接一条管子到患者的嘴或鼻子,氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸…...
gitlab备份-迁移-升级方案9.2.7升级到15版本最佳实践
背景 了解官方提供的版本的升级方案 - GitLab 8: 8.11.Z 8.12.0 8.17.7 - GitLab 9: 9.0.13 9.5.10 9.2.7 - GitLab 10: 10.0.7 10.8.7 - GitLab 11: 11.0.6 11.11.8 - GitLab 12: 12.0.12 12.1.17 12.10.14 - GitLab 13: 13.0.14 13.1.11 13.8.8 13.12.15 - G…...
redis面试题合集-基础
前言 又来到每日的复习时刻,昨天我们学习了mysql相关基础知识,还有分布式数据库介绍(后续总结时再持续更新)。今日继续学习缓存杀器:redis redis基础面试题合集 什么是Redis? Redis是一个开源的、内存中…...
(Unity)C# 中的字符串格式化
前言 在软件开发中,理解和掌握字符串的格式化及调试技巧对于编写高效和可维护的代码至关重要。 字符串插值 ($ 符号) 在 C# 中,字符串插值是通过在字符串前加 $ 符号来实现的。这允许我们将变量、表达式或函数调用直接嵌入到字符串中。 string name &qu…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
