app开发企业网站建设/建站是什么意思
本文旨在对y总的Linux基础课shell语法做学习记录,指令较多,方便日后查找。
参考视频:Linux基础课
参考教程:Linux教程
1 概论
Linux中常见的shell脚本有很多种,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- zsh
- …
Linux系统中一般默认使用bash,文件开头需要写#! /bin/bash
,指明bash为脚本解释器
示例:
mkdir -p Test
vim test.sh
i:进入编辑模式
#! /bin/bash
echo "hello"
Esc:退出编辑模式
:wq 保存并退出
运行方式
- 作为可执行文件
chmod +x test.sh: 使脚本具有可执行权限
./test.sh: 当前路径下执行
/home/XXX/test.sh: 绝对路径下执行
~/test.sh: 家目录路径下执行
- 用解释器执行
bash test.sh
2 注释
单行注释:
每行中#
之后的内容均是注释
#! /bin/bash
echo 'Hello World' # 这是注释
多行注释
格式:
:<<EOF
第一行注释
第二行注释
第三行注释
EOF
EOF
可以换成其它任意字符串(abc,!)
3 变量
定义变量
a='big' # 单引号定义字符串
b="big" # 双引号定义字符串
c=big # 也可以不加引号,同样表示字符串
使用变量
$
,或者${}
,花括号是可选的,主要为了帮助解释器识别变量边界
name=bigdavid
echo $name
echo ${name}
echo ${name}big # 输出bigdavidbig
只读变量
使用readonly
或者declare
可以将变量变为只读
name=bigdavid
readonly name
declare -r namename=abc ##报错,因为变量只读
删除变量
unset
可以删除变量
name=bigdavid
unset name
echo $name # 输出空行
变量类型
- 自定义变量(局部变量)
子进程不能访问的变量 - 环境变量(全局变量)
子进程可以访问的变量
自定义变量->环境变量:
name=bigdavid
export name # 方法一
declare -x name # 方法二
环境变量->自定义变量:
export name=bigdavid # 定义环境变量
declare +x name # 改为自定义变量
字符串
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号与双引号的区别:
- 单引号中的内容会原样输出,不会执行、不会取变量;
- 双引号中的内容可以执行、可以取变量;
name=bigdavid
echo 'sd,$name' # 输出 sd,$name
echo "sd,$name" # 输出 sd,bigdavid
- 获取字符串长度
name=bigdavid
echo ${#name} # 输出8
- 提取子串
name=bigdavid
echo ${name:0:3} # 提取从0开始的3个字符 输出big
Tip:
(1)定义变量时,等号两边不能有空格
(2)定义变量的时候变量都是字符串,但当变量需要是整数时,会自动把变量转换成整数
(3)被声明为只读的变量无法被unset删除
(4)字符串中,不加引号和双引号效果相同
(5)如果一个变量不存在的话,他的值是空字符串
(6)默认变量是局部变量(自定义变量)
(7)左闭右开取子串
4 默认变量
文件参数变量
在执行shell脚本时,可以向脚本传递参数。
$1
是第一个参数,$2
是第二个参数,以此类推。特殊的,$0
是文件名(包含路径)
示例:
创建文件vim test.sh
#! /bin/bash
echo "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4
执行脚本
chmod +x test.sh
./test.sh 1 2 3 4
输出:
文件名:./test.sh
第一个参数:1
第二个参数:2
第三个参数:3
第四个参数:4
Tip:向脚本传递参数时,参数个数超过一位需要用大括号括起来 echo ${10}
其它参数相关变量
$#
:代表文件传入的参数个数
$*
:由所有参数构成的用空格隔开的字符串 "$1 $2 $3 $4"
$@
:每个参数分别用双引号括起来的字符串,如上例中值为"$1" "$2" "$3" "$4"
$$
:脚本当前运行的进程ID
$?
:上一条命令的退出状态,0表示正常退出,其他值表示错误。(不是stdout,而是exit code)
$(command)
:返回command这条命令的stdout(可嵌套)
(可嵌套) 和 (不可嵌套) 区别是:可嵌套就是可以实现多个命令
#! /bin/bash
name=big
echo $(echo $name
name=sd
echo $name)
输出:
bigdavid
asd
5 数组
数组中可以存放多个不同类型的值,只支持一维数组,初始化时不需要指明数组大小。
数组下标从0开始。
定义
数组用小括号表示,元素之间用空格隔开
array=(1 abc "def")
array[0]=1
array[1]=abc
array[2]="def"
读取数组中某个元素的值
echo ${array[index]}
读取整个数组
${array[@]}
${array[*]}
数组长度
${#array[@]}
${#array[*]}
Tip:
在读取整个数组时,未定义的部分就不会显示。比如定义了array[0]array[1]array[2]array[1000],利用echo ${array[@]}输出时,只会显示我们定义的数组那4个元素的值。长度时,结果是4,而不是1000
6 expr命令
expr 表达式
命令用于求表达式的值
- 用空格隔开每一项
- 用反斜杠放在shell特定的字符前面(发现表达式运行错误时,可以试试转义)
- 对包含空格和其他特殊字符的字符串要用引号括起来
- expr会在stdout中输出结果。如果为逻辑关系表达式,则结果为真时,stdout输出1,否则输出0
- expr的exit code:如果为逻辑关系表达式,则结果为真时,exit code为0,否则为1
字符串表达式
(1)length XXX
:返回XXX的长度
(2)index XXX YYY
:YYY中任意单个字符在XXX中最前面的字符位置,下标从1开始。如果XXX中完全不存在YYY中的字符,则返回0。
(3)substr XXX A B
:返回XXX字符串中从A开始,长度最大为B的子串。如果A或B为负数,0或非数值,则返回空字符串
示例:
str=Helloecho `expr length $str` #输出5
echo `expr index $str l`#输出3
echo `expr substr $str 2 3`#输出ell
整数表达式
expr支持普通的算术操作
优先级:字符串表达式 > 算术表达式 > 逻辑关系表达式
+ -
:加减运算。两端参数会转换为整数,如果转换失败则报错。* / %
:乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。
()
:可以改变优先级,但需要用反斜杠转义
a=3
b=4echo `expr $a + $b` # 输出7
echo `expr $a - $b` # 输出-1
echo `expr $a \* $b` # 输出12,*需要转义
echo `expr $a / $b` # 输出0,整除
echo `expr $a % $b` # 输出3
echo `expr \( $a + 1 \) \* \( $b + 1 \)` # 输出20,值为(a + 1) * (b + 1)
逻辑关系表达式
|
如果第一个参数非空且非0,则返回第一个参数的值,否则返回第二个参数的值,但要求第二个参数的值也是非空或非0,否则返回0。如果第一个参数是非空或非0时,不会计算第二个参数。&
:如果两个参数都非空且非0,则返回第一个参数,否则返回0。如果第一个参为0或为空,则不会计算第二个参数。< <= = == != >= >
:比较两端的参数,如果为true,则返回1,否则返回0。”==”是”=”的同义词。”expr”首先尝试将两端参数转换为整数,并做算术比较,如果转换失败,则按字符集排序规则做字符比较。()
:改变优先级,但需要用反斜杠转义
Tip:
(1):乘法运算的 * 的使用除转义外,还有直接加单引号这种方式也可以
echo `expr $a '*' $b`
(2):单引号表示原生字符串,单引号里面的是啥就是啥,双引号会把字符串格式化
str='Hello World!'
echo expr length '$str' # 输出为4,原始字符串$str
echo expr length "$str" # 输出为12,变量值为Hello World!
7 read命令
read
命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code
为1,否则为0。
参数:
-p
: 后面可以接提示信息-t
:后面跟秒数,定义输入字符的等待时间,超过等待时间后会自动忽略此命令
read name# 读入name的值
bigdavid #标准输入
echo $name # 输出name的值
bigdavid #标准输出
read -p "Please input your name: " -t 3 name # 读入name的值,等待时间3秒
Please input your name: bigdavid # 标准输入
echo $name # 输出name的值
bigdavid #标准输出
Tip:
-t
和 -p
的顺序不影响实际效果
8 echo命令
echo
用于输出字符串。
显示普通字符串
echo "sad"
echo asd
显示转义字符
echo "\"df\""
echo \"sd\"
显示变量
name=bigdavid
echo "sd is $name"
显示换行
echo -e "hi\n" # -e 开启转义
显示不换行
echo -e "Hi \c" # -e 开启转义 \c 不换行
显示结果定向至文件
将内容以覆盖的方式输出到output.txt中
echo "Hello World" > output.txt
原样输出字符串,不进行转义或取变量(用单引号)
name=bigdavid
echo '$name\"'
显示命令的执行结果
echo `date`
echo $(date)
Tip:
(1)查看echo相关转移字符,在终端输入help echo
(2)输出内容定向文件时,哪里的文件都可以定向,如果不是同一文件下,那要把路径写清楚,如果定向的文件不存在,会默认给你新建一个文件
9 printf命令
printf
命令用于格式化输出,类似于C/C++中的printf函数。
默认不会在字符串末尾添加换行符
格式 :printf format-string [arguments...]
示例:
printf "%10d.\n" 123 # 占十位,右对齐
printf "%-10.2f.\n" 123.1234 # 占10位,保留2位小数,左对齐
printf "%s" "bigdavid" # 格式化输出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 /* 3`
10 test命令与判断符号[]
逻辑运算符&&和||
&&
表示与,||
表示或- 短路原则:
(1)expr1 && expr2
:当expr1
为假时,直接忽略expr2
(2)expr1 || expr2
:当expr1
为真时,直接忽略expr2
- 表达式的
exit code
为0,表示真;为非零,表示假。(与C/C++中的定义相反)
test命令
终端输入:help test
或man test
,查看test命令的用法。
(1)test命令用于判断文件类型,以及对变量做比较。
(2)test命令用exit code返回结果,而不是使用stdout。0表示真,非0表示假。
文件类型判断
判断文件是否存在
格式:test -e filename
测试参数 | 代表意义 |
---|---|
-e | 文件是否存在 |
-f | 是否为文件 |
-d | 是否为目录 |
文件权限判断
判断文件是否可读
格式:test -r filename
测试参数 | 代表意义 |
---|---|
-r | 文件是否可读 |
-w | 文件是否可写 |
-x | 文件是否可执行 |
-s | 是否为非空文件 |
整数间的比较
a是否等于b
格式:test $a -eq $b
测试参数 | 代表意义 |
---|---|
-eq | a是否等于b |
-ne | a是否不等于b |
-gt | a是否大于b |
-lt | a是否小于b |
-ge | a是否大于等于b |
-le | a是否小于等于b |
字符串比较
测试参数 | 代表意义 |
---|---|
test -z STRING | 判断STRING是否为空,如果为空,则返回true |
test -n STRING | 判断STRING是否非空,如果非空,则返回true(-n可以省略) |
test str1 == str2 | 判断str1是否等于str2 |
test str1 != str2 | 判断str1是否不等于str2 |
多重条件判定
格式:test -r filename -a -x filename
测试参数 | 代表意义 |
---|---|
-a | 两条件是否同时成立 |
-o | 两条件是否至少一个成立 |
! | 取反。如 test ! -x file,当file不可执行时,返回true |
判断符号[]
[]与test用法几乎一模一样,更常用于if语句中。另外[[]]是[]的加强版,支持的特性更多
当使用
[]
出现[: -eq: unary operator expected
的错误时,可以使用[[]]
。
[ 2 -lt 3 ] # 为真,返回值为0
echo $? # 输出上个命令的返回值,输出0
Tip:
[]
内的每一项都要用空格隔开- 中括号内的变量,最好用双引号括起来
- 中括号内的常数,最好用单或双引号括起来
-eq :equal(相等)
-ne :not equal(不等)
-gt :greater than(大于)
-ge :greater than or equal(大于或等于)
-lt :less than(小于)
-le :less than or equal(小于或等于)
11 判断语句
if…then形式(类似于C/C++中的if-else语句)
单层if
if condition
then语句1语句2...
fi
单层if-else
if condition
then语句1语句2...
else语句1语句2...
fi
多层if-elif-elif-else
if condition
then语句1语句2...
elif condition
then语句1语句2...
else语句1语句2...
fi
case…esac形式
类似与C/C++的switch语句
示例:
a=4case $a in1)echo ${a};; # 类似于C/C++中的break2)echo ${a};;3)echo ${a};;*) # 类似于C/C++中的defaultecho 其他;;
esac
12 循环语句
for...in...do...done
格式:
for var in val1 val2 val3
do语句1语句2...
done
实例:
(1)输出a 2 cc,每个元素一行
for i in a 2 cc
doecho $i
done
(2)输出当前路径下的所有文件名,每个文件名一行
for file in `ls`
doecho $file
done
(3)输出1-10
for i in $(seq 1 10)
doecho $i
done
(4)使用{1..10}
或者 {a..z}
for i in {a..z}
doecho $i
done
for ((…;…;…)) do…done
格式:
for ((expression; condition; expression))
do语句1语句2
done
for ((i=1; i<=10; i++))
doecho $i
done
while…do…done循环
格式:
while condition
do语句1语句2...
done
文件结束符为Ctrl+d
,输入文件结束符后read指令返回false
while read name
doecho $name
done
until…do…done循环
当条件为真时结束
格式:
until condition
do语句1语句2...
done
当用户输入yes
或者YES
时结束,否则一直等待读入。
until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
do
read -p "Please input yes/YES to stop this program: " word
done
break命令
跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句。
实例:
while read name
do for ((i=1; i<=10; i++))docase $i in8)break;;*)echo $i;;esacdonedone
该示例每读入非EOF的字符串,会输出一遍1-7。
该程序可以输入Ctrl+d
文件结束符来结束,也可以直接用Ctrl+c
杀掉该进程
continue命令
跳出当前循环
实例:
for ((i=1; i<=10; i++))
doif [ `expr $i % 2` -eq 0]thencontinuefiecho $i
done
该程序输出1-10中的所有奇数
死循环的处理方式
遇到死循环,输入Ctrl+c
关闭进程:
- 使用
top
命令找到进程的PID - 输入
kill -9 PID
即可关掉此进程 ps aux
返回当前打开的所有进程
13 函数
bash中的函数类似于C/C++中的函数,但return的返回值与C/C++不同,返回的是exit code
,取值为0-255,0表示正常结束,注意区别。
函数的return值可以通过echo $?
来获取
如果想获取函数的输出结果,可以通过
echo
输出到stdout
中,然后通过$(function_name)
来获取stdout
中的结果。
格式:
[function] func_name() {语句1语句2...
}
不获取 return
值和stdout
值
func() {name=bigdavidecho "$name"
}func
获取 return
值和stdout
值
不写return
时,默认return 0
func() {name=bigdavidecho "$name"return 123
}output=$(func)
ret=$?echo "output = $output"
echo "return = $ret"
函数的输入参数
在函数内,$1
表示第一个输入参数,$2
表示第二个输入参数,依此类推。
注意:函数内的
$0
仍然是文件名,而不是函数名
func() { # 递归计算 $1 + ($1 - 1) + ($1 - 2) + ... + 0word=""while [ "${word}" != 'y' && "${word}" != 'n' ]doread -p "要进入func($1)函数嘛?请输入y/n: " worddoneif [ "$word" == 'n' ]thenecho 0return 0fiif [ $1 -le 0 ]thenecho 0return 0fisum = $(func $(expr $1 - 1))echo $(expr $sum + $1)
}echo $(func 10)
函数内的局部变量
可以在函数内定义局部变量,作用范围仅在当前函数内。
可以在递归函数中定义局部变量。
格式:local 变量名=变量值
#! /bin/bashfunc() {local name=bigdavidecho $name
}
funcecho $name
输出结果
bigdavid
第一行为函数内的name变量,第二行为函数外调用name变量,会发现此时该变量不存在
shell语法中函数的变量若无声明 就默认是全局变量
14 exit命令
exit
命令用来退出当前shell
进程,并返回一个退出状态;使用$?
可以接收这个退出状态。
exit
命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。
exit
退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
创建脚本test.sh:vim test.sh
#! /bin/bashif [ $# -ne 1 ]
thenecho "not valid"exit 1
elseecho "valid"exit 0
fi
chmod +x test.sh
./test.sh bigdavid #正常退出
echo $? # 0
./test.sh #不正常退出
echo $? # 1
return和exit的共同之处都是返回exit code,区别是return结束当前函数,exit结束整个shell脚本
15 文件重定向
每个进程默认打开3个文件描述符:
stdin
标准输入,从命令行读取数据,文件描述符为0stdout
标准输出,向命令行输出数据,文件描述符为1stderr
标准错误输出,向命令行输出数据,文件描述符为2
可以用文件重定向将这三个文件重定向到其他文件中
重定向命令列表
命令 | 说明 |
---|---|
command > file | 将stdout重定向到file中 |
command < file | 将stdin重定向到file中 |
command >> file | 将stdout以追加方式重定向到file中 |
command n> file | 将文件描述符n重定向到file中 |
command n>> file | 将文件描述符n以追加方式重定向到file中 |
输入和输出重定向
echo -e "Hello \c" > output.txt # 将stdout重定向到output.txt中
echo "World" >> output.txt # 将字符串追加到output.txt中read str < output.txt # 从output.txt中读取字符串
echo $str # Hello World
同时重定向stdin和stdout
#! /bin/bashread a
read becho $(expr "$a" + "$b")
创建input.txt:vim input.txt
内容:
3
4
chmod +x test.sh
# 从input.txt中读取内容,将输出写入output.txt中
./test.sh < input.txt > output.txt
cat output.txt # 查看output.txt中的内容
- ls -l >文件 (列表的内容写入文件a.txt中 覆盖写)
- ls -al >>文件 (列表的内容文件追加到文件aa.txt的末尾)
- cat 文件1 >文件2 (将文件1的内容覆盖到文件2)
- echo “内容” >>文件 (将echo的内容追加到文件末尾)
16 引入外部脚本
类似于C/C++中的include,bash也可以引入其他文件的代码
格式:
. filename # 注意点和文件名之间有一个空格
或
source filename
示例:
vim test1.sh
#! /bin/bash
name=bigdavid
vim test2.sh
#! /bin/bash
source test1.sh # . test1.sh
echo $name
输出:
bigdavid
引入的文件可以添加路径,比如使用绝对路径source /home/XXX/test1.sh
本文介绍了shell语法的常见用法,不足之处望指正。
相关文章:

