当前位置: 首页 > 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…...

Redisson分布式锁

概览 个人博客源地址 Redisson不只是一个 Java Redis 客户端&#xff0c;它是一个以内存 Redis 服务器作为后端的处理 Java 对象(如 java.util.List, java.util.Map, java.util.Set, java.util.concurrent.locks.Lock 等)的一个框架。 Redisson提供了使用Redis的最简单和最…...

【C语言--趣味游戏系列】--电脑关机整蛊小游戏

前言&#xff1a; 老铁们&#xff0c;还是那句话&#xff0c;学习很苦游戏来补&#xff0c; 为了提高大家与朋友之间的友谊&#xff0c;博主在这里分享一个电脑关机的恶作剧小游戏&#xff0c;快拿去试试吧&#xff01;&#xff01;&#xff01; 目录&#xff1a; 1.电脑关机代…...

C#实现一个HttpClient集成通义千问-开发前准备

集成一个在线大模型&#xff08;如通义千问&#xff09;&#xff0c;来开发一个chat对话类型的ai应用&#xff0c;我需要先了解OpenAI的API文档&#xff0c;请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…...

二叉树优选算法(一)

一、根据二叉树创建字符串 题目介绍&#xff1a; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需…...

单片机C51--笔记8-STC89C51RC/RD-IIC协议

一、概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式。 特点 简单性和有效性。 由于接口直接在组件之上&#xff0c;因此IIC总线占用的空间非常小…...

HttpUtil的get和post请求

Http工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.ht…...

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …...

前端项目使用gitlab-cicd+docker实现自动化部署

GitLab CI/CD 是一个强大的工具&#xff0c;可以实现项目的自动化部署流程&#xff0c;从代码提交到部署只需几个步骤。本文将带你配置 GitLab CI/CD 完成一个前端项目的自动化部署。 前言 为什么使用cicddocker&#xff1f; 目前我们公司开发环境使用的shell脚本部署&#…...

【Linux】进程

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、冯诺依曼体系结构 &#x1f31f;系统调用和库函数概念 二、操作系统OS 三、进程 &#x1f31f;查看进程 &#x1f31f;通过系统调用获取进程标示符 &#x1f31f;通过系统调用创…...

transformers生成式对话机器人

简介 生成式对话机器人是一种先进的人工智能系统&#xff0c;它能够通过学习大量的自然语言数据来模拟人类进行开放、连贯且创造性的对话。与基于规则或检索式的聊天机器人不同&#xff0c;生成式对话机器人并不局限于预定义的回答集&#xff0c;而是可以根据对话上下文动态地…...

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战

Text2SQL&#xff08;NL2sql&#xff09;对话数据库&#xff1a;设计、实现细节与挑战 前言1.何为Text2SQL&#xff08;NL2sql&#xff09;2.Text2SQL结构与挑战3.金融领域实际业务场景4.注意事项5.总结 前言 随着信息技术的迅猛发展&#xff0c;人机交互的方式也在不断演进。…...

C# 关于加密技术以及应用(二)

AES&#xff08;Advanced Encryption Standard&#xff09;和 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是两种不同的加密算法&#xff0c;它们各自有特定的使用场景和优势。下面是它们的主要区别和适用场景&#xff1a; AES&#xff08;高级加密标准&#xff09; 特…...

四十四:Web如何关闭会话

在Web应用中&#xff0c;关闭会话&#xff08;Session Termination&#xff09;是一个重要的机制&#xff0c;用于确保用户的会话状态被安全地终止。无论是用户主动退出登录还是因超时被动登出&#xff0c;正确地管理会话关闭有助于提升安全性并释放服务器资源。 一、为什么需…...

在wsl2中安装archlinux

在之前的博客中&#xff0c;我介绍了如何在虚拟机或者真实机上安装archlinux并且进行一定的配置&#xff0c;但是实际上Linux不管怎么配置在日常使用中都没有Windows简单便利&#xff0c;在开发有关Linux的程序时过去用虚拟机或者直接在Windows上使用ssh在远程服务器上进行开发…...

在Goland中对goroutine协程断点调试

在Goland中对goroutine协程断点调试 环境: Goland 参考了 chatgpt 的回复 进行断点调试的代码 package mainimport ("fmt""sync""time" )// worker 模拟处理任务 func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 确保任务完成后…...

最长连续递增序列

问题分解 1&#xff1a;要求 要求找到最长的连续递增子序列&#xff0c;即在原数组中位置连续且数值严格递增的一段序列 2&#xff1a;输入和输出 输入是一个未经排序的整数数组nums 输出是该数组中最长连续递增子序列的长度 3&#xff1a;边界调节 数组为空则长度为0 …...

apt 包 源 的维护 和缓存 命令

APT 包源维护命令 更新软件包列表&#xff1a; sudo apt update&#xff1a;从配置的软件源中获取最新的软件包信息。这是安装、升级或删除软件包前通常要执行的步骤&#xff0c;以确保使用的是最新的软件包信息。 升级软件包&#xff1a; sudo apt upgrade&#xff1a;升级系…...

