shell基础用法
shell基础知识
shell中的多行注释
:<<EOF
read
echo $REPLY # read不指定变量,则默认写入$REPLY
EOF
# :<<EOF ...EOF 多行注释,EOF可以替换为!# 等
文件目录和执行目录
echo '$0='$0 # ./demo.sh
echo '$0的realpath='$(realpath $0) # 完整路径
echo '$0的父目录='$(dirname $(realpath $0)) # 文件的父目录echo "BASH_SOURCE="${BASH_SOURCE} # ./demo.sh
echo "BASH_SOURCE的realpath="$(realpath ${BASH_SOURCE}) # 完整路径echo '文件执行目录:'`pwd` # 执行目录
当使用bash或./执行时,$0和${BASH_SOURCE}是一样的,但是通过.或source命令执行脚本时,$0就变为了/bin/bash ,无法达到想要的效果;
- BASH_SOURCE
如果你有一个脚本 script1.sh 调用了 script2.sh,而 script2.sh 又调用了 script3.sh,那么在 script3.sh 中,BASH_SOURCE 数组将包含以下路径:
BASH_SOURCE[0] 将是 script3.sh 的路径。
BASH_SOURCE[1] 将是 script2.sh 的路径。
BASH_SOURCE[2] 将是 script1.sh 的路径。
shell变量
变量赋值
var=‘hello word’
unset var # 删除变量,不能删除只读变量
readonly var=89 # 只读变量
数组定义
var_array=(value1 value2 value3) # 普通数组
declare -A var_url_array=(['baidu']='www.baidu.com' ['taobao']='www.taobao.com' ['jd']='jingdong.com') # 关联数组
echo ${var_array} # value1
echo ${var_url_array} # 空
echo ${var_array[1]} # value2
echo ${var_url_array["taobao"]} # www.baidu.com
echo ${var_array[*]} # value1 value2 value3
echo ${var_array[@]} # value1 value2 value3
echo ${var_url_array[*]} # www.baidu.com jingdong.com www.taobao.com
echo ${var_url_array[@]} # www.baidu.com jingdong.com www.taobao.com
echo ${#var_array[1]} # 6 计算数组下标元素的长度
echo ${#var_array[*]} # 3 计算数组的长度
echo ${#var_url_array[*]} # 3
echo ${#var_url_array["taobao"]} # 14
echo ${!var_array[*]} # 0 1 2 获取数组的key
echo ${!var_url_array[*]} # baidu jd taobao 获取数组的key
echo ${var_array[@]:0:2} # value1 value2 切片访问,从0下标开始,长度是2
echo ${var_url_array[@]:1:2} # www.baidu.com jingdong.com
echo ${var_array[@]/value/num} # num1 num2 num3 数组内容替换
echo ${var_url_array[@]/www/} # .baidu.com jingdong.com .taobao.com
# 以上4条命令,同样可以指定下标,就是对数组下标元素操作
unset var_array[0]
echo ${var_array[*]} # value2 value3
unset var_url_array["taobao"]
echo ${var_url_array[*]} # www.baidu.com jingdong.com
# 需要注意的是,var_array删除下标0之后,并不会重置下标
echo ${!var_array[*]} # 1 2
var_array[7]=78
echo ${!var_array[*]} # 1 2 7
echo ${var_array[*]} # value2 value3 78
var_array+=(10 20)
echo ${var_array[*]} # value2 value3 78 10 20
var_array=(${var_array[*]} 1 2 3)
echo ${var_array[*]} # value2 value3 78 10 20 1 2 3
unset var_array # 删除整个数组
for i in ${!var_url_array[*]} ; do echo $i; done # 遍历数组的key:baidu \n jd
for i in ${var_url_array[*]} ; do echo $i; done # 遍历数组的值:www.baidu.com \n jingdong.com
test1(){echo "接收到的参数列表:$@"newarr=($@)echo "新数组的值为:${newarr[*]}"return $newarr # 不建议这样写,其实只能返回数组第一个元素的整数值
}
# shell脚本调用也不能传入数组,所以建议直接在脚本中定义数组
arr=(10 2 3)
test1 ${arr[*]}
echo $?#接收到的参数列表:10 2 3
#新数组的值为:10 2 3
#10
shell内置变量
$MACHTYPE:机器类型
$OSTYPE:操作系统类型
$HOSTNAME:当前主机名
$HOME:当前用户家目录
$USER:当前用户名
$UID:当前用户ID
$SHELL:当前shell的路径
$PWD:当前目录
$IFS:字段分隔符
$RANDOM:随机数
$SECONDS:shell 脚本启动的秒数
$FUNCNAME:当前函数的名称
特殊参数变量
$0 --脚本名称
$n --位置参数
$# --参数个数
$* --所有参数
$@ --所有参数;
不加双引号时,$* 、$@相同,都是独立字符串;加上双引号时,$*是将所有参数作为整个字符串,而$@是将每个参数作为独立字符串;
特殊状态变量
$? – 退出状态码
$! – 上一个后台运行的程序的进程id
$$ – 当前脚本的pid
$_ – 上一个命令的最后一个参数
shell内置命令
date
date +'%Y-%m-%d %H:%M:%S'
# 2024-11-18 19:14:02
tee
# 同时写入标准输出和文件。
echo "hello"|tee a.txt # 写入a.txt文件,同时也会到标准输出,-a参数代表追加;
echo "hello world"|tee a.txt b.txt c.txt # 同时重定向到多个文件;
lsblk|tee a.txt > /dev/null # 这样可以不到标准输出
lsblk 2>&1|tee a.txt # 将标准错误也写入a.txt文件;
tee -i a.txt # 从键盘获取输入写入文件,-i不会被ctrl+c打断,可用ctrl+d打断;
echo和printf
echo -e "\n hello" # 支持转义字符
echo -n "hello" # 不换行
printf "hello \t world" # printf默认支持转义,默认不换行
printf "%d %s %.2f" 24 hello 4.5678 # 24 hello 4.57
exec 和 eval
eval "pwd" # eval可以将字符串作为命令执行
exec date # exec 执行命令后退出,相当于自动执行一次exit
cat 重定向
cat > b.txt <<EOF
first
second
third
EOF
local
function func(){
local name='inside var'
}
# 默认情况下,函数内部定义的变量也属于全局变量。但是只要在变量名前加local关键字,该变量就会变成局部变量。
trap
用于捕获和处理信号:
#!/bin/bash
# 定义错误处理函数,将错误信息记录到日志文件
handle_error() {echo "$(date): $BASH_COMMAND failed with exit code $?"
}
# 设置 ERR 信号处理函数
trap handle_error ERR EXIT
# 其他代码逻辑
ls none.txt
# 运行 ./demo.sh
# ls: 无法访问'none.txt': 没有那个文件或目录
# 2024年 11月 22日 星期五 21:30:53 CST: ls none.txt failed with exit code 0
# 2024年 11月 22日 星期五 21:30:53 CST: ls none.txt failed with exit code 0
捕获了ERR信号,同时也捕获了EXIT信号,所以打印了2遍;这里打印的退出码是0,其实是因为执行$(date)命令成功。
#!/bin/bash
trap cleanup INTcleanup() {echo "Caught interrupt signal. Cleaning up..."
}echo "Press Ctrl+C to interrupt me!"
while true; do sleep 1; done
declare
declare [+/-] [选项] 变量名, 其中,+表示取消设置,-表示设置。
声明变量类型:在默认情况下,Linux中的变量是弱类型,即默认都是字符串类型。使用declare可以声明变量的类型,例如使用-i选项将变量作为整数处理。参考
declare -i data1 data2 res
data1=10
data2=20
res=$data1+$data2
echo $res # 30 如果不声明,那结果是10+20
declare +i data # 去掉整数属性
declare -r name='test' # 声明只读变量
name='zyy' # 报错bash: name: 只读变量
readonly a=1 # 也是定义只读变量
declare -a arr=(1 2)
#对于索引数组来说,declare是否声明似乎并无差别(索引数组顺序固定)
declare -A b=(["apple"]=1 ["boy"]=2 ["cat"]=3)
# 但对于关联数组,则必须使用declare -A声明(关联数组顺序不定)
demo(){echo "demo function"
}
declare -f demo
# declare -f 函数名 显示函数的名称和定义代码; -F是只显示函数名称
declare -x APP=“mail” -x代表声明环境变量,完全等同于export。
export
直接执行export命令,会显示所有环境变量;
export APP=“mail” 其实相当于 declare -x APP=“mail”,设置后,在当前shell及其子shell中共用该环境变量。直接定义变量a=1,是不能在子shell中共用的。
set
set -xe
echo $var
ls none.txt
echo hello
# 运行./demo.sh
# ++ echo# ++ ls none.txt
# ls: 无法访问'none.txt': 没有那个文件或目录
-x 代表打印每一行的执行结果;
-e代表遇到错误就退出;bash默认遇到错误会接着执行;
还有-u,如果指定了未定义的变量,会报错退出;
set first second third
echo $1
# 运行./demo.sh param1
# first
# set 会重新赋值给位置参数
env
env --显示所有环境变量,包括自己脚本中编写的export的变量;
export --显示所有环境变量,和env查询出的变量一致;
declare --显示所有变量,包括全局变量(包括环境变量)、局部变量;
set --显示所有变量,和declare查询出的变量一致;
ps --forest
ps -ef --forest --展示父进程和子进程的关系
()开启子shell
利用括号,开启子she11的理念,以及检查,在she11脚本开发中,经常会用子she11进行多进程的处理,提高程序并发执行效率。
echo $BASH_SUBSHELL
0 # 0表示当前shell
(pwd;echo $BASH_SUBSHELL)
/home/xxx/Desktop
1 # 1 嵌套一层shell
(pwd;(echo $BASH_SUBSHELL))
/home/xxx/Desktop
2 # 2 嵌套2层shell
{} # 代表当前shell执行
tr 转换和压缩
echo 1234abcd|tr 12 34 # 3434abcd
echo 1234abcd|tr [0-9] d # ddddabcd
echo 1234abcd|tr [a-z] [A-Z] # 1234ABCD
echo 1234abcd|tr "1234" "[A*]C" # AAACabcd
echo 1234abcd|tr "1234" "AC" # ACCCabcd
echo 1234abcd|tr -t "1234" "AC" # AC34abcd
# 以上这种由set1转换为set2,是一一对应的,如果个数对不上,默认重复set2的最后一个字符。加上-t,可以避免重复,而不替换;echo 1234abcd|tr -d [:digit:] # abcd
echo 1234abcd|tr -dc [:digit:] # 1234
# -d 删除匹配的字符,-dc 保留匹配的字符(相当于反选)并且-c删除了末尾的换行符;echo aaa123bbbb123|tr -s 'ab' # a123b123
echo aaa123bbbb123|tr -s '123' 'ccc' # aaacbbbbc
# -s 代表压缩,第一个命令是对a和b字符压缩,第二个命令是先将123替换为ccc,再对ccc字符压缩;
mkdir
- mkdir a/{b, c} 指定目录下同时创建多个文件夹
- mkdir -p xx/xxx 代表无父目录可直接创建
解压和压缩
- tar czf a.tar.gz 1.txt 2.txt
- tar xzf a.tar.gz -C 目录
都可以加-v,显示具体过程
sort和uniq
cat file|sort # 默认按ASCII码排序
cat file|sort -u # 去重排序
echo -e '2\n1\n-9'|sort -n # 按数字排序
sort -r # 反向排序
sort -k2 file # 按第二列排序
uniq # 按行去重,只会对相邻重复的行去重
uniq -d file # 列出重复的行
uniq -u file # 列出不重复的行
uniq -c # 统计行的重复次数
# 实现对文件中获取重复行的重复次数
sort example.txt | uniq -ic # -i 不区分大小写
curl
curl -s -I http://example.com | grep HTTP
# -s 安静模式,不打印错误信息、进度信息、网速等;
# -I 发送一个 HEAD 请求,仅请求页面的 HTTP 头部信息,当仅需检查状态码时(HTTP/1.1 200 OK)可使用此命令。
shell内置和外置命令
内置命令通过compgen -b 查看;
“type + 命令” 可以判断是内置还是外置命令;
内置命令:在系统启动时就加载入内存,常驻内存,执行效率更高,但是占用资源,如pwd;
外置命令:系统需要从硬盘中读取程序文件,再读入内存加载,一定会开启子进程执行;
shell循环
# 循环读取test.txt中的每一行
while read x
doecho input is $x
done<test.txt
until [ ${i:=0} -gt 10 ]
dolet i++echo $i
done # 1 2 ... 10 11
while循环在条件为真时继续执行,条件为假时停止。
until循环在条件为假时继续执行,条件为真时停止。
for((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done
for i in $(seq 0 4);do echo $i;done
for i in 0 1 2 3 4;do echo $i;done
# 0 1 2 3 4
num=3
if (($num==3));then echo succ;elif (($num>3));then echo bigger;else echo smaller;fi
# succ
shell计算
普通计算
res=$((10+67))
num=10
let num=num+10
echo $num # 20
expr 10 + 9 # 19
# expr支持模式匹配,判断是否以.jpg为后缀,返回非0就是符合要求的;冒号代表计算匹配的字符长度
expr taohua.jpg : ".*\.jpg" # 10
expr taohua.jpg : ".*" # 10
expr length taohua.jpg # 10
# bc命令,计算1+2+3+..+1000
echo {1..1000}|tr " " "+"|bc
# []计算
echo $[10-9] # 1
需要注意的是,双小括号、let、expr、中括号只能进行整数计算,而bc可以支持小数计算。awk也可用于计算,虽然不是专门做计算的。
echo 2.4 4.5|awk '{print $1+$2}' # 6.9
shell应用
统计字符串长度
# 方式一:
name="Katherine Pierce"
echo ${#name}# 方式二:
echo $name|wc -L# 方式三:
expr length "$name"# 方式四:
echo $name|awk '{print length($0)}'
统计命令执行时间
time for i in {1..3000};do str1=`seq -s ":" 100`;echo ${#str1}>/dev/null;done
# real 0m5.143s 实际执行时间
# user 0m3.506s 用户态执行时间
# sys 0m1.692s 内核态执行时间
一般shell内置命令和语法,执行效率最高,因为底层都是用C实现,尽量减少管道符实现;
获取目录下的所有文件的完整路径
# demo.sh
#!/bin/bashfunction get_file(){for file in `ls $1`dodir_file=$1/$fileif [ -d $dir_file ]thenget_file $dir_fileelseecho $dir_filefidone
}
get_file $1# ./demo.sh /home/uos 打印目录下所有的文件
字符串截取
name="Katherine Pierce"
echo ${name:2} # therine Pierce
echo ${name:2:3} # the 截取3个字符
echo ${name:2:-3} # therine Pie 如果是负数,则截取到-3的位置处
name="Katherine therce"
echo ${name#*th} # erine therce 左边开始匹配,删除最短匹配
echo ${name##*th} ## erce 左边开始匹配,删除最长匹配
echo ${name%th*} ## Katherine 右边开始匹配,删除最短匹配
echo ${name%%th*} ## Ka 右边开始匹配,删除最长匹配
echo ${name/th/boy} ## 仅替换第一个,Kaboyerine therce
echo ${name//th/boy} ## 替换所有匹配,Kaboyerine boyerce
# cut命令也可用于截取字符
echo $name|cut -c 3-5 # the -c按字符位置切割
扩展变量
# 如果param变量为空,则word赋给$res,不会给$param;注意如果param不为空,则不进行相关处理;
res=${param:-word}
# 这里的冒号可以省略,有时候看到这样的写法也是可以的: ${BASE_SOURCE-$0}# 如果param变量为空,则word赋给$res和$param;注意如果param不为空,则不进行相关处理;
res=${param:=word}# 如果param变量为空,word作为stderr错误输出,否则输出变量值 ${param:?word}
${age:?无变量错误}
# bash: age: 无变量错误# 如果param变量为空,什么都不做,否则word返回 ${param:+word}
age=10
echo ${age:+jk}
# jk# 按目录查找文件,这样实现避免dir_path变量未赋值时报错
find ${dir_path:-./} -name "*.png"
待补充
参考
- shell课程;
- shell数组
相关文章:

shell基础用法
shell基础知识 shell中的多行注释 :<<EOF read echo $REPLY # read不指定变量,则默认写入$REPLY EOF # :<<EOF ...EOF 多行注释,EOF可以替换为!# 等文件目录和执行目录 echo $0$0 # ./demo.sh echo $0的realpath$(realpath…...

C#设计模式--策略模式(Strategy Pattern)
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需…...

【opencv入门教程】15. 访问像素的十四种方式
文章选自: 一、像素访问 一张图片由许多个点组成,每个点就是一个像素,每个像素包含不同的值,对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…...

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
导航: 本文一些内容需要聚簇索引、非聚簇索引、B树、覆盖索引、索引下推等前置概念,虽然本文有简单回顾,但详细可以参考下文的【MySQL高级篇】 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模…...

根据html的段落长度设置QtextBrowser的显示内容,最少显示一个段落
要根据 HTML 段落的长度设置 QTextBrowser 的显示内容,并确保至少显示一个段落,可以通过以下步骤来实现: 加载 HTML 内容:首先,你需要加载 HTML 内容到 QTextBrowser 中。可以通过 setHtml() 方法来设置 HTML。 计算段…...

基于Huffman编码的GPS定位数据无损压缩算法
目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示:文末附定位数据压缩工具和源码 一、引言 车载监控系统中,车载终端需要获取GPS信号(经度、纬 度、速度、方向等)实时上传…...

php:完整部署Grid++Report到php项目,并实现模板打印
一、下载Grid++Report软件 路径:开发者安装包下载 - 锐浪报表工具 二、 安装软件 1、对下载的压缩包运行内部的exe文件 2、选择语言 3、 完成安装引导 下一步即可 4、接收许可协议 点击“我接受” 5、选择安装路径 “浏览”选择安装路径,点击"安装" 6、完成…...

C标签和 EL表达式的在前端界面的应用
目录 前言 常用的c标签有: for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 : ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...

Linux絮絮叨(四) 系统目录结构
Linux 系统的目录结构(Filesystem Hierarchy Standard, FHS)定义了 Linux 系统中文件系统的标准布局,以下是一些常见目录的功能: 根目录 / 描述:所有文件和目录的起始点,Linux 文件系统的根。内容…...

Java基于SpringBoot的网上订餐系统,附源码
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

《Java核心技术I》死锁
死锁 账户1:200元账户2: 300元线程1:从账号1转300到账户2线程2:从账户2转400到账户1 如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。 有可能会因为每一个线程要等…...

【Windows11系统局域网共享文件数据】
【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…...

MCU、ARM体系结构,单片机基础,单片机操作
计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…...

在办公室环境中用HMD替代传统显示器的优势
VR头戴式显示器(HMD)是进入虚拟现实环境的一把钥匙,拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域,正如如今的互联网一样,虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…...

ssm 多数据源 注解版本
application.xml 配置如下 <!-- 使用 DruidDataSource 数据源 --><bean id"primaryDataSource" class"com.alibaba.druid.pool.DruidDataSource" init-method"init" destroy-method"close"></bean> <!-- 使用 数…...

selenium常见接口函数使用
博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 1. 查找 查找方式 css_s…...

STM32F103单片机使用STM32CubeMX新建IAR工程步骤
打开STM32CubeMX软件,选择File 选择新建工程 在打开的窗口输入单片机型号 在右下角选择单片机型号,然后点右上角 start project,开始新建工程。 接下来设置调试接口,在左边System Core中选择 SYS,然后在右右边debu…...

刷题重开:找出字符串中第一个匹配项的下标——解题思路记录
问题描述: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入&…...

product/admin/list?page=0size=10field=jancodevalue=4562249292272
文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService https://api.crossbiog.com/product/admin/list?page0&size10&fieldjancode&value45622492922721、ProductController GetMapping("ad…...

人工智能机器学习无监督学习概念及应用详解
无监督学习:深入解析 引言 在人工智能和机器学习的领域中,无监督学习(Unsupervised Learning)是一种重要的学习范式。与监督学习不同,无监督学习不依赖于标签数据,而是通过模型从无标签的数据中学习数据的…...

APM装机教程(五):测绘无人船
文章目录 前言一、元生惯导RTK使用二、元厚HXF260测深仪使用三、云卓H2pro遥控器四、海康威视摄像头 前言 船体:超维USV-M1000 飞控:pix6c mini 测深仪:元厚HXF160 RTK:元生惯导RTK 遥控器:云卓H12pro 摄像头…...

微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)
原因是:需要登陆微信公众平台在开发管理 中设置 相应的 服务器域名 中的 request合法域名 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: true, // 默认为网格布局page: 0, // 当前页码size: 10, // 每页大小hasMore…...

IDEA的service窗口中启动类是灰色且容易消失
大家在学习Spring Cloud的过程中,随着项目的深入,会分出很多个微服务,当我们的服务数量大于等于三个的时候,IDEA会给我们的服务整理起来,类似于这样 但是当我们的微服务数量达到5个以上的时候,再启动服务的时候,服务的启动类就会变成灰色,而且还容易丢失 解决方法 我们按住…...

R中利用ggplot2绘制气泡图
闲来无事,整理了一下自己的绘图笔记,顺便分享到CSDN上。 一、介绍 气泡图(Bubble Plot)是一种常用的数据可视化方法,用于展示三个变量之间的关系。气泡图的特点是通过气泡的大小、颜色和位置来表达数据中的多维信息。…...

CID引流电商
ClickID技术是基于多家媒体平台开发的电商引流服务,通过媒体提供的宏参数,间接解决电商平台订单数据的回传问题,帮助账户收集到极致精准的数据模型,搭建不同媒体往各平台引流的桥梁。简单来说就是通过ClickID数据监测到另外一个平…...

在google cloud虚拟机上配置anaconda虚拟环境简单教程
下载anaconda安装包 wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh 安装 bash Anaconda3-2022.10-Linux-x86_64.sh 进入base环境 eval "$(/home/xmxhuihui/anaconda3/bin/conda shell.bash hook)" source ~/.bashrc 安装虚拟环境…...

windows下用vs搭配clang一起生成抽象语法树
如果你使用的是 Visual Studio 环境,并且想要通知 Clang 关于 C 语言标准库的位置,你可以通过以下几种方法来实现。Visual Studio 提供了完整的 C/C 标准库,Clang 可以与之协同工作。以下是具体步骤: 1. 使用 clang-cl Visual S…...

输入法:点三下输入一个汉字
作者常用的双拼输入法,需要26键。虽然也有9键的方案,但重码率较高。计算一下,9键点2下,共81种排列组合。而汉字的读音,不计声调,有400多个。相差甚多。 所以,设计了“三拼输入法”,…...

URL访问网址的全过程
前言 当我们通过一个网址连接输入到浏览器中,此时会有哪些步骤呢? 过程 大致有这几个流程 1:DNS解析,得到IP地址 2:浏览器根据IP地址,访问服务器,建立TCP连接 3:建立完TCP连接后&…...

Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度
GY-302是一款基于BH1750FVI光照强度传感器芯片的模块。该模块能够直接测量出环境中的光照强度,并将光照强度转换为数字信号输出。其具体参数如下表所示。 参数名称 参数特性 测量范围 0-65535 LX 测量精度 在环境光下误差小于20%,能够自动忽略50/60…...