shell语法大全(超级详细!!!!),非常适合入门
本文旨在对y总的Linux基础课shell语法做学习记录,指令较多,方便日后查找。 参考视频:Linux基础课 参考教程:Linux教程 1 概论 Linux中常见的shell脚本有很多种,常见的有: Bourne Shell(/usr/bin/sh或/bi…...

【Python机器学习】零基础掌握ExtraTreesRegressor集成学习
面临的问题:如何更准确地预测糖尿病患者的病情? 在医疗领域,准确预测疾病的发展状况是至关重要的。尤其是对于糖尿病这样的慢性病,一个精准的预测模型能帮助医生制定更有效的治疗方案。但问题是,如何构建一个高准确度的预测模型呢? 假设现有一组糖尿病患者的医疗数据,…...

网络协议--TCP的交互数据流
19.1 引言 前一章我们介绍了TCP连接的建立与释放,现在来介绍使用TCP进行数据传输的有关问题。 一些有关TCP通信量的研究如[Caceres et al. 1991]发现,如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如FTP、电子邮件和U…...

IOC课程整理-13 Spring校验
1. Spring 校验使用场景 2. Validator 接口设计 3. Errors 接口设计 4. Errors 文案来源 5. 自定义 Validator 6. Validator 的救赎 7. 面试题精选 Spring 校验接口是哪个 org.springframework.validation.Validator Spring 有哪些校验核心组件?...

SSM咖啡点餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
一、源码特点 SSM 咖啡点餐管理系统是一套完善的信息系统,结合SSM框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主 要采用B/S模式开…...

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED
Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网: https://capacitorjs.com/docs/ 项目上需要做一个 app,而这个 app 是用 uniapp 做的,里面用到了一个依赖 dom 的库&…...

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)
第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…...

