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

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
  1. mkdir a/{b, c} 指定目录下同时创建多个文件夹
  2. mkdir -p xx/xxx 代表无父目录可直接创建
解压和压缩
  1. tar czf a.tar.gz 1.txt 2.txt
  2. 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"

待补充

参考

  1. shell课程;
  2. shell数组

相关文章:

shell基础用法

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

C#设计模式--策略模式(Strategy Pattern)

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

【opencv入门教程】15. 访问像素的十四种方式

文章选自&#xff1a; 一、像素访问 一张图片由许多个点组成&#xff0c;每个点就是一个像素&#xff0c;每个像素包含不同的值&#xff0c;对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…...

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)

导航&#xff1a; 本文一些内容需要聚簇索引、非聚簇索引、B树、覆盖索引、索引下推等前置概念&#xff0c;虽然本文有简单回顾&#xff0c;但详细可以参考下文的【MySQL高级篇】 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模…...

根据html的段落长度设置QtextBrowser的显示内容,最少显示一个段落

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

基于Huffman编码的GPS定位数据无损压缩算法

目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示&#xff1a;文末附定位数据压缩工具和源码 一、引言 车载监控系统中&#xff0c;车载终端需要获取GPS信号&#xff08;经度、纬 度、速度、方向等&#xff09;实时上传…...

php:完整部署Grid++Report到php项目,并实现模板打印

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

C标签和 EL表达式的在前端界面的应用

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

Linux絮絮叨(四) 系统目录结构

Linux 系统的目录结构&#xff08;Filesystem Hierarchy Standard, FHS&#xff09;定义了 Linux 系统中文件系统的标准布局&#xff0c;以下是一些常见目录的功能&#xff1a; 根目录 / 描述&#xff1a;所有文件和目录的起始点&#xff0c;Linux 文件系统的根。内容&#xf…...

Java基于SpringBoot的网上订餐系统,附源码

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

《Java核心技术I》死锁

死锁 账户1&#xff1a;200元账户2: 300元线程1&#xff1a;从账号1转300到账户2线程2&#xff1a;从账户2转400到账户1 如上&#xff0c;线程1和线程2显然都被阻塞&#xff0c;两个账户的余额都不足以转账&#xff0c;两个线程都无法执行下去。 有可能会因为每一个线程要等…...

【Windows11系统局域网共享文件数据】

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

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备&#xff1a;将其他信号转换为计算机可以识别的信号&#xff08;电信号&#xff09;。输出设备&#xff1a;将电信号&#xff08;&#xff10;、&#xff11;&#xff09;转为人或其他设备能理解的…...

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…...

ssm 多数据源 注解版本

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

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…...

STM32F103单片机使用STM32CubeMX新建IAR工程步骤

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

刷题重开:找出字符串中第一个匹配项的下标——解题思路记录

问题描述&#xff1a; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&…...

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…...

人工智能机器学习无监督学习概念及应用详解

无监督学习&#xff1a;深入解析 引言 在人工智能和机器学习的领域中&#xff0c;无监督学习&#xff08;Unsupervised Learning&#xff09;是一种重要的学习范式。与监督学习不同&#xff0c;无监督学习不依赖于标签数据&#xff0c;而是通过模型从无标签的数据中学习数据的…...

APM装机教程(五):测绘无人船

文章目录 前言一、元生惯导RTK使用二、元厚HXF260测深仪使用三、云卓H2pro遥控器四、海康威视摄像头 前言 船体&#xff1a;超维USV-M1000 飞控&#xff1a;pix6c mini 测深仪&#xff1a;元厚HXF160 RTK&#xff1a;元生惯导RTK 遥控器&#xff1a;云卓H12pro 摄像头&#xf…...

微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)

原因是&#xff1a;需要登陆微信公众平台在开发管理 中设置 相应的 服务器域名 中的 request合法域名 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: true, // 默认为网格布局page: 0, // 当前页码size: 10, // 每页大小hasMore…...

IDEA的service窗口中启动类是灰色且容易消失

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

R中利用ggplot2绘制气泡图

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

CID引流电商

ClickID技术是基于多家媒体平台开发的电商引流服务&#xff0c;通过媒体提供的宏参数&#xff0c;间接解决电商平台订单数据的回传问题&#xff0c;帮助账户收集到极致精准的数据模型&#xff0c;搭建不同媒体往各平台引流的桥梁。简单来说就是通过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 环境&#xff0c;并且想要通知 Clang 关于 C 语言标准库的位置&#xff0c;你可以通过以下几种方法来实现。Visual Studio 提供了完整的 C/C 标准库&#xff0c;Clang 可以与之协同工作。以下是具体步骤&#xff1a; 1. 使用 clang-cl Visual S…...

输入法:点三下输入一个汉字

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

URL访问网址的全过程

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

Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度

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