shell编程之变量与引用

目录

  • 深入认识变量
    • 什么是变量
    • 变量的名称
    • 变量数据类型
    • 变量的定义
    • 自定义变量
    • 环境变量
    • 位置变量
  • 变量赋值和作用域
    • 赋值:变量名=变量值
    • read从键盘读入变量值
    • 变量和引号
    • 变量的作用域
    • 变量的运算

深入认识变量

什么是变量

  • 变量是在程序中保存用户数据的一段内存存储空间,变量名是内存空间的首地址

变量的名称

  • 组成:字母、数字、下划线组成,不能以数字开头
  • 变量名称的长度,shell没有明确规定,但是为了增加可读性,建议使用较短的、见名知意的名称命名
  • 规则
    • 首字符必须为字母:a-z,A-Z
    • 中间不能由空格,可以使用下划线(_)
    • 不能使用标点符号
    • 不能使用bash中关键字,输入help查看bash的保留字
    • 例:下面的变量名都是很好的选择
[root@server ~]# JAVA_HOME=/usr/bin/jvm/jre-1.6.0-openjdk.x86_64
[root@server ~]# SUM=0
[root@server ~]# back_up=/root

变量数据类型

  • 原则:shell是一种动态类型语言和弱类型语言,变量是不分数据类型的,统一都使用字符串存储,但根据变量的上下文环境,允许程序执行一些不同的操作,如:比较、整数加减
  • shell的变量数据类型
[root@server ~]# a=1
[root@server ~]# b=2
[root@server ~]# let c=a+b
[root@server ~]# echo $c
3
[root@server ~]# echo "a+b=$c"
a+b=3
[root@server ~]# echo 'a+b=$c'
a+b=$c

变量的定义

  • 原则:直接使用,不需要变量声明
  • 格式:变量名=变量的值
[root@server ~]# b='china'
[root@server ~]# c=/etc
[root@server ~]# echo $c
/etc
  • = 前后不能收空格
[root@server ~]# a= 3
-bash: 3:未找到命令
[root@server ~]# a=1
  • 字符串类型建议使用双引好作为定界符引起,尤其是字符串中有空格
[root@server ~]# a=hello world
-bash: world:未找到命令
[root@server ~]# a="hello world"

自定义变量

  • 概念:上述以赋值形态形成的变量定义形式称为自定义变量
  • 引用变量的值:
    • $变量名
    • ${表达式或变量名}
[root@server ~]# a=1024
[root@server ~]# echo  $a
1024
[root@server ~]# echo  ${a}
1024
[root@server ~]# echo ${a=1+2}
1024
  • 查看变量
[root@server ~]# set      # 两个功能一样
[root@server ~]# declare
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:gl                                                                        obasciiranges:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvar                                                                        s:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="8" [3]="1" [4]="release" [5]="x86_64-openEuler-linux-                                                                        gnu")
BASH_VERSION='5.1.8(1)-release'
COLUMNS=89
DIRSTACK=()
EUID=0
GROUPS=()
HIFTTIMEFORMAT='%Y-%m-%d %H:%M:%S: '
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S: '
HOME=/root
HOSTNAME=server
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=zh_CN.UTF-8
LINES=25
LOGNAME=root
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;0                                                                        1:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=                                                                        01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31                                                                        :*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=                                                                        01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*                                                                        .bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=0                                                                        1;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:                                                                        *.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=                                                                        01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=0                                                                        1;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35                                                                        :*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.m                                                                        peg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v                                                                        =01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35                                                                        :*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf                                                                        =01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;3                                                                        6:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.                                                                        mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=                                                                        00;36:'
MACHTYPE=x86_64-openEuler-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
MOTD_SHOWN=pam
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0" [1]="0")
PPID=1425
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~                                                                        }"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='192.168.160.1 50243 22'
SSH_CONNECTION='192.168.160.1 50243 192.168.160.137 22'
SSH_TTY=/dev/pts/0
TERM=xterm
UID=0
USER=root
_=age
a=1024
b=china
buffers=12568
c=/etc
cached=128836
colors=/root/.dircolors
ip_address=192.168.160.137
ip_pre=192.168.160.137/24
line=192.168.160.137/24
load_average=0.18
memory_free=1126824
memory_total=1461812
memory_usage=11.3%
processes=144
sreclaimable=28244
swap_free=4194300
swap_mem=0%
swap_total=4194300
time_cur='2024年 11月 15日 星期五 15:59:10 CST'
usageof=12%
user_num=1
welcome=5.10.0-182.0.0.95.oe2203sp3.x86_64
whoiam=root
gawklibpath_append ()
{[ -z "$AWKLIBPATH" ] && AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'`;export AWKLIBPATH="$AWKLIBPATH:$*"
}
gawklibpath_default ()
{unset AWKLIBPATH;export AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'`
}
gawklibpath_prepend ()
{[ -z "$AWKLIBPATH" ] && AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'`;export AWKLIBPATH="$*:$AWKLIBPATH"
}
gawkpath_append ()
{[ -z "$AWKPATH" ] && AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'`;export AWKPATH="$AWKPATH:$*"
}
gawkpath_default ()
{unset AWKPATH;export AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'`
}
gawkpath_prepend ()
{[ -z "$AWKPATH" ] && AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'`;export AWKPATH="$*:$AWKPATH"
}
  • unset命令:
    set中包含刚定义的变量,回收命令