misc学习(4)Traffic(流量分析)-
感悟:回想起自己学的计算机网络和网络协议分析,有所感悟:计算机网络好比将一群人区分开来(局域网),为了能够使得不同部分的人能够沟通(wireshark中的数据包),就设置了网络…...

Less的基本语法
less的每一个语句后必须使用";"结束,否则可能无法正确的转换成css 1、导入 即在当前less文件中引用其它less文件,被引入的less文件中的内容可以在此less文件中使用。在引用less文件时可以省略扩展名 import "global"; // global.…...

spring boot项目优雅停机
1、关闭流程 停止接收请求和内部线程。判断是否有线程正在执行。等待正在执行的线程执行完毕。停止容器。 2、关闭过程有新的请求 在kill Spring Boot项目时,如果有访问请求过来,请求会被拒绝并返回错误提示。 在kill Spring Boot项目时,Sp…...

链式存储方式下字符串的replace(S,T1,T2)运算
链式存储方式下字符串的replace运算 ⭐️题目⭐️思路⭐️代码✨定义结点✨打印字符串函数✨计算字符串函数✨初始化字符串函数✨代码解读✨字符串替换函数✨字符串替换函数解读✨ 主函数✨完整代码 实现在链式存储下字符串的replace(S,T1,T2),来自课本习题的一道题…...