【排序方法的总结】

在数据结构中常见的排序方法有&#xff1a; 插入排序、交换排序、选择排序、归并排序和基数排序等。 插入排序 特点&#xff1a; 简单直观&#xff0c;对于小规模的数据排序效率较高。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后…...

工作中常用springboot启动后执行的方法

前言&#xff1a; 工作中难免会遇到一些&#xff0c;程序启动之后需要提前执行的需求。 例如&#xff1a; 初始化缓存&#xff1a;在启动时加载必要的缓存数据。定时任务创建或启动&#xff1a;程序启动后创建或启动定时任务。程序启动完成通知&#xff1a;程序启动完成后通…...

QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介 在Qt中&#xff0c;使用QTableView和QStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能&#xff0c;而不使用第三方库&#xff08;如QXlsx&#xff09;。 效果 将 QTableView 中的数据导出到Excel //从tableview 导出到 EXcle void MainInterfa…...

模版方法模式的理解和实践

在软件开发中&#xff0c;设计模式为我们提供了一套经过验证的解决方案&#xff0c;用于解决常见的设计问题。其中&#xff0c;模版方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并允许子类在不改…...

05-树莓派-交叉编译

交叉编译的概念 交叉编译是什么 来源百度百科&#xff1a; 交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统&#xff1b;同样&#xff0c;同一个操作系统也可以在不同的体系结构上运行。 举例来说&#xff0c;我们常说的x86 Lin…...

杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果&#xff1a;&#xff08;还有改进的余地&#xff09; 我的方法是笨方法&#xff0c;也比较刻板。 1&#xff0c;首先想到&#xff0c;把屏幕打印下来。c#提供了这样一个函数&#xff1a; Bitmap bmp new Bitmap(640, 480, PixelFormat.Format32bppArgb); // 创…...

非归档模式下一个或多个数据文件损坏恢复

1. 介绍 有些时侯可能你的库处于非归档的模式下&#xff0c;而你的联机重做日志又currupted,你的数据文件不能完成完全的恢复&#xff0c;这里为大家介绍一个oracle的一个隐藏参数_allow_resetlogs_corruption&#xff0c;让数据库重生。 通过设置隐含参数恢复 alter system …...

k8s 之storageclass使用nfs动态申请PV

文章目录 配置角色权限部署nfs-client-provisioner创建 NFS StorageClass创建 PVC 来动态申请 PV在 Pod 中使用 PVC验证存储是否正确挂载使用 kubectl 和 jq 筛选 PVCwaiting for a volume to be created, either by external provisioner "nfs-diy" or manually cre…...

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…...

Mitel MiCollab 企业协作平台 任意文件读取漏洞复现(CVE-2024-41713)

0x01 产品简介 Mitel MiCollab是加拿大Mitel(敏迪)公司推出的一款企业级协作平台,旨在为企业提供统一、高效、安全的通信与协作解决方案。通过该平台,员工可以在任何时间、任何地点,使用任何设备,实现即时通信、语音通话、视频会议、文件共享等功能,从而提升工作效率和…...

React学习笔记(一)

创建函数写法一&#xff1a; 重点&#xff1a;函数有几种写法 function DemoShow() {return (<div className"App">函数声明</div>); }export default DemoShow;对应js创建函数声明&#xff1a;function sum1(a,b){return ab } 创建函数写法二&#x…...

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…...

SQL按指定字符分割字符串

在SQL中分割字符串通常需要使用特定的函数&#xff0c;因为SQL本身并不像编程语言那样直接支持字符串分割。不同的数据库系统有不同的函数来处理字符串分割。以下是一些常见数据库系统中分割字符串的方法&#xff1a; 1. MySQL 在MySQL中&#xff0c;你可以使用SUBSTRING_IND…...

NAT traversal 原理 | TCP / UDP/ P2P

注&#xff1a;本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺&#xff0c;提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …...

喜报!极限科技(INFINI Labs)通过国家高新技术企业认定

2024 年 10 月 29 日&#xff0c;国家高新技术企业认定管理工作网公示了北京市认定机构 2024 年认定报备的第一批高新技术企业备案名单&#xff0c;极限数据&#xff08;北京&#xff09;科技有限公司 顺利通过本次高新技术企业评审&#xff0c;并获得 国家级“高新技术企业”认…...

在Ubuntu 22.04上搭建Kubernetes集群

Kubernetes 简介 什么是 Kubernetes&#xff1f; Kubernetes&#xff08;常简称为 K8s&#xff09;是一个强大的开源平台&#xff0c;用于管理容器化应用程序的部署、扩展和运行。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff0…...

【OpenCV】平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

Vue了解

