【Linux】Shell编程【一】
-
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
-
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
-
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学
-
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
-
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。
-
脚本以 #!/bin/bash 开头(指定解析器),第二行进行脚本的编写。
目录
- shell分类
- 编写规范
- 文件命名规范:
- Bash 常用快捷键
- 输入输出重定向
- 输入重定向
- 输出重定向
- /dev/null 文件
- 多命令顺序执行
- shell脚本的执行
- 第一种:给文件增加执行权限方式执行shell脚本
- 第二种:(了解):通过Bash调用执行脚本方式执行shell脚本
- 入门案例
- 1.编写shell脚本
- 2.脚本执行方式
- shell变量
- 系统预定义变量
- 示例
- 查看系统变量的值(全局):`echo $HOME `
- 查看系统全局变量:`env`
- 显示当前Shell中的所有变量:`set`
- 环境变量
- 设置环境变量
- 环境变量查询和删除
- 系统默认环境变量
- 位置参数变量:
- 预定义变量:
- “$?”
- “$ ” 和 “ ”和“ ”和“!”
- 用户自定义变量
- 基本语法
- 变量定义规则
- 变量定义
- 变量调用
- 变量查看
- 变量删除
- 示例
- 变量的四种引用方式
- shell中特殊符号
- 单引号和双引号
- 反引号
- 只读变量:
- 接受键盘输入:
- 示例
- Shell运算符
- 算数运算符
- 关系运算符
- 示例:判断当前输入的用户是否存在。如果存在则提示“用户存在”否则提示“用户不存在”。
- 逻辑运算符
- 字符串运算符
- 文件测试运算符(重点)
shell分类
cat /etc/shells
-
在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 / b a s h / b a s h ( 重 点 ),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
-
查看Shell默认的解析器是bash
echo $SHELL
编写规范
#!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]
Shell相关指令
文件命名规范:
文件名.sh .sh是linux下bash shell 的默认后缀
Bash 常用快捷键
输入输出重定向
输入重定向
是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
输出重定向
(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏),在linux中,默认的标准输出设备是控制台(或称为显示器),用户输出的信息默认情况下都会显示到控制台
- &表示全部文件,文件不管对错,
- 1表示标准输出文件,
- 2表示标准错误输出。
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null 中
[root@localhost ~]$ command > dev/null
多命令顺序执行
shell脚本的执行
[root@localhost ~]$ vim test.sh
#!/bin/bash
echo “hello world”
第一种:给文件增加执行权限方式执行shell脚本
[root@localhost ~]$ chmod u+x test.sh
[root@localhost ~]$ ./test.sh #绝对路径或相对路径执行
第二种:(了解):通过Bash调用执行脚本方式执行shell脚本
[root@localhost ~]$ bash test.sh
入门案例
1.编写shell脚本
-
创建目录用于存放shell脚本文件
mkdir scripts cd scripts/
-
使用vim命令创建xxx.sh文件
vim hello.sh
-
编写xxx.sh文件内容(第一行#!/bin/bash,第二行开始编写脚本代码)
#!/bin/bash echo "hello,world"
2.脚本执行方式
-
bash执行方式
bash hello.sh
-
sh执行方式
sh hello.sh
-
添加权限执行
chmod +x hello.sh
# xxx.sh文件添加可执行权限 chmod +x xxx.sh # xxx.sh文件当前用户添加可执行权限 chmod a+x xxx.sh # 最高权限 chmod 777 xxx.sh
-
当前路径(相对路径)执行 ./:
./hello.sh
-
绝对路径执行:
/root/scripts/hello.sh
-
source执行脚本:
source hello.sh
、source /root/scripts/hello.sh
-
. 执行脚本:
. hello.sh
shell变量
在一个脚本周期内,其值可以发生改变的量就是变量。分类如下
- 用户自定义变量: 这种变量是最常见的变量,由用户自由定义变量名和变量的值。
- 环境变量: 这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。不是太好理解吧,那么大家还记得在Windows中,同一台电脑可以有多个用户登录,而且每个用户都可以定义自己的桌面样式和分辨率,这些其实就是Windows的操作环境,可以当做是Windows的环境变量来理解。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。
- 位置参数变量: 这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
- 预定义变量: 是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
系统预定义变量
- 常用系统变量
$ HOME、$ PWD、$ SHELL、$ USER等 - 环境变量
- export:查看环境变量
- echo $PATH:输出环境变量的值
- help echo:查看echo命令的帮助信息
示例
查看系统变量的值(全局):echo $HOME
查看系统全局变量:env
显示当前Shell中的所有变量:set
环境变量
设置环境变量
[root@localhost ~]$ export age="18"
#使用export声明的变量即是环境变量
环境变量查询和删除
env命令和set命令的区别:set命令可以查看所有变量,而env命令只能查看环境变量。
[root@localhost ~]$ unset gender #删除环境变量gender
[root@localhost ~]$ env | grep gender
系统默认环境变量
[root@localhost ~]$ env
HOSTNAME=localhost.localdomain #主机名
SHELL=/bin/bash #当前的shell
TERM=linux #终端环境
HISTSIZE=1000 #历史命令条数
SSH_CLIENT=192.168.4.1594824 22 #当前操作环境是用ssh连接的,这里记录客户端ip
SSH_TTY=/dev/pts/1 #ssh连接的终端时pts/1
USER=root #当前登录的用户
..........更多参数可以使用set和env命令查看.............
位置参数变量:
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0表示当前 Shell 脚本程序的名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10} |
$* | 这个变量代表命令行中所有的参数,$把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数…
[root@localhost sh]$ vim test.sh
#!/bin/sh
echo "shell脚本本身的名字: $0"
echo "传给shell的第一个参数: $1"
echo "传给shell的第二个参数: $2"
∗ 会 把 接 收 的 所 有 参 数 当 成 一 个 整 体 对 待 , 而 *会把接收的所有参数当成一个整体对待,而 ∗会把接收的所有参数当成一个整体对待,而@则会区分对待接收到的所有参数。举个例子:
[root@localhost sh]$ vi parameter2.sh
#!/bin/bash
for i in"$*"
#定义for循环,in后面有几个值,for会循环多少次,注意“$*”要用双引号括起来
#每次循环会把in后面的值赋予变量i
#Shell把$*中的所有参数看成是一个整体,所以这个for循环只会循环一次doecho "The parameters is: $i"#打印变量$i的值done
x=1
#定义变量x的值为1
for y in"$@"
#同样in后面的有几个值,for循环几次,每次都把值赋予变量y
#可是Shel1中把“$@”中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次doecho "The parameter$x is: $y"#输出变量y的值x=$(( $x +1 ))#然变量x每次循环都加1,为了输出时看的更清楚done
预定义变量:
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非О(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
“$?”
[root@localhost sh]$ ls
count.sh hello.sh parameter2.sh parameter.sh
#ls命令正确执行
[root@localhost sh]$ echo $?
#预定义变量“$?”的值是0,证明上一个命令执行正确
[root@localhost sh]$ ls install.log
ls:无法访问install.log:没有那个文件或目录
#当前目录中没有install.log文件,所以ls命令报错了
[root@localhost sh]$ echo $?
2
#变量“$?”返回一个非О的值,证明上一个命令没有正确执行
#至于错误的返回值到底是多少,是在编写ls命令时定义好的,如果碰到文件不存在就返回数值2
“$ ” 和 “ ”和“ ”和“!”
[root@localhost sh]$ vi variable.sh
#!/bin/bash
echo “The current process is $$”
#输出当前进程的PID.
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行,工作管理我们在系统管理章节会详细介绍
echo “The last one Daemon process is $!”
#输出这个后台执行命令的进程的PID,也就是输出find命令的PID号
用户自定义变量
基本语法
- 定义变量(变量赋值):变量名=变量值,注意,=前后不能有空格
- 销毁变量:unset 变量
- 声明静态变量:readonly 变量,注意:不能销毁unset
变量定义规则
-
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
-
不能使用标点符号,不能使用bash里的关键字(可用help命令查看保留关键字)。
-
环境变量建议大写,便于区分
-
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含" 变 量 名 " 或 用 变量名"或用 变量名"或用{变量名}包含变量名。
-
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
-
局部变量变成全局变量使用export
-
子shell更改不会影响父shell
-
typeset和declare两个内部命令定义变量
-
等号左右两侧不能有空格。变量的值如果有空格,需要使用双引号或单引号括起来,如:“test=“hello world!””。其中双引号括起来的内容“$”,“(”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符:
- echo “hello ${x}”:双引号可以正常输出变量值
- echo ‘hello ${x}’:单引号输出字符串
变量定义
[root@localhost ~]$ 2name="zhang san"
-bash: 2name=zhang san: command not found
#变量名不能用数字开头
[root@localhost ~]$ name = "zhangsan"
-bash: name: command not found
#等号左右两侧不能有空格
[root@localhost ~]$ name=zhang san
-bash: san: command not found
#变量的值如果有空格,必须用引号包含
变量调用
[root@localhost ~]$ name="zhang san"
#定义变量name
[root@localhost ~]$ echo $name #调用变量使用 $变量名
zhang san
#输出变量name的值
变量查看
[root@localhost ~]$ set [选项]
选项:
-u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)
-x:如果设定此选项,在命令执行之前,会把命令先输出一次
+<参数> :取消某个set曾启动的参数。[root@localhost ~]$ set
BASH=/bin/bash
…省略部分输出…
name='shen chao'
#直接使用set 命令,会查询系统中所有的变量,包含用户自定义变量和环境变量
[root@localhost ~]$ set -u
[root@localhost ~]$ echo $file
-bash: file: unbound variable
#当设置了-u选项后,如果调用没有设定的变量会有报错。默认是没有任何输出的。
[root@localhost ~]$ set -x
[root@localhost ~]$ ls
+ls --color=auto
anaconda-ks.cfginstall.loginstall.log.syslog sh tdir testtestfile
#如果设定了-x选项,会在每个命令执行之前,先把命令输出一次[root@localhost ~]$ set +x
#取消启动的x参数
变量删除
[root@localhost ~]$ unset 变量名
示例
test=123
test="$test"456
echo $test
#输出:123456
#叠加变量test,变量值变成了123456
test=${test}789
echo $test
#输出:123456789
#再叠加变量test,变量值编程了123456789
变量的四种引用方式
- $变量名
- ${变量名}
- “$变量名”
- “${变量名}”
shell中特殊符号
单引号和双引号
name=zjl
#定义变量name 的值是zjl
echo '$name'
#输出:$name
#如果输出时使用单引号,则$name原封不动的输出
echo "$name"
#输出:zjl
#如果输出时使用双引号,则会输出变量name的值 scecho `date`
#输出:2024年 03月 11日 星期一 11:30:43 CST
#反引号括起来的命令会正常执行
[root@localhost ~]$ echo '`date`'
`date`
#但是如果反引号命令被单引号括起来,那么这个命令不会执行,―date`会被当成普通字符输出
[root@localhost ~]$ echo "`date`"
输出:2024年 03月 11日 星期一 11:31:38 CST
#如果是双引号括起来,那么这个命令又会正常执行
反引号
echo ls
#输出:ls
#如果命令不用反引号包含,命令不会执行,而是直接输出
echo `ls`
#会报错 未找到命令
#只有用反引号包括命令,这个命令才会执行
echo $(date)
#输出:2024年 03月 11日 星期一 11:44:36 CST
#使用$(命令)的方式也是可以的
只读变量:
[root@localhost sh]$ vi readonly.sh
#!/bin/bash
a=10
#语法:readonly 变量名
readonly a
a=20 #会报错readonly variable
echo $a
接受键盘输入:
[root@localhost ~]$ read [选项][变量名]
选项:-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。-p: “提示信息”:在等待read输入时,输出提示信息-t: 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间-n: 数字:read命令只接受指定的字符数,就会执行-s: 隐藏输入的数据,适用于机密信息的输入-d: 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。-e: 在输入的时候可以使用命令补全功能。
变量名:
变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY.
如果只提供了一个变量名,则整个输入行赋予该变量.
如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字
示例
[root@localhost sh]$ vi read.sh
#!/bin/bash
read -t 30 -p "Please input your name: " name
#提示“请输入姓名”并等待30 秒,把用户的输入保存入变量name 中
echo "Name is $name"
#看看变量“$name”中是否保存了你的输入read -s -t 30 -p "Please enter your age: " age
#提示“请输入年龄”并等待30秒,把用户的输入保存入变量age中
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e "\n"
#调整输出格式,如果不输出换行,一会的年龄输出不会换行
echo "Age is $age"read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
#提示“请选择性别”并等待30秒,把用户的输入保存入变量gender
#使用“-n1”选项只接收一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"
Shell运算符
在shell中,运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等
算数运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
[root@localhost ~]$ vi computer.sh
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
#注意
#表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
#完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
假定变量 a 为 10,变量 b 为 20
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a * $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true(真)。 | [ $a == $b ] 返回 false(假)。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格,必须写成 [ $a == $b ]。
[root@localhost ~]$ vi computers.sh
#!/bin/bash
a=10
b=20
echo ' '
echo 'a+b= ' `expr $a + $b`
echo 'a-b= ' `expr $a - $b`
echo 'a*b= ' `expr $a \* $b`
echo 'a/b= ' `expr $a / $b`
echo 'a%b= ' `expr $a % $b`#判断是否相等
if [ $a == $b ]
thenecho 'a等于b'
elseecho 'a不等于b'
fi
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符 | 单词 | 说明 | 举例 |
---|---|---|---|
-eq | equal | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | not equal | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | great than | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | less than | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | great than or equal | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | less than or equal | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
[root@localhost ~]$ [ 10 -gt 10 ]
[root@localhost ~]$ echo $? 1
[root@localhost ~]$ [ 10 -eq 10 ]
[root@localhost ~]$ echo $? 0
示例:判断当前输入的用户是否存在。如果存在则提示“用户存在”否则提示“用户不存在”。
如果要在shell脚本使用linux命令,可以使用$()包裹命令。例如:
disk_size=$(df -h | awk ‘NR==2 {print $5}’)
[root@localhost ~]$ vim demo.sh
#!/bin/bash
#接受用户的输入
read -p '请输入需要查询的用户名:' username#获取指定用户名在passwd文件中出现的次数
count=$(cat /etc/passwd | grep $username | wc -l)
#count=`cat /etc/passwd | grep $username | wc -l`#判断出现的次数,如果次数=0则用户不存在,反之存在
if [ $count == 0 ]
then echo '用户不存在'else echo '用户存在'
fi
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或(或者)运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与(并且)运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
- 或运算:一个为真即为真,全部为假才是假
- 与运算:一个为假即为假,全部为真才是真
字符串运算符
假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
文件测试运算符(重点)
文件测试运算符用于检测 Unix/Linux 文件的各种属性。
操作符 | 说明 | 举例 |
---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
注意:权限几个判断,如果只有一个部分符合,则认为是有权限的。
相关文章:

【Linux】Shell编程【一】
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…...

Windows10+tensorrt+python部署yolov5
一、安装cuda 打开NVIDIA控制面板 —>帮助—>系统信息—>组件,找到驱动版本新,我这边是11.2, 然后去CUDA Toolkit Archive | NVIDIA Developer下载对应版本的CUDA,根据查看的CUDA型号确定对应的cuda Toolhit版本&#…...

【前端框架的发展史详细介绍】
前端框架的发展史 前端框架的发展史可以追溯到1995年,当时微软推出了IE浏览器并开始支持CSS,随后,在1997年,W3C(万维网联盟)发布了CSS的第一个正式标准。 在2003年,苹果推出了Safari浏览器&am…...

[JAVAEE]—进程和多线程的认识
文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…...

sqllab第十九关通关笔记
知识点: 错误注入 最大长度为32位;如果目标长度>32时,需要利用截取函数进行分段读取referer注入 insert语句update语句 通过admin admin进行登录发现页面打印除了referer字段的信息 这应该是一个referer注入 首先进行测试一下 构造payl…...

张量维度改变总结
文章目录 一、view() 或 reshape()二、unsqueeze()三、squeeze()四、transpose()五、torch.expand_dims 一、view() 或 reshape() view() 或 reshape(): 这两个函数可以用于改变张量的形状,但保持元素总数不变。它们可以接受一个新的形状作为参数,并返回…...

C++ ezOptionParse的用法
在网上找了一下,发现并没有很多关于这个小型头文件的资料 只好自己上了 int main(int argc, const char * argv[]) {ezOptionParser opt;opt.overview "Demo of parsers features."; //概要说明,一般需要填写,简要介绍程序的作用opt.synta…...

MATLAB:一些杂例
a 2; b 5; x 0:pi/40:pi/2; %增量为pi/40 y b*exp(-a*x).*sin(b*x).*(0.012*x.^4-0.15*x.^30.075*x.^22.5*x); %点乘的意义 z y.^2; %点乘的意义 w(:,1) x; %组成w,第一列为x w(:,2) y; %组成w,第二列为y w(:,3) z; %组成w,第三列为z…...

使用OpenCV实现两张图像融合在一起
简单介绍 图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据,以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法&a…...

PyTorch学习笔记之基础函数篇(十)
文章目录 6 张量操作6.1 torch.reshape()函数6.1 torch.transpose()函数6.1 torch.permute()函数6.1 torch.unsqueez()函数6.1 torch.squeeze()函数6.1 torch.cat()函数6.1 torch.stack()函数 6 张量操作 6.1 torch.reshape()函数 torch.reshape() 是 PyTorch 中的一个函数&a…...

kubernetes部署集群
kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…...

软件工程师,该偿还一下技术债了
概述 在软件开发领域,有一个特殊的概念——“技术债”,它源于Ward Cunningham的一个比喻,主要用来描述那些为了短期利益而选择的快捷方式、临时解决方案或者未完成的工作,它们会在未来产生额外的技术成本。就像金融债务一样&#…...

HTML5、CSS3面试题(三)
HTML5、CSS3面试题(二) rem 适配方法如何计算 HTML 跟字号及适配方案?(必会) 通用方案 1、设置根 font-size:625%(或其它自定的值,但换算规则 1rem 不能小于 12px) 2…...

pytorch之诗词生成6--eval
先上代码: import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…...

Django自定义中间件
自定义中间件 传统方法的的五大钩子函数:(需要调用MiddlewareMixin类) process_request,请求刚到来,执行视图之前;正序 process_view,路由转发到视图,执行视图之前;正序…...

【JavaScript】JavaScript 运算符 ① ( 运算符分类 | 算术运算符 | 浮点数 的 算术运算 精度问题 )
文章目录 一、JavaScript 运算符1、运算符分类2、算术运算符3、浮点数 的 算术运算 精度问题 一、JavaScript 运算符 1、运算符分类 在 JavaScript 中 , 运算符 又称为 " 操作符 " , 可以实现 赋值 , 比较 > < , 算术运算 -*/ 等功能 , 运算符功能主要分为以下…...

掘根宝典之C++迭代器简介
简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式,使程序员可以对容器中的元素进行逐个访问和操作,而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器 迭代器的作用类似于指针,可以指向容器中的某个…...

DP-力扣 120.三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点: 下标与上一层结点下标相同或者等于上一层结点下标 1 的两个结点。样例: 例如,给定三角形: [ [2], [3,4], [6,5,7], [4…...

【WEEK3】学习目标及总结【SpringMVC】【中文版】
学习目标: 三周完成SpringMVC入门——第三周 感觉这周很难完成任务了,大概率还会有第四周 学习内容: 参考视频教程【狂神说Java】SpringMVC最新教程IDEA版通俗易懂数据处理JSON交互处理 学习时间及产出: 第三周 MON~FRI 2024.…...

peft模型微调--Prompt Tuning
模型微调(Model Fine-Tuning)是指在预训练模型的基础上,针对特定任务进行进一步的训练以优化模型性能的过程。预训练模型通常是在大规模数据集上通过无监督或自监督学习方法预先训练好的,具有捕捉语言或数据特征的强大能力。 PEF…...

【算法训练营】周测1
清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 如果需要答案代码可以私聊博主 有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~ 考题11-1 题目描述 有一个初始时为空的序列,你的任务是维护这个…...

PyTorch Dataset、DataLoader长度
pytorch 可以直接对 Dataset 对象用 len() 求数据集大小,而 DataLoader 对象也可以用 len(),不过求得的是用这个 loader 在一个 epoch 能有几多 iteration,容易混淆。本文记录几种情况的对比。 from torch.utils.data import Dataset, DataL…...

动态IP和静态IP
与静态 IP 地址不同,动态 IP 地址会定期更改。让我们来分析一下: 1. IP 地址基础知识: * IP 地址是一个数字标签,用于唯一标识网络上的每个设备。 * 当设备通过网络通信时,数据会在它们之间来回传输。每个数据包都标有…...

中电金信:技术实践|Flink维度表关联方案解析
导语:Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架,主要用来处理流式数据。它既可以处理有界的批量数据集,也可以处理无界的实时流数据,为批处理和流处理提供了统一编程模型。 维度表可以看作是用户来分析数…...

HQL 55 题【持续更新】
前言 今天开始为期一个多月的 HQL 练习,共 55 道 HQL 题,大概每天两道,从初级函数到中级函数。这次的练习不再是基础的 join 那种通用 SQL 语法了,而是引入了更多 Hive 的函数(单行函数、窗口函数等)。 我…...

lqb省赛日志[8/37]-[搜索·DFS·BFS]
一只小蒟蒻备考蓝桥杯的日志 文章目录 笔记DFS记忆化搜索 刷题心得小结 笔记 DFS 参考 深度优先搜索(DFS) 总结(算法剪枝优化总结) DFS的模板框架: function dfs(当前状态){if(当前状态 目的状态){}for(寻找新状态){if(状态合法){vis[访问该点];dfs(新状态);?…...

uni app 钓鱼小游戏
最近姑娘喜欢玩那个餐厅游戏里的钓鱼 ,经常让看广告,然后就点点点... 自己写个吧。小鱼的图片自己搞。 有问题自己改,不要私信我 <template><view class"page_main"><view class"top_linear"><v…...

openssl3.2 - note - Decoders and Encoders with OpenSSL
文章目录 openssl3.2 - note - Decoders and Encoders with OpenSSL概述笔记编码器/解码器的调用链OSSL_STORE 编码器/解码器的名称和属性OSSL_FUNC_decoder_freectx_fnOSSL_FUNC_encoder_encode_fn官方文档END openssl3.2 - note - Decoders and Encoders with OpenSSL 概述 …...

分享几个 Selenium 自动化常用操作
最近工作会用到selenium来自动化操作一些重复的工作,那么在用selenium写代码的过程中,又顺手整理了一些常用的操作,分享给大家。 常用元素定位方法 虽然有关selenium定位元素的方法有很多种,但是对于没有深入学习,尤…...

【Python】【数据类型】List (列表) 的常见操作
1. 创建 使用内置函数list()将字符串创建为列表 list1 [a, b, c, d] print(list1 , list1) # list1 [a, b, c, d] list1 list(abcd) print(list1) # [a, b, c, d]使用列表推导式创建列表 list1 [x for x in range(1, 10)] print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]多…...