unity脚本_Mathf和Math c#
首先创建一个脚本 当我们要做一个值趋近于一个值变化时 可以用Mathf.Lerp(start,end,time);方法实现 比如物体跟随...

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC
啥?Spring Boot 不用?——对。就只是使用 Spring MVC Embedded Tomcat,而不用 Boot。为啥?——因为 Boot 太重了:) 那是反智吗?Spring Boot 好好的就只是因为太重就不用?——稍安勿…...

笔记Kubernetes核心技术-之Controller
2、Controller 2.1、概述 在集群上管理和运行容器的对象,控制器(也称为:工作负载),Controller实际存在的,Pod是抽象的; 2.2、Pod和Controller关系 Pod是通过Controller实现应用运维,比如:弹…...

Azure云工作站上做Machine Learning模型开发 - 全流程演示
目录 本文内容先决条件从“笔记本”开始设置用于原型制作的新环境(可选)创建笔记本开发训练脚本迭代检查结果 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕࿰…...

前端 : 用html ,css,js写一个你画我猜的游戏
1.HTML: <body><div id "content"><div id "box1">计时器</div><div id"box"><div id "top"><div id "box-top-left">第几题:</div><div id "box…...

Illustrator 2024(AI v28.0)
Illustrator 2024是一款功能强大的矢量图形编辑软件,由Adobe公司开发。它是设计师、艺术家和创意专业人士的首选工具,用于创建和编辑各种矢量图形、插图、图标、标志和艺术作品。 以下是Adobe Illustrator的主要功能和特点: 矢量图形编辑&…...