​​​​​​​MVVM和MVC区别是什么? MVC &#xff1a; 传统的设计模式。 设计模式&#xff1a; 一套广泛被使用的开发方式 M&#xff1a; model 模型 模型&#xff1a;就是数据的意思 V &#xff1a; view视图 视图&#xff1a;就是页面的意思 C&#xff1a;controlle…...

JS 深拷贝浅拷贝

一、浅拷贝 // 假设有一个JSON对象 let originalObject {name: "Alice",age: 25,interests: ["reading", "coding"] };// 将JSON对象赋值给另一个变量 let copiedObject originalObject;// 修改新变量的属性 copiedObject.age 26;// 输出原始…...

设计模式学习之——单例模式

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这个模式的主要目的是控制对象的创建&#xff0c;确保在程序的整个生命周期中&#xff0c;某个类只有一个实例被创…...

Linux Vi/Vim使用 ⑥

掌握 CentOS 7 下的 Vi/Vim 编辑器&#xff1a;从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中&#xff0c;Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称&#xff0c;虽然初次上手有一定学习门槛&#xff0c;但掌握之后便能…...

【5G】5G技术组件 5G Technology Components

5G的目标设置非常高&#xff0c;不仅在数据速率上要求达到20Gbps&#xff0c;在容量提升上要达到1000倍&#xff0c;还要为诸如大规模物联网&#xff08;IoT&#xff0c; Internet of Things&#xff09;和关键通信等新服务提供灵活的平台。这些高目标要求5G网络采用多种新技术…...

Java 学习,字符串比较

Java 字符串比较通常使用 equals() 方法&#xff0c;而不是使用 运算符。因为 运算符&#xff0c;比较的是字符串对象的引用是否相同&#xff0c;而 equals() 方法比较的是字符串的内容是否相同。 使用equals()等方法&#xff0c;比较两个字符串&#xff1a; public class …...

普通算法——二维前缀和

二维前缀和 题目链接&#xff1a;https://www.acwing.com/problem/content/798/ 题目描述&#xff1a; 输入一个 n n n 行 m m m 列的整数矩阵&#xff0c;再输入 q q q 个询问&#xff0c;每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…...

2024年API接口发展趋势:智能化、自动化引领潮流

随着信息技术的飞速发展&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁&#xff0c;使得数据、功能和服务能够在各种平台和设备之间无缝流动。在2024年&#xff0c;API接口正经历着一系列显著的变革和发…...

SQL中的通配符:使用LIKE操作符进行模式匹配

在SQL中&#xff0c;LIKE 操作符用于在查询中进行模式匹配。它常用于 WHERE 子句中&#xff0c;以便根据特定模式查找数据。与直接进行精确匹配的 操作符不同&#xff0c;LIKE 允许你使用通配符来对数据进行模糊查询&#xff0c;从而使查询更加灵活和强大。 常见的SQL通配符 …...

数据结构:数组

线性表: 线性表就是数据排成像一条线一样的结构.每个现行表上的数据最多只有前和后两个方向.常见的线性表结构&#xff1a;数组&#xff0c;链表、队列、栈等。 什么是数组: 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储…...

2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判

2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判 完整代码请私聊 博主 一、背景 在各类学科竞赛中&#xff0c;常常要求参赛者提交 Excel 或/和 PDF 格式的竞赛作品。 本赛题以某届数据分析竞赛作品的评阅为背景&#xff0c;要求参赛者根据给定的评分准则和标准答案&a…...

java+ssm+mysql美妆论坛

项目介绍&#xff1a; 使用javassmmysql开发的美妆论坛&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 用户&#xff1a;主要是前台功能使用&#xff0c;包括注册、登录&#xff1b;查看论坛板块和板块下帖子&#xff1b;…...

MySQL | 尚硅谷 | 第13章_约束

MySQL笔记&#xff1a;第13章_约束 文章目录 MySQL笔记&#xff1a;第13章_约束第13章_约束 1. 约束(constraint)概述1.1 为什么需要约束1.2 什么是约束1.3 约束的分类演示代码 2. 非空约束2.1 作用2.2 关键字2.3 特点2.4 添加非空约束2.5 删除非空约束演示代码 3. 唯一性约束3…...

【Ubuntu】Ubuntu的Desktop(学习/用户使用)和Bit版本(工作)

这篇文章似乎没什么必要写&#xff0c;但想了想还是决定记录一下&#xff0c;也许对新手入坑Ubuntu会有帮助&#xff0c; 事实上也很简单&#xff0c;一个是桌面版本&#xff0c;另一个是字符界面版本。 桌面版&#xff1a;拥有图形桌面 字符界面&#xff0c;易上手&#xff…...

面试之MySQL自增ID耗尽问题的解决方案详解

自增ID耗尽问题的解决方案详解 目录 引言切换到BIGINT分表分库UUID雪花算法&#xff08;Snowflake&#xff09;回收已删除的ID其他策略策略选择和实施总结 引言 在现代数据库应用中&#xff0c;自增ID作为主键被广泛使用。随着数据量的不断增长&#xff0c;自增ID耗尽问题逐…...