【shell 编程大全】数组,逻辑判断以及循环
数组,逻辑判断以及循环
1. 概述
大家好,我又来了。今天呢我们继续学习shell相关的知识。还是老样子我们先回顾下上一次【脚本交互 以及表达式】学习到的知识
- 登录shell 关联配置文件
- 什么是子shell
- umask 修改默认权限
- read 基础
- 表达式
- 简单计算表达式
- expr 计算
- bc 计算
- 测试 表达式
- 逻辑表达式
- 字符串表达式
- 文件表达式
- 数字表达式
- 测试进阶表达式
- 逻辑组合表达式
我们简单回顾了下上次学习的内容。废话不多说了,接下来让我们一起学习新的内容
2. 数组
2.1 格式定义
格式
# 在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的语法格式:
array_name=(value1 ... valuen)
格式解读
单行定义
array_name=(value0 value1 value2 value3)多行定义
array_name=(value0value1value2value3
)单元素定义
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
2.2 具体案例
单行定义案例
[vagrant@localhost test003]$ echo ${array1}[vagrant@localhost test003]$ array1=(11 22 33 44 55)
[vagrant@localhost test003]$ echo ${array1}
11
[vagrant@localhost test003]$ echo ${array1[@]}
11 22 33 44 55
[vagrant@localhost test003]$
多行定义案例
[vagrant@localhost test003]$ echo ${array2[@]}[vagrant@localhost test003]$ array2=()
[vagrant@localhost test003]$ array2=(
> aa
> bb
> cc
> dd
> )
[vagrant@localhost test003]$ echo ${array2[@]}
aa bb cc dd
[vagrant@localhost test003]$
单元素定义案例
[vagrant@localhost test003]$ echo ${array3[@]}[vagrant@localhost test003]$ array3[0]=bb
[vagrant@localhost test003]$ array3[1]=ff
[vagrant@localhost test003]$ array3[2]=ee
[vagrant@localhost test003]$ echo ${array3[@]}
bb ff ee
[vagrant@localhost test003]$
命令行定义案例
[vagrant@localhost test003]$ echo ${array4[@]}[vagrant@localhost test003]$ array4=$(ls ../)
[vagrant@localhost test003]$ echo ${array4[@]}
test001 test002 test003
[vagrant@localhost test003]$
2.3 多种取值方式
格式
基于索引找内容读取数组元素值可以根据元素的下标值来获取,语法格式如下:${array_name[index]}${array_name[@]:起始位置:获取数量}
注意:获取具体的元素内容,指定其下标值,从0开始获取所有的元素内容,下标位置写"@"或者"*"
实例
[vagrant@localhost test003]$ num_list=(123 234 345 456 567)
[vagrant@localhost test003]$ echo ${num_list[@]}
123 234 345 456 567
[vagrant@localhost test003]$ echo ${num_list[@]:1:3}
234 345 456
[vagrant@localhost test003]$
2.4 获取数组长度
格式
在变量前面添加符号#
${#num_list[0]}
实例
[vagrant@localhost test003]$ echo ${num_list[@]}
123 234 345 456 567
[vagrant@localhost test003]$ echo ${#num_list[@]}
5
[vagrant@localhost test003]$
2.5 获取系统所数组
格式
declare -a
具体实例
[vagrant@localhost test003]$ declare -a
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -ar BASH_REMATCH='()'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a array1='([0]="11" [1]="22" [2]="33" [3]="44" [4]="55")'
declare -a array2='([0]="aa" [1]="bb" [2]="cc" [3]="dd")'
declare -a array3='([0]="bb" [1]="ff" [2]="ee")'
declare -a num_list='([0]="123" [1]="234" [2]="345" [3]="456" [4]="567")'
[vagrant@localhost test003]$
2.6 数组替换/ 数组删除
格式
元素内容替换:array_name[index]=值
注意:在修改元素的时候,index的值一定要保持准确元素部分内容替换,可以参考字符串替换格式:${array_name[index]/原内容/新内容}
注意:默认是演示效果,原数组未被修改,如果真要更改需要结合单元素内容替换删除单元素unset array_name[index]
删除整个数组unset array_name
具体案例
[vagrant@localhost test003]$ unset array6
[vagrant@localhost test003]$ array6=(11 22 aa bb cc ddd ggg)
[vagrant@localhost test003]$ echo ${array6}
11
[vagrant@localhost test003]$ echo ${array6[@]}
11 22 aa bb cc ddd ggg
[vagrant@localhost test003]$ array6[0]=99
[vagrant@localhost test003]$ echo ${array6[@]}
99 22 aa bb cc ddd ggg
[vagrant@localhost test003]$ array6[5]=${array6[5]/ddd/ert}
[vagrant@localhost test003]$ echo ${array6[@]}
99 22 aa bb cc ert ggg
[vagrant@localhost test003]$ unset array6[5]
[vagrant@localhost test003]$ echo ${array6[@]}
99 22 aa bb cc ggg
[vagrant@localhost test003]$ unset array6
[vagrant@localhost test003]$ echo ${array6[@]}[vagrant@localhost test003]$
3. 逻辑判断
3.1 if 判断
3.1.1 格式
单分支格式
单路决策 - 单分支if语句样式:if [ 条件 ]then指令fi特点:单一条件,只有一个输出
双分支格式
双路决策 - 双分支if语句样式:if [ 条件 ]then指令1else指令2fi特点:单一条件,两个输出
多分支格式
多路决策 - 多分支if语句样式:if [ 条件 ]then指令1elif [ 条件2 ]then指令2else指令3fi特点:n个条件,n+1个输出
单行格式
单行命令写法if [ 条件1 ]; then 指令1; elif [ 条件2 ]; then 指令2; ... ; else 指令n; fi
3.1.2 实例
单行实例
#!/bin/bash# 单个if 判断
gender="$1"if [ "${gender}" == "男" ]
thenecho "你是男的"exit
fiecho "你不是男的"
双分支实例
#!/bin/bash# 双分支实例gender="$1"if [ "${gender}" == "nan" ]
thenecho "你是男的"
elseecho "你是女的"
fi
多分支实例
#!/bin/bash# 多分支实例gender="$1"if [ "${gender}" == "nan" ]
thenecho "你是男的"
elif [ "${gender}" == "nv" ]
thenecho "你是女的"
elseecho "我不知道你的性别"
fi
3.1.3 经典实例
3.1.3.1 奇偶数 判断
#!/bin/bash# 计算判断# 引导客户输入一个数字
read -p "请输入一个数字" num# 判断是基数 还是 偶数
if (( ${num} % 2 == 0 ))
thenecho "你是偶数"
elseecho "你是奇数"
fi
3.1.3.2 正则 判断
#!/bin/bash# 表示正则判断read -p "您输入一个字符串: " stringif [[ ${string} == v* ]]
thenecho "你是满足以v开头的"
elseecho "你不满足以v开头"
fi
3.2 case 判断
格式
case 变量名 in值1)指令1;;...值n)指令n;;
esac
实例
#!/bin/bash# 进行case 练习判断type="$1"case ${type} in"1")echo "你是1";;"2")echo "你是2";;*)echo "你是几我也不知道";;
esac
3.3 for 循环
格式
循环逻辑语法解析:关键字 [ 条件 ]do执行语句done注意:这里的关键字主要有四种:for - 循环遍历一个元素列表while - 满足条件情况下一直循环下去until - 不满足条件情况下一直循环下去select - 一种特殊的循环遍历,侧重于遍历用户输入,一般结合case等语句使用
实例1:遍历命令列表
#!/bin/bash# 进行for循环for i in $(ls /)
doecho "您的路径是${i}"
done
实例2:遍历参数列表
查看脚本内容
[root@localhost ~]# cat for_arg_list.sh
#!/bin/bash
# 功能:脚本参数列表 for循环
for i in $@
doecho "列表元素: ${i}"
done脚本执行后效果
[root@localhost ~]# /bin/bash for_arg_list.sh 1 2 3
列表元素: 1
列表元素: 2
列表元素: 3
3.3.1 多种案例
案例1
#!/bin/bash# 进行循环案例for i in yuwen shuxue lishi
doecho "列表元素: ${i}"
done
案例2
#!/bin/bash# 循环for i in {1..3}
doecho "元素内容是: ${i}"
done
案例3
#!/bin/bash# 实现脚本参数遍历for i in $@
doecho "元素内容是: ${i}"
done
3.3.2 综合实践
随机生成用户
#!/bin/bash# 随机创建用户user_file="/tmp/user.txt"# 检查是否是文件
[ -f ${user_file} ] && > ${user_file}# 开始批量创建用户
for i in {1..5}
do# 创建密码pwd="aaa$RANDOM"# 创建用户sudo useradd user-${i}# 设置密码echo ${pwd} | passwd --stdin user-${i} > /dev/null 2>&1# 开始输出信息echo "创建账号是: user-${i}, 该用户的密码是: ${pwd}"echo -e "创建的账号是: \033[31;41muser-${i}\033[0m 该用户的密码是: \033[31;41m${pwd}\033[0m"done
#!/bin/bash# 进行批量的用户删除for i in {1..5}
dosudo userdel -r user-${i}echo "用户【user-${i}】删除成功"
done
对特定的网段的主机进行扫描
#!/bin/bash# 对特定ip进行扫描base_net=192.168.56
net_file='/tmp/host.txt'# 判断文件是否存在
if [ -f ${net_file} ]
thensudo echo '' > ${net_file}
fifor i in {1..100}
do# 开始检测主机host_status=$(ping -c1 -W1 ${base_net}.${i} > /dev/null 2>&1 && echo "UP" || echo "DOWN")sudo echo "${base_net}.${i} 主机状态: ${host_status}" >> ${net_file}sudo echo "${base_net}.${i} 主机状态: ${host_status}"
done# 输出信息
live_num=$(grep UP ${net_file} | wc)
unlive_num=$(grep DOWN ${net_file} | wc)echo -e "\e[31m${netsub}.0 网段主机存活情况\e[0m"
echo "------------------------------------"
echo -e "\e[32m${netsub}.0 网段存活主机数量: ${live_num}\e[0m"
echo -e "\e[32m${netsub}.0 网段异常主机数量: ${unlive_num}\e[0m"
3.3.3 循环赋值
#!/bin/bash# 进行循环赋值all_sum=0
odd_sum=0
even_sum=0for i in {1..100}
dolet all_sum+=i
donefor i in {1..100..2}
dolet odd_sum+=i
donefor i in {0..100..2}
dolet even_sum+=i
doneecho -e "所有的数字之和是: \033[31m${all_sum}\033[0m"
echo -e "所有的数字之和是: \033[31m${odd_sum}\033[0m"
echo -e "所有的数字之和是: \033[31m${even_sum}\033[0m"
3.3.4 (()) 版的双括号的语法
#!/bin/bash# 使用特殊符号(()) 来进行计算all_sum=0for ((i=0; i<=100; i+=1))
dolet all_sum+=i
doneecho -e "计算结果是: \033[31m${all_sum}\033[0m"
3.3.4.1 综合实践:命令行进度条数字
#!/bin/bash# 实现数字进度条for ((i=0; i<=100; i+=1))
do// 防止信息输出的叠加,采用\e[4D,每次输出信息的时候,光标左移4个位置,信息不会出现叠加printf "\e[4D%3d%%" $isleep 0.1
done
3.3.4.2 综合实践:实现进度条
#!/bin/bash# 实现数字进度条str="#"
arr=("|" "/" "-" "\\")for ((i=0; i<=50; i+=1))
dolet index=i%4printf "[%-50s][%d%%]%c\r" "$str" "$(($i*2))" "${arr[$index]}"sleep 0.2str+="#"
doneecho ""
3.3.4.3 综合实践:保存数字最大值 以及最小值
#!/bin/bash
# 设定随机数比大小# 设定基本变量
declare -i min max
declare -a nums# 设定大小比较
for ((i=0;i<10;i++))
do# 将随机数添加到数组中nums[$i]=$RANDOM# 设定初始值[ $i -eq 0 ] && min=${nums[0]} max=${nums[0]}# 设定最大值[ ${nums[$i]} > $max ] && max=${nums[$i]}# 设定最小值[ ${nums[$i]} < $min ] && min=${nums[$i]}
done
echo -e "\e[31m 随机数的统计信息\e[0m"
echo "------------------------------"
echo -e "\e[32m所有的随机数:${nums[@]}"
echo -e "最大的随机数:${max}"
echo -e "最小的随机数:${min}\e[0m"
3.4 while 循环
基础语法
场景:只要条件满足,就一直循环下去while [ 条件判断 ]do执行语句done
具体实例
#!/bin/bash# 通过while 循环来执行all_num=0
odd_num=0
even_num=0i=0
while (( i <= 100 ))
dolet all_num+=ilet i++
donei=0
while ((i<=100))
do((odd_num+=i))((i+=2))
donei=1
while ((i<=100))
do((even_num+=i))((i+=2))
doneecho "累加的和是:${all_num}"
echo "奇数累加的和是: ${odd_num}"
echo "偶数累加的和是: ${even_num}"
3.4.1 while read 用法
格式
while中有一种特殊的语法,while read line 它可以从文本中逐行读取相关的内容,然后存储到一个临时变量line中,然后我们后续就可以逐行对文本内容进行操作
样式1: cat提前读
cat a.log | while read line
do echo "File: ${line}"
done
实例1
#!/bin/bash# 通过while read 逐行读取i=0env | while read line
do((i+=1))echo "第${i}行内容是: ${line}"
done
实例2
exec 0< a.log
while read line
do echo "${line}"
done
实例3
while read line
doecho "File: ${line}"
done < a.log
3.5 until循环
使用方式跟while保持一致。
格式
场景:只要条件不满足,就一直循环下去until [ 条件判断 ]do执行语句done
3.6 select 条件选择
语法格式
select 变量名 in input_list
do 循环语句
done
语法解读:1 select 从 input_list 获取相关的值,然后输出到一个菜单列表,元素格式如下:序号) 菜单条目2 用户输入信息的标识使用PS3 的值,默认值是#?。我们可以定制PS3环境变量3 如果用户输入菜单序号,则输出菜单内容4 select的退出方式有很多种强制退出:Ctrl+D 组合键普通退出:结合break方式
实例1
#!/bin/bash# 通过select 进行简单选择echo "您喜欢的系统是:"
select osname in "HarmonyOS" "Linux" "Windows" "Ubuntu"
doecho "您选择的系统是: ${osname}"exit
done
实例2
#!/bin/bash# 修改输入指令PS3='请选择菜单序号: 'echo "请输入您喜欢的系统: "
select osname in "os" "linux" "window"
doecho "您选择的操作系统是: ${osname}"exit
done
相关文章:
【shell 编程大全】数组,逻辑判断以及循环
数组,逻辑判断以及循环1. 概述 大家好,我又来了。今天呢我们继续学习shell相关的知识。还是老样子我们先回顾下上一次【脚本交互 以及表达式】学习到的知识 登录shell 关联配置文件什么是子shellumask 修改默认权限read 基础表达式 简单计算表达式expr 计…...
Android13 Bluetooth更新
目录 Android 13 版本说明 LE Audio 代码更新 Android 12代码路径 Android 13代码路径 Android 13 版本说明 里面对蓝牙更新的描述较少,一出提到蓝牙的一...
手工测试混了5年,年底接到了被裁员的消息....
大家都比较看好软件测试行业,只是因为表面上看起来:钱多事少加班少。其实这个都是针对个人运气好的童人才会有此待遇。在不同的阶段做好不同阶段的事情,才有可能离这个目标更近,作为一枚软件测试人员,也许下面才是我们…...
Umi框架
什么是 umi umi 是由 dva 的开发者 云谦 编写的一个新的 React 开发框架。umi 既是一个框架也是一个工具,可以将它简单的理解为一个专注性能的类 next.js 前端框架,并通过约定、自动生成和解析代码等方式来辅助开发,减少开发者的代码量。 u…...
教你学git
前言 git是一种用于多人合作写项目。详细说明如下 文章目录前言什么是版本控制?什么是 Git?它就属于人工版本控制器版本控制工具常见版本控制工具怎么工作的?git 文件生命周期状态区域安装配置-- global检查配置创建仓库工作流与基本操作查看…...
【工作笔记】syslog,kern.log大量写入invalid cookie错误信息问题
任务描述 错误出现出现过四五次,应该是诊断单元tf卡读写出问题导致下面这条告警一直高频写入到/var/log/下的syslog、kern.log、messages中 Nov 23 06:25:12 embest kernel: omap_hsmmc 48060000.mmc: [omap_hsmmc_pre_dma_transfer] invalid cookie: data->hos…...
【C++】多线程
多任务处理有两种形式,即:多进程和多线程。 基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行 文章目录1. 多线程介绍2. Windows多线程1. 多线程介绍 每一个进程(可执行程序)都有一个主线…...
0202插入删除-算法第四版红黑树-红黑树-数据结构和算法(Java)
文章目录4 插入4.1 序4.2 向单个2-结点插入新键4.3 向树底部的2-结点插入新键4.4 向一棵双键树(3-结点)中插入新键4.5 颜色调整4.6 根结点总是黑色4.7 向树底部的3-结点插入新键4.8 将红链接在树中向上传递4.9 实现5 删除5.1 删除最小键5.2 删除6 有序性…...
vue 生成二维码插件 vue-qr使用方法
一、安装 npm install vue-qr --save二、引入 import VueQr from vue-qrcomponents:{VueQr,},三、使用 <vue-qr:text"dyQrcode":size"170":logoSrc"logo":margin"6":logoScale"0.2"></vue-qr>四、属性说明 …...
网络工程课(二)
ensp配置vlan 一、配置计算机ip地址和子网掩码 二、配置交换机LSW1 system-view [Huawei]sysname SW1 [SW1]vlan batch 10 20 [SW1]interface Ethernet0/0/1 [SW1-Ethernet0/0/1]port link-type access 将接口设为access接口 [SW1-Ethernet0/0/1]port default vlan 10 [SW1-E…...
Pytorch并行计算(三): 梯度累加
梯度累加 梯度累加(Gradient Accmulation)是一种增大训练时batch size的技巧。当batch size在一张卡放不下时,可以将很大的batch size分解为一个个小的mini batch,分别计算每一个mini batch的梯度,然后将其累加起来优…...
蓝桥杯入门即劝退(十八)最小覆盖子串(滑动窗口解法)
欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…...
Android一~
进程和线程的区别https://zhuanlan.zhihu.com/p/60375108https://zhuanlan.zhihu.com/p/138689342线程池的用法和原理tcp三次握手和四次挥手、tcp基础http请求报文格式二叉树中序遍历(算法)activity启动模式OKhttp源码讲解Java修饰符Java线程同步的方法s…...
一月券商金工精选
✦研报目录✦ ✦简述✦ 按发布时间排序 国盛证券 “薪火”量化分析系列研究(二)-票据逾期数据中的选股信息 发布日期:2023-01-04 关键词:股票、票据、票据预期 主要内容:本文深入探讨了“票据持续逾期名单”这一…...
UML中常见的9种图
UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。通过使用UML使得在软件开发之前, 对整个软件设计有更好的…...
使用SpringBoot实现无限级评论回复功能
评论功能已经成为APP和网站开发中的必备功能。本文采用springbootmybatis-plus框架,通过代码主要介绍评论功能的数据库设计和接口数据返回。我们返回的格式可以分三种方案,第一种方案是先返回评论,再根据评论id返回回复信息,第二种方案是将评论回复直接封装成一个类似于树的数据…...
Kafka 介绍和使用
文章目录前言1、Kafka 系统架构1.1、Producer 生产者1.2、Consumer 消费者1.3、Consumer Group 消费者群组1.4、Topic 主题1.5、Partition 分区1.6、Log 日志存储1.7、Broker 服务器1.8、Offset 偏移量1.9、Replication 副本1.10、Zookeeper2、Kafka 环境搭建2.1、下载 Kafka2.…...
[学习笔记]Rocket.Chat业务数据备份
Rocket.Chat 的业务数据主要存储于mongodb数据库的rocketchat库中,聊天中通过发送文件功能产生的文件储存于/app/uploads中(文件方式设置为"FileSystem"),因此在对Rocket.Chat做数据移动或备份主要分为两步,…...
【ZOJ 1090】The Circumference of the Circle 题解(海伦公式+正弦定理推论)
计算圆的周长似乎是一项简单的任务——只要你知道它的直径。但如果你没有呢? 我们给出了平面中三个非共线点的笛卡尔坐标。 您的工作是计算与所有三个点相交的唯一圆的周长。 输入规范 输入文件将包含一个或多个测试用例。每个测试用例由一条包含六个实数x1、y1、x…...
【go】slice原理
slice包含3个部分: 1.内存的起始位置 2.切片的大小(已经存放的元素数量) 3.容量(可以存放的元素数量) 使用make初始化切片会开辟底层内存,并初始化元素值为默认值,如数字为0,字符串为空 使用New初始化切片不会开辟底层数组&…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