【Git企业开发】第二节.Git 的分支管理
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Git企业级开发 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!࿰…...

第三章认识Node.js模块化开发
目录 认识Node.js 概述 作用 基本使用 Node.js的运行 Node.js的组成 Node.js的语法 Node.js全局对象 认识模块化开发 概述 场景 特点 模块成员的导入和导出 Node.js 模块化语法 导入模块 导出模块 ES6 模块化语法 导入模块 导出模块 项目 认识Node.js 概述…...

扩展Nginx的无限可能:掌握常见扩展模块和第三方插件的使用方法
Nginx是一款高性能的开源Web服务器和反向代理服务器。它具有模块化的架构,可以通过扩展模块和插件来增强其功能。在本文中,我将围绕Nginx的扩展模块和插件进行讲解,并提供一些常见的扩展模块和第三方插件的示例。 一、Nginx扩展模块 Nginx的…...

centos遇到的问题
lsof -i :8091 > 查看这个端口的线程 lsof : list open files 列出打开文件 -i : internet linux检测系统进程和服务: top : 实时监视系统的进程和资源的利用情况htop : top的增强版 问题: -bash: …...

本机spark 通idea连接Oracle的坑
1. 报错:Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V 查询网上资料,是idea引入的scala运行环境版本与idea默认的scala版本不一样 也就是写的项目中的pom的spark版本与idea默认的版本不…...

网络协议--DNS:域名系统
14.1 引言 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。这里提到的分布式是指在Internet上的单个站点不能拥有所有的信息。每个站点(如大学中的系、校园、…...

计算机视觉注意力机制小盘一波 (学习笔记)
将注意力的阶段大改分成了4个阶段 1.将深度神经网络与注意力机制相结合,代表性方法为RAM ⒉.明确预测判别性输入特征,代表性方法为STN 3.隐性且自适应地预测潜在的关键特征,代表方法为SENet 4.自注意力机制 通道注意力 在深度神经网络中…...

LVS+keepalive高可用集群
keepalive简介 keepalive为LVS应用延伸的高可用服务。lvs的调度器无法做高可用。但keepalive不是为lvs专门集群服务的,也可以为其他的的代理服务器做高可用。 keepalive在lvs的高可用集群,主调度器和备调度器(可以有多个) 一主两备或一主一备。 VRRP: k…...

Thread 和 Runnable 的区别
Thread 和 Runnable 接口的区别有四个: Thread 是一个类,Runnable 是接口,因为在 Java 语言里面的继承特性,接口可以支持多继承,而类只能单一继承。所以如果在已经存在继承关系的类里面要实现线程的话,只能…...

图神经网络和分子表征:5. Completeness
大家都知道 “两点确定一线,三点确定一平面”,那么多少个变量可以确定一个分子呢?这是最近顶刊们热烈讨论的话题。 (据笔者不完全统计)最早在 SphereNet (2022 ICLR)论文里,摘要上就…...

css-渐变色矩形
效果图: 代码: html: <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"initial-scale1.0, user-scalableno" /><title></title><link …...

使用easypoi-spring-boot-starter 4.1.1导入excel报错NoSuchMethodError和NoSuchMethodError
前言 使用easypoi进行excel的导入遇到的错误以及解决办法 easypoi项目地址:https://gitee.com/lemur/easypoi easypoi的Maven依赖: <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter<…...

matlab中类的分别之handle类和value类——matlab无法修改类属性值的可能原因
写在之前(吐槽) 最近由于变化了一些工作方向,开始需要使用matlab进行开发,哎哟喂,matlab使用的我想吐,那个matlab编辑器又没代码提示,又没彩色,我只好用vscode进行代码编辑…...