[root@server ~]# age=18
[root@server ~]# set | grep age
age=18
load_average=0.18
memory_usage=11.3%
usageof=12%
[root@server ~]# unset age
[root@server ~]# set | grep age
_=age
load_average=0.18
memory_usage=11.3%
usageof=12%

环境变量

  • 环境变量又称为全局变量,可以在任意子shell生效环境变量又分为自定义环境变量bash内置的环境变量,用户退出命令后改变量会丢失,若需要永久保存就必须写在文件中
  • 定义环境变量
  • 方法1:
[root@server ~]# export  环境变量=值
[root@server ~]# export back_dir1=/home/fox
  • 方法2:
[root@server ~]# 变量名=值
[root@server ~]# export  变量名[root@server ~]# name=zhang
[root@server ~]# export name
  • 方法3:
[root@server ~]# declare  -x   变量名=值
[root@server ~]# declare -x age=18
  • env,printenv,export
    这三个命令都是用来查看当前用户的环境变量
[root@server /]# env         # 查看当前root用户的环境变量[root@server /]# printenv    # 同上[root@server /]# export      # 同上
  • 注意
    以上定义的环境变量都是临时的重启后会失效若要永久生效,则需要写入到配置文件中
  • 对比:

C语言 局部变量 全局变量
shell 自定义变量 环境变量

  • shell 环境变量存储的文件:

    • bash shell 初始化文件有:/etc/profile、 ~/.bash_profile、 ~/.bash_login、 ~/.profile、 ~/.bashrc、/etc/bashrc
      在这里插入图片描述
  • /etc/profile存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE

  • ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,此文件通过脚本执行同目录下用户的.bashrc文件

  • ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取

  • /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取

  • /etc/inputrc:文件为特定的情况处理键盘映射

  • 执行顺序:/etc/profile–>/etc/profile.d/*.sh–> ~/.bash_profile -->/etc/bashrc–>~./.bashrc

  • 结论:

    • 对于用户的环境变量设置常见的是用户家目录下的.bashrc和.bash_profile
    • 对于全局环境变量设置,常见的文件有:/etc/profile /etc/bashrc /etc/profile.d 这三个配置文件,常用方法是直接在==/etc/profile文件中写入全局变量==,如果想要在登陆后初始化或者显示加载的内容,只需要把脚本文件放在 /etc/profile.d 文件下即可

位置变量

  • 概念:当一条命令或脚本执行时,后面可以跟多个参数,可以使用位置变量来表示该参数
[root@server /]# bash  test.sh  hello  world  123  456
#当执行test1.sh 脚本时,第一个参数为hello到第四个参数可以使用特殊的符号表示,如:$1     \$2     \$3   ……
  • 常见的位置变量
# 位置变量是非交互式的
$0 : 脚本名
$1-$9 : 1-9个参数
${10} :10以上的参数需要大花括号括起
$* : 所有参数
$@ : 所有参数
$# : 参数个数
$$ : 当前进程的PID
$! : 上一个后台进程的PID
$? : 上一个命令的返回值状态码,0为成功
  • 示例:
[root@server ~]# vim test1.sh
#!/bin/bashecho "第2个位置参数是:$2"
echo "第1个位置参数是:$1"
echo "第4个位置参数是:$4"
echo "所有参数是:$*"
echo "所有参数是:$@"
echo "参数个数是:$#"
echo "当前脚本的进程pid值:$$"
echo "当前脚本的文件名:$0"        
  • 测试
[root@server ~]# bash test1.sh 1 2 3 4 5
test1.sh:行1: [root@server:未找到命令
第2个位置参数是:2
第1个位置参数是:1
第4个位置参数是:4
所有参数是:1 2 3 4 5
所有参数是:1 2 3 4 5
参数个数是:5
当前脚本的进程pid值:2053
当前脚本的文件名:test1.sh
[root@server ~]# bash test1.sh a b c d e f
test1.sh:行1: [root@server:未找到命令
第2个位置参数是:b
第1个位置参数是:a
第4个位置参数是:d
所有参数是:a b c d e f
所有参数是:a b c d e f
参数个数是:6
当前脚本的进程pid值:2055
当前脚本的文件名:test1.sh
  • $* 与 $@区别

当$* 和 $ @没有被引用的时候,它们确实没有什么区别,都会把位置参数当成一个个体,$*会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则$* 为空,如果有两个位置参数并且IFS为空格时,$*相当于$1 $2

“$@“会把所有位置参数当成一个单独的字段,如果没有位置参数($#为0),则”$@“展开为空(不是空字符串,而是空列表),如果存在一个位置参数,则”$@“相当于”$1”,如果有两个参数,则"$@“相当于”$1" "$2"等等

变量赋值和作用域

赋值:变量名=变量值

[root@server ~]# ip1=192.168.160.137
[root@server ~]# school="xi'an gong ye"
[root@server ~]# today1=`date+%F`
[root@server ~]# today1=`date +%F`
[root@server ~]# today2=$(date +%F)[root@server ~]# echo ip1
ip1
[root@server ~]# echo $ip1
192.168.160.137
[root@server ~]# echo $school
xi'an gong ye
[root@server ~]# echo $today1
2024-11-15
[root@server ~]# echo $today2
2024-11-15
[root@server 

read从键盘读入变量值

  • read是交互式的
  • read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
  • 格式:read -参数 变量名
  • 参数
    • -p “提示语句:” 屏幕打印出一行提示语句。
    • -n数字:当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量,如:-n1 , 只要接受到一个字符就退出。 只要按下一个字符进行回答,read命令立即接受输入并将其传给变量。无需按回车键
    • -t 等待时间 :计时输入,使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态
    • -s : 关闭回显,使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)
  • 常用格式:
[root@server ~]# read wang
18
[root@server ~]# echo $wang
18
[root@server ~]# read -p "请输入数字:" num
请输入数字:54
[root@server ~]# echo $num
54
[root@server ~]# read -t 3 -p "请输入数字:" num1
请输入数字:[root@server ~]#     # 等待3秒未输入则结束输入
[root@server ~]#
[root@server ~]# read -s -p "请输入数字:" num2
请输入数字:[root@server ~]#      # -s输入不显示
[root@server ~]# echo $num2
234
[root@server ~]# read
200    #输入200
[root@server ~]# echo $REPLY   #当输入时没有变量接收,则会存储到环境变量REPLY
200
[root@server ~]# read t1 t2   # 一次输入多个数据
12 34
[root@server ~]# echo $t1 $t2
12 34
[root@server ~]# echo $t1,$t2
12,34

变量和引号

  • 双引号:除了==$ 、单引号、反引号、反斜线==之外,其它被引起的内容保持字面意思
  • 单引号:所有字符保持字面意思
  • 反引号:被引起的字符串转为shell命令
  • 反斜线:转义符(),屏蔽后面字符的特殊含义
[root@server ~]# a=123
[root@server ~]# echo "$a"
123
[root@server ~]# echo '$a'
$a

变量的作用域

  • 全局变量全局变量定义在脚本中,也可以定义在函数中,作用范围:从定义的开始处到shell脚本结束或者被显示的去除

示例:

  • 全局示例
[root@server ~]# vim test2.sh
#!/bin/bashfunc()    #定义函数
{echo "$v1"v1=200                                                                               
}
v1=100
func
echo "$v1"    [root@server ~]# bash test2.sh
100
200
  • 函数内部定义全局变量
[root@server ~]# vim test2.sh
#!/bin/bash
func()   # 定义函数
{v2=200
}
func
echo  "$v2"[root@server ~]# bash  test2.sh 
200
  • 局部变量:范围更小,仅限于某个程序段中,如:函数、shell等,通过local关键字定义,注意:函数的参数也是局部变量

  • 局部示例(使用local声明)

[root@server ~]# vim  test3.sh
#!/bin/bash
func()   # 定义函数
{local v3=200  # 使用local关键字声明为局部变量
}
func
echo  "$v3"[root@server ~]# bash test3.sh
  • 全局变量和局部变量区别
[root@server ~]# vim  test8.sh
#!/bin/bash
func()
{#输出全局变量v1的值echo "global variable v1 is $v1"#定义局部变量v1local v1=2#输出局部变量v1的值echo "local variable v1 is $v1"
}
#定义全局变量v1
v1=1
#调用函数
func
#输出全局变量v1的值
echo "global variable v1 is $v1"[root@server ~]# bash test8.sh
global variable v1 is 1
local variable v1 is 2
global variable v1 is 1[root@server ~]# bash test4.sh
global variable v1 is 1
local variable v1 is 2
global variable v1 is 1

变量的运算

在这里插入图片描述
在这里插入图片描述

  • expr运算符
[root@server ~]# expr 1 + 1  # 运算符左右要有空格
2
[root@server ~]# expr 1+ 1
expr: 语法错误:未预期的参数 “1”
[root@server ~]# expr 1.2 + 1.3   # 必须是整数
expr: 非整数参数
[root@server ~]# a=1
[root@server ~]# b=2
[root@server ~]# expr $a+$b
1+2
[root@server ~]# expr $a + $b
3
  • let运算符
[root@server ~]# let num=1+2
[root@server ~]# echo $num
3
[root@server ~]# let num=1+ 2   # 运算符左右没有空格
-bash: let: num=1+:语法错误: 需要操作数 (错误符号是 "+")
[root@server ~]# echo $((1+2))
3
[root@server ~]# echo $((5%3))
2
[root@server ~]# echo $((3%5))
3
[root@server ~]# echo $((2.5%5))    #不支持小数
-bash: 2.5%5:语法错误: 无效的算术运算符 (错误符号是 ".5%5")
[root@server ~]# echo $[1+2]
3
  • bc计算器
[root@server ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundati                                                               on, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
2.5-1.3
1.2
3*3
9
2/3
0
2/0
Runtime error (func=(main), adr=5): Divide by zero
5>3
1
2>3
0
quit
  • 字符串
# 切片时,echo ${str:1:3},3是切几个,而不是结束点
# echo ${str:0-1:2},顺序还是从左到右,所以切时不管切几个都是d[root@server ~]# str="hello world"
[root@server ~]# echo ${#str}
11
[root@server ~]# str1="china"
[root@server ~]# echo ${#str1}
5
[root@server ~]# str="hello world"
[root@server ~]# echo ${str:0:5}
hello
[root@server ~]# echo ${str:1:3}
ell
[root@server ~]# echo ${str:1}
ello world
[root@server ~]# echo ${str:0-1:2}
d
[root@server ~]# echo ${str:0-1:1}
d

示例:

# 使用%截取字符串,含义:删除右边字符,保留左边字符
[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#总结:不管哪种检索方向,检索过的都删掉,删除的都是*这边的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 材质里面画圆锯齿严重的问题

直接这么画圆会带来锯齿,我们对锯齿位置进行模糊 可以用smoothstep,做值的平滑过渡(虽然不是模糊,但是类似)

鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构

文章目录 一、工程创建1、先创建出最基本的项目工程。2、新建common、features、 products 目录 二、工程结构三、依赖关系1、oh-package.json52、配置ohpm包依赖 四、引用ohpm包中的代码1、定义共享资源2、在common模块index文件中导出3、在phone模块oh-package.json5文件中引…

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址(也就是换一个远程仓库提交) 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的,有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

集合的介绍与比较器的应用

1.集合: 是一种容器,一种变量类型,跟数组很像 数组的缺点: A.数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。 B.使用数组 操作数据的时候,【删除,增加】效率比较低。…

动态规划---解决多段图问题

ok 小伙伴们,我现在有点小小的红温,有点毛躁。 怎么解决多段图问题呢?求取最短路径有多种方法可取。 家人们,毫无思绪可言……………………………… 要实现动态规划,条件:子问题重叠度较高,并…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

cMake编译github中源码

https://github.com/gflags/gflags 记录一下防止遗忘,本次编译为gflags库 1.下载CMake-gui https://cmake.org/ 安装时,选择自动创建环境变量,安装完输入,查看是否安装成功 cmake --version 2.下载源码,解压打开文…

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传,这道题并没有提示不允许上传什么后缀的文件,经过尝试,基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传: 我们再来试试图片马能不…

Gitcode文件历史记录查看和还原

文件历史记录 文件历史记录用于记录代码文件的更改历史,它允许用户查看文件的不同版本,了解每个版本的修改内容、作者和提交消息。这对于跟踪文件演进、恢复错误更改、审查代码以及了解项目进展都非常有用。 文件历史记录功能提供了以下核心功能&#…

前端神经网络入门(二):如何利用 WebGPU 进行数值计算,实现大规模数据的计算加速?- 边读边按下F12跑代码吧

在 Web 应用开发中,JavaScript 是前端开发者们最常用的语言。然而,当面对大规模数据处理和计算任务时,JavaScript 在浏览器中的执行往往会受到诸多性能瓶颈的限制。幸运的是,WebGPU 的出现,为我们提供了在前端实现高性…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

Oracle故障处理:ora-12514 与 ora-28547

目录 项目场景 问题分析 问题总结 项目场景 现场同事求助说:有个刚刚部署在Windows上的Oracle11gR2数据库(单机单实例),使用PLSQL工具连接不上。帮忙查看后,发现未装Oracle client,指导其安装完Oracle客…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…

26-ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动,所以需要创建es用户 useradd elasticsearch passwd elasticsearch 解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz 将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sud…

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件&#…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的,用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式: npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过全…

【数据分享】中国对外投资合作发展报告(2013-2023)

数据介绍 绪 论............................................................................................................................. 1 对外投资合作高质量发展迈出新步伐................................................................... 2 第一篇 发…