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

RHCE的学习(20)

变量5种赋值方式

shell中变量赋值5种方式,其中采用name=10的方法称A 直接赋值 name=B read命令 read v1C 使用命令行参数 ($1 $2 $3 ..) name=$1D 使用命令的输入 username=$(whoami)E 从文件读取 #cut -d : -f1 /etc/passwd > /user.listfor user in $(cat /user.list);doecho $userdonewhile read user;doecho $userdone < user.list

变量和引号

Shell语言中一共有3种引号,分别为

  • 单引号(' ')单引号括起来的字符都作为普通字符出现
  • 双引号(" ")双引号括起来的字符,除“$”、“\”、“'”和“"”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待,
  • 反引号(``)反引号括起来的字串被Shell解释为命令,在执行时,Shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分
符号说明
双引号除美元符号、单引号、反引号和反斜线之外,其他所有的字符都将保持字面意义
单引号所有的字符都将保持字面意义
反引号反引号中的字符串将被解释为Shell命令
反斜线转义字符,屏蔽后的字符的特殊意义

演示:引号的区别

[root@localhost ~]# echo "current_user is: $USER"
current_user is: root
[root@localhost ~]# echo 'current_user is: $USER'
current_user is: $USER
[root@localhost ~]# echo "current_user is: `whoami`"
current_user is: root
[root@localhost ~]# echo 'current_user is: `whoami`'
current_user is: `whoami`

变量的运算

运算符与命令

  • 例:

r=$((2+5*8))   ---需要通过$引用运算值---- (()) 可以直接运算  运算结果需要通过变量接受
((dec=num-1))
r=$[1+2]                            $[]  不能直接运算  运算结果需要通过变量接受     
declare –i r=2+3                    申明整形变量对数值进行运算                  
let r=3+4                           let 可以直接运算     运算结果需要通过变量接受   
expr 4 + 2                          后三种可以直接运算输出运算结果
expr 也可用字符串expr length “this is a test”expr substr "this is a test" 3 5   从第三个字符开始取5个字符expr index "sarasare" a 抓取指定字符第一次出现的位置,标记第一个a字符是第2个字符 
r=`expr 4 + 2`
bc
echo "2+5*8" | bc
awk 'BEGIN {print 2+5*8}'

[root@server ~]# expr  1 + 1  # 注意+左右必须要有空格
2
[root@server ~]# expr  1+1    # 否则原样显示
1+1
[root@server ~]# a=1
[root@server ~]# b=2
[root@server ~]# expr  $a + $b  # 支持变量
3[root@server ~]# let  num=1+2   # let+echo 等价于expr
[root@server ~]# echo  $num
3
[root@server ~]# let num=1 + 2   # 注意let中运算符左右不能由空格
-bash: let: +:语法错误: 需要操作数 (错误符号是 "+")[root@server ~]# echo  $((1+2))
3
[root@server ~]# echo  $((5%3))
2
[root@server ~]# echo  $((3%5))
3
[root@server ~]# echo  $((1-5))
-4
[root@server ~]# echo  $((2 * 5))   # 可以有空格
10
[root@server ~]# echo  $((5.2-5))   # 只支持整数运算
-bash: 5.2-5:语法错误: 无效的算术运算符 (错误符号是 ".2-5")[root@server ~]# echo  $[2+3]   # []  等价于 (())
5
[root@server ~]# echo  $[2.5+3]  #  # 只支持整数运算
-bash: 2.5+3:语法错误: 无效的算术运算符 (错误符号是 ".5+3")
[root@server ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software 
Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.1+2
3.1
2.5-3.9
-1.4
1.5>4
0
5>3
1
quit  # 退出交互模式
​
# 不进入交互模式直接使用,bc需要放在最后
[root@server ~]# echo  "scale=3;11/3"  | bc   
3.666
# scale=3 表示保留运算精度
  • 例2:计算用户输入的任意两个整数的和、差、乘积、商、余数

# 方法1
[root@server ~]# cat 1.sh 
#!/bin/bash
a=$1
b=$2
echo a+b=$(($a+$b))
echo a-b=$((a-b))
echo a*b=$((a*b))
echo a/b=$((a/b))
echo a%b=$((a%b))
[root@server ~]# ./1.sh 10 3
a+b=13
a-b=7
a*b=30
a/b=3
a%b=1
​
​
# 方法2:
[root@server ~]# cat 1.1.sh 
#!/bin/bash
read -p "please input two number:" a b
echo $a+$b=$(($a+$b))
echo $a-$b=$((a-b))
echo $a*$b=$((a*b))
echo $a/$b=$((a/b))
echo $a%$b=$((a%b))
[root@server ~]# ./1.1.sh 
please input two number:3 4
3+4=7
3-4=-1
3*4=12
3/4=0
3%4=3
  • 例3:计算 1~ 100 的和

# 方法1:
[root@server ~]# cat 2.sh
#!/bin/bash
​
# 1. 使用 echo {1..100} 生成 1 到 100 字符串
# 2. 然后使用 tr 命令来将空格替换为 + 号  echo {1..100} | tr " " "+"
# 3. 使用管道加bc命令来实现
echo {1..100} | tr " " "+" | bc
​
# 方法2:
root@server ~]# cat 2.1.sh
#!/bin/bash
​
# 使用 seq 命令来实现 seq -s "+" 100,然后接合双括号来实现
echo $((`seq -s "+" 100`))
​
# 方法3:
[root@openEuler ~]# cat 2.2.sh
#!/bin/bash
​
# 使用 expr 命令来实现
seq -s " + " 100 | xargs expr
  • 例3:6种方式计算长方形的面积

s1=$(( $l * $w ))
echo "1--面积是$s1"---'$(())'let s2=$l*$w
#let s2=l*w  
echo "2--面积是$s2"---'let's3=`expr $l \* $w`
echo "3--面积是$s3"---'expr’'s4=`echo "$l * $w" | bc`
echo "4--面积是$s4"---'bc's5=$[ $l * $w ]
#s5=$[ l * w ] #可以有空格
echo "5--面积是$s5"---'$[]'declare -i s6=$l*$w   #不能有空格
#declare -i s6=l*w 
echo "6--面积是$s6"---'declare'

字符运算

格式

表达式说明
${parameter}返回变量的内容
${#parameter}返回变量内容的长度(按字符)
${paramater:offset}在变量${parameter}中,从位置offset之后开始提取子串到结尾
${paramater:offset:length}在变量${parameter}中,从位置offset之后开始提取长度为length的子串
${parameter#word}从变量${parameter}开头开始删除最短匹配的word子串
${parameter##word}从变量${parameter}开头开始删除最长匹配的word子串
${parameter%word}从变量${parameter}结尾开始删除最短匹配的word子串
${parameter%%word}从变量${parameter}结尾开始删除最长匹配的word子串
${parameter/pattern/string}使用string代替第一个匹配的pattern
${parameter//pattern/string}使用string代替所有匹配的pattern

获取字符串

${parameter}	返回变量的内容
${#parameter}	返回变量内容的长度(按字符)
[root@server ~]# str="hello world"
#返回变量长度
[root@server ~]# echo ${#str}
11

截取字符串

${paramater:offset}	      在变量${parameter}中,从位置offset之后开始提取子串到结尾
${paramater:offset:length}  在变量${parameter}中,从位置offset之后开始提取长度为length的子串
[root@server ~]# echo  ${str1:0:3} # 从左边第1个字符开始截取3个
hel
​
[root@server ~]# echo  ${str1::3}  # 可以省略起始0
hel
​
[root@server ~]# echo  ${str1:1}  # 从下标1开始截取到尾部
ello world
​
[root@server ~]# echo  ${str1:0-1:1}  # 从右边第一个字符开始截取1个,左边第一个为0,右边第一个为0-1
d
​
[root@server ~]# echo  ${str1:0-5} # 从右边第5个开始截取到尾部
world
[root@server ~]# echo  ${str1: -5} # 使用空格替代0,同上
world
​
注意:下面写法会输出全部,以${parameter:-default}方式,默认是提取完整地字符串
[root@server ~]# echo  ${str1:-5} # 没有空格表示提取整串
hello world

删除字符串

${parameter#word}		从变量${parameter}开头开始删除最短匹配的word子串
${parameter##word}		从变量${parameter}开头开始删除最长匹配的word子串
${parameter%word}		从变量${parameter}结尾开始删除最短匹配的word子串
${parameter%%word}		从变量${parameter}结尾开始删除最长匹配的word子串
# 使用%截取,删除右边字符,保留左边字符
[root@server ~]# filename=testfile.tar
[root@server ~]# file=${filename%.*}  # %.表示从右边开始检索第一次出现. 之后删除.右侧的内容,#保留左边内容,用于对文件名去掉扩展名
[root@server ~]# echo  $file
testfile
​
[root@server ~]# url=http://www.baidu.com/index.html
[root@server ~]# ul1=${url%%:*} # %%: 表示从右边开始检索最后一次出现的: #之后删除:右侧的内容,保留左边内容
[root@server ~]# echo  $ul1
http
​
[root@server ~]# url=http://www.baidu.com/index.html
[root@server ~]# ul1=${url#*.}  # #*.表示左向右遍历,删除第一次出现的.左侧内容
[root@server ~]# echo  $ul1
baidu.com/index.html
​
[root@server ~]# url=http://www.baidu.com/index.html
[root@server ~]# ul1=${url%/*}
[root@server ~]# echo  $ul1
http://www.baidu.com
[root@server ~]# url=http://www.baidu.com/index.html
[root@server ~]# ul1=${url##*/}
[root@server ~]# echo  $ul1
index.html

替换字符串

${parameter/pattern/string}     使用string代替第一个匹配的pattern
${parameter//pattern/string}    使用string代替所有匹配的pattern
[root@server ~]# str="Hi, girl, i am your friend."
[root@server ~]# echo $str
Hi, i am your friend.
[root@server ~]# echo ${str/i/I}
HI, i am your friend.
[root@server ~]# echo ${str//i/I}
HI, I am your frIend.

案例:批量修改文件名

  • 需求:去掉所有文件的_finished字符信息。

  • 准备测试数据

[root@server ~]# mkdir d2
[root@server ~]# cd d2
[root@server sub_str]# touch open_{1..5}_finish.jpg
[root@server sub_str]# touch open_{1..5}_finish.png
[root@server sub_str]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5_finish.png
  • 实现思路:

1. 可以通过 mv 命令来修改,如:
mv open_1_finish.jpg open_1.jpg
​
2. 我们要获取这个文件
f=open_1_finish.jpg
​
3. 通过字符串删除来实现
${f//_finish/}
  • 功能实现:

# 查看当前目录下所有的文件
[root@server sub_str]# ls
open_1_finish.jpg  open_2_finish.jpg  open_3_finish.jpg  open_4_finish.jpg  open_5_finish.jpg
open_1_finish.png  open_2_finish.png  open_3_finish.png  open_4_finish.png  open_5_finish.png
​
# 循环这些文件并显示
[root@server sub_str]# for f in `ls`
> do
> echo ${f}
> done
open_1_finish.jpg
open_1_finish.png
open_2_finish.jpg
open_2_finish.png
open_3_finish.jpg
open_3_finish.png
open_4_finish.jpg
open_4_finish.png
open_5_finish.jpg
open_5_finish.png
​
# 通过循环来去掉 _finish 字符,但它并没有真正的修改磁盘中的文件,只是在内存中修改了
[root@server sub_str]# for f in `ls`; do echo ${f//_finish/}; done
open_1.jpg
open_1.png
open_2.jpg
open_2.png
open_3.jpg
open_3.png
open_4.jpg
open_4.png
open_5.jpg
open_5.png
[root@server sub_str]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4_finish.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5_finish.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5_finish.png
​
# 结合 mv 命令来一个文件一个文件的修改  mv open_1_finish.jpg open_1.jpg
# open_1_finish.jpg 文件名称就是每次循环所得到的文件名 ${f}
# open_1.jpg 是通过 ${f//_finish/} 替换来到的
[root@server sub_str]# for f in `ls`; do mv ${f} ${f//_finish/}; done
[root@server sub_str]# for f in `ls`; do mv ${f} ${f##_finish}; done
[root@server sub_str]# for f in `ls`; do mv ${f} ${f%%_finish}; done
[root@server sub_str]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_1.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_2.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_3.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_4.png
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5.jpg
-rw-r--r--. 1 root root 0 Mar 23 17:42 open_5.png

变量扩展

功能介绍

表达式说明
result=${parameter:-word}如果 parameter 变量值为空,会将word的值赋给result变量,parameter 变量值不变
result=${parameter:=word}如果 parameter 变量为空,会将 word 的值赋给 parameter 和 ressult变量
result=${parameter:?word}如果 parameter 变量为空,会将 word 作为标准错误输出。parameter 变量和 result 变量不变
result=${parameter:+word}如果 parameter 变量为空,什么都不做,否则 word 返回

使用示例

  • 这四个扩展变量,都属于对变量的值进行判断和处理

# :- 判断变量如果值为空就返回后面字符信息                     无值时临时赋值
[root@server ~]# echo $name
​
[root@server ~]# result=${name:-haha}
[root@server ~]# echo $name
​
[root@server ~]# echo $result
haha
​
# :=  如果变量为空,则会将后面的字符赋值给变量并返回           无值时永久赋值
[root@server ~]# unset result
[root@server ~]# echo $name
​
[root@server ~]# echo $result
​
[root@server ~]# result=${name:=hehe}
[root@server ~]# echo $name
hehe
[root@server ~]# echo $result
hehe
[root@server ~]# 
​
# :? 如果变量为空则错误信息返回后面的字符                     无值时输出错误提示值
[root@server ~]# unset name result
[root@server ~]# echo $name
​
[root@server ~]# echo $result
​
[root@server ~]# result=${name:?haha}
-bash: name: haha
[root@server ~]# echo $result
​
[root@server ~]# echo $name
​
[root@server ~]# 
​
# :+ 如果变量为空,什么都不做,否则返回后面字符                有值时临时替换
[root@server ~]# result=${name:+haha}
[root@server ~]# echo $name
​
[root@server ~]# echo $result
​
[root@server ~]# name=hehe
[root@server ~]# echo $name
hehe
[root@server ~]# result=${name:+haha}
[root@server ~]# echo $name
hehe
[root@server ~]# echo $result
haha
  • 面试题:删除7天前的过期备份数据

#!/bin/bash
find  ${path:-/tmp}   -name  "*.tar.gz"  -type  f mtime +7  |  xargs rm  -f
​
​
# find为查找文件命令
# ${path:-/tmp} :表示如果没有定义path则使用/tmp替代
# find不支持| 使用xargs命令表示管道符进行数据转换[root@localhost ~]# cat del.sh           |   字符   -exec   |xargs   参数find ${path:-/tmp} -name "*.bak" -type f -mtime +7 | xargs rm -f
如果没有定义path值,事先脚本中也没有设置变量:
[root@localhost ~]# cat del2.sh 
find ${path} -name "*.tar.gz" -type f -mtime +7 | xargs rm -f
这样就不会删除指定目录,而是删除脚本运行目录中的文件。

相关文章:

RHCE的学习(20)

变量5种赋值方式 shell中变量赋值5种方式&#xff0c;其中采用name10的方法称A 直接赋值 nameB read命令 read v1C 使用命令行参数 &#xff08;$1 $2 $3 ..&#xff09; name$1D 使用命令的输入 username$(whoami)E 从文件读取 #cut -d : -f1 /etc/passwd > /user.listfor…...

控制器ThinkPHP6

五、控制器中对数组值的返回 在做接口服务时&#xff0c;很多时候回使用数组作为返回值&#xff0c;那么数组如何返回成 json呢&#xff1f; 在 tp6 中返回json 很简单&#xff0c;直接使用 json 进行返回即可&#xff0c;例如&#xff1a; public function index(){$resarra…...

1. Django中的URL调度器 (项目创建与简单测试)

1. 创建 Django 项目 运行以下命令创建一个名为 blog_project 的 Django 项目&#xff1a; django-admin startproject blog_project2. 创建博客应用 Django 中&#xff0c;项目可以包含多个应用。创建一个名为 blog 的应用&#xff1a; cd blog_project python manage.py …...

学习python的第十天之数据类型——dict字典

学习python的第十天之数据类型——dict字典 Python 中的字典&#xff08;Dictionary&#xff09;是一个非常强大的内置数据类型&#xff0c;它用来存储键值对&#xff08;key-value pairs&#xff09;信息。字典是无序的&#xff0c;这意味着它们不会记录你添加键值对的顺序&am…...

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中&#xff0c;华为一直以其卓越的技术和创新力引领着行业的发展。近日&#xff0c;华为Mate 70系列手机的发布会正式定档在11月26日&#xff0c;这一消息引发了众多科技爱…...

进程信号

目录 信号入门 1. 生活角度的信号 2. 技术应用角度的信号 3. 注意 4. 信号概念 5. 用kill -l命令可以察看系统定义的信号列表 6. 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 Core Dump 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异…...

RT-DETR融合GhostModel V3及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《GhostNetV3: Exploring the Training Strategies for Compact Models》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2404.11202v1 代码链接&#xff1a;https:…...

JVM有哪些垃圾回收器

Serial垃圾回收器&#xff1a;单线程收集器&#xff0c;适用于客户端模式下的小型应用。 使用复制算法回收新生代&#xff0c;使用标记-整理算法回收老年代。 在进行垃圾回收时&#xff0c;会停止所有用户线程&#xff08;Stop-The-World, STW&#xff09;。Serial Old垃圾回收…...

EWM 打印

目录 1 简介 2 后台配置 3 主数据 4 业务操作 1 简介 打印即输出管理&#xff08;output management&#xff09;利用“条件表”那一套理论实现。而当打印跟 EWM 集成到一起时&#xff0c;也需要利用 PPF&#xff08;Post Processing Framework&#xff09;那一套理论。而…...

前端文件优化

一、图片优化 计算图片大小 对于一张100*100像素的图片来说&#xff0c;图像上有 10000 个像素点&#xff0c;如果每个像素的值是 RGBA 存储的话&#xff0c;那么也就是说每个像素有 4 个通道&#xff0c;每个通道 1 个字节&#xff08;8 位 1个字 节&#xff09;&#xff0…...

电脑怎么自动切换IP地址

在现代网络环境中&#xff0c;电脑自动切换IP地址的需求日益增多。无论是出于网络安全、隐私保护&#xff0c;还是为了绕过地域限制&#xff0c;自动切换IP地址都成为了许多用户关注的焦点。本文将详细介绍几种实现电脑自动切换IP地址的方法&#xff0c;以满足不同用户的需求。…...

hbase集成phoenix

1.环境 环境准备 三台节点zookeeper三节点hadoop三节点hbase三节点 2.pheonix集成 官网下载地址&#xff0c;需挂梯子&#xff0c;使用官网推荐的对应hbase版本即可 https://phoenix.apache.org/download.html下载及解压 wget https://dlcdn.apache.org/phoenix/phoenix-…...

单片机智能家居火灾环境安全检测

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会&#xff0c;火灾安全始终是人们关注的重点问题。随着科技的不…...

Git_2024/11/16

文章目录 前言Git是什么核心概念工作流程常见术语解读Git的优势 Git与SVN对比SVNGit总结 Git配置流程及指令环境配置获取Git仓库本地初始化远程克隆 工作目录、暂存区、版本库文件的两种状态本地仓库操作远程仓库操作Git分支Git标签IntelliJ IDEA使用Git回滚代码 GitHub配置流程…...

Java基础夯实——2.1Java常见的线程创建方式

在 Java 中&#xff0c;线程是实现并发编程的核心。主要有以下三种&#xff1a; 继承 Thread 类实现 Runnable 接口实现 Callable 接口并结合 Future 使用 1. 继承 Thread 类 继承 Thread 类是创建线程的最简单方式之一。通过扩展 Thread 类并重写其 run 方法&#xff0c;可…...

【Docker容器】一、一文了解docker

1、什么是docker&#xff1f; 1.1 docker概念 Docker是一种容器化平台&#xff0c;通过使用容器技术&#xff0c;Docker允许开发人员将应用程序和其依赖项打包到一个独立的、可移植的容器中。每个容器具有自己的文件系统、环境变量和资源隔离&#xff0c;从而使应用程序可以在…...

Spring:IOC实例化对象bean的方式

对象已经能交给Spring的IOC容器来创建了&#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程&#xff0c;在这块内容中主要解决两部分内容&#xff0c;分别是 bean是如何创建的实例化bean的三种方式&#xff0c;构造方法,静态工厂和实例工厂 在讲解这…...

深入解析生成对抗网络(GAN)

1. 引言 背景介绍 在过去的几十年中&#xff0c;深度学习在计算机视觉、自然语言处理和语音识别等领域取得了巨大的突破。然而&#xff0c;如何让机器生成高质量、逼真的数据一直是人工智能领域的挑战。传统的生成模型&#xff0c;如变分自编码器&#xff08;VAE&#xff09;…...

curl命令提交大json

有个客户需要提交一个4M左右的pdf&#xff0c;接口里传的是pdf字节流base64编码后的字符串。 直接curl -XPOST -d json串 api接口会报 参数过长报错Argument list too long 网上搜了下解决方案把json串放到文本里然后通过json.txt引入参数 这一试不要紧&#xff0c;差点儿导致…...

以太坊拥堵扩展解决方案Arbitrum

Arbitrum是一种用于以太坊的Layer 2&#xff08;L2&#xff09;扩展解决方案&#xff0c;以下是详细介绍&#xff1a; 1. 背景和基本原理 背景介绍&#xff1a;随着以太坊网络的发展&#xff0c;交易拥堵和高Gas费用的问题逐渐凸显。为了解决这些问题&#xff0c;Layer 2扩展…...

Flask核心进阶:路由、模板与静态文件实战

在掌握Flask入门知识后&#xff0c;想要开发出更具实用性和美观度的Web应用&#xff0c;就需要深入学习其核心进阶功能&#xff0c;其中路由、模板与静态文件是最基础也是最常用的三个模块&#xff0c;三者协同工作&#xff0c;构成了Flask Web应用的前端展示与请求分发体系。路…...

穿越机老鸟踩坑实录:MPU6000传感器在F4飞控上的IMU方向“玄学”配置

穿越机IMU方向配置实战&#xff1a;从MPU6000异常自旋到飞控底层校准 当你的穿越机在通电瞬间像被无形大手狠狠抽了一记耳光般疯狂自旋&#xff0c;而Betaflight地面站里陀螺仪数据却显示"一切正常"时&#xff0c;这往往意味着你正遭遇IMU方向配置的"量子纠缠态…...

5分钟免费制作专业AI翻唱:AICoverGen完整指南

5分钟免费制作专业AI翻唱&#xff1a;AICoverGen完整指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想让AI帮你翻唱…...

Hitboxer终极指南:专业级游戏键盘重映射与SOCD清理工具完全教程

Hitboxer终极指南&#xff1a;专业级游戏键盘重映射与SOCD清理工具完全教程 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd Hitboxer是一款专为竞技游戏玩家设计的专业级键盘按键重映射和SOCD清理工具&#xff…...

Claude模型思维链评估框架claweval:原理、实战与高级定制指南

1. 项目概述&#xff1a;一个专为Claude模型设计的“思维链”评估框架最近在AI应用开发圈里&#xff0c;一个名为claweval的项目开始被频繁提及。如果你正在使用Anthropic的Claude系列模型&#xff08;无论是Claude 3 Opus、Sonnet还是Haiku&#xff09;来构建需要复杂推理能力…...

基于容器技术的在线代码沙盒:架构设计与安全实践

1. 项目概述&#xff1a;一个开箱即用的在线代码运行沙盒最近在折腾一些需要快速验证代码片段、或者给团队做技术分享的场景&#xff0c;我发现一个痛点&#xff1a;环境配置太麻烦了。你想让新人跑个Python脚本&#xff0c;他可能得先装Python、配环境变量、装依赖库&#xff…...

MCP-Commander:让AI助手操作本地文件与命令行的智能接口

1. 项目概述&#xff1a;一个连接思维与执行的智能接口最近在折腾AI工作流的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫nmindz/mcp-commander。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你正在尝试让大型语言模型&#xff08;LLM&#xf…...

ASPICE汽车软件开发标准:V模型、能力等级与核心过程实战解析

1. 项目概述&#xff1a;为什么我们需要ASPICE这张“汽车软件地图”如果你在汽车行业&#xff0c;尤其是涉及软件、电子电气或系统开发的岗位待过一阵子&#xff0c;大概率会频繁听到一个词&#xff1a;ASPICE。它可能出现在项目启动会上&#xff0c;出现在供应商审核清单里&am…...

AI对话记忆管理实战:memory-organizer库解决长上下文难题

1. 项目概述&#xff1a;一个为AI记忆体“瘦身”与“归档”的利器最近在折腾一些本地大语言模型&#xff08;LLM&#xff09;的应用&#xff0c;比如搭建个人知识库助手或者长期对话机器人&#xff0c;一个绕不开的痛点就是“记忆”的管理。模型本身没有持久记忆&#xff0c;每…...

TMP006红外热电堆传感器:从塞贝克效应到Arduino/Python实战应用

1. 项目概述&#xff1a;从“摸”到“看”的温度测量革命在嵌入式开发和物联网项目中&#xff0c;温度测量是个再常见不过的需求。传统上&#xff0c;我们习惯用DS18B20这类接触式传感器&#xff0c;需要把探头紧贴被测物体&#xff0c;甚至用导热硅脂来确保热传导。但有些场景…...