【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变量

在一个脚本周期内,其值可以发生改变的量就是变量。分类如下

  1. 用户自定义变量: 这种变量是最常见的变量,由用户自由定义变量名和变量的值。
  2. 环境变量: 这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。不是太好理解吧,那么大家还记得在Windows中,同一台电脑可以有多个用户登录,而且每个用户都可以定义自己的桌面样式和分辨率,这些其实就是Windows的操作环境,可以当做是Windows的环境变量来理解。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。
  3. 位置参数变量: 这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  4. 预定义变量: 是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命令查看.............

位置参数变量:

位置参数变量作用
$nn为数字,$0表示当前 Shell 脚本程序的名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 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循环只会循环一次
	do
		echo "The parameters is: $i"
		#打印变量$i的值
	done
x=1
#定义变量x的值为1
for y in"$@"
#同样in后面的有几个值,for循环几次,每次都把值赋予变量y
#可是Shel1中把“$@”中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
	do
		echo "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

变量定义规则

  1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  2. 不能使用标点符号,不能使用bash里的关键字(可用help命令查看保留关键字)。

  3. 环境变量建议大写,便于区分

  4. 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含" 变量名 " 或用 变量名"或用 变量名"或用{变量名}包含变量名。

  5. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

  6. 局部变量变成全局变量使用export

  7. 子shell更改不会影响父shell

  8. typeset和declare两个内部命令定义变量

  9. 等号左右两侧不能有空格。变量的值如果有空格,需要使用双引号或单引号括起来,如:“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的值 sc

echo `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 ]
then
	echo 'a等于b'
else
	echo 'a不等于b'
fi

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

运算符单词说明举例
-eqequal检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-nenot equal检测两个数是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gtgreat than检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-ltless than检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-gegreat than or equal检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-leless 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。

注意:权限几个判断,如果只有一个部分符合,则认为是有权限的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker上部署LPG(loki+promtail+grafana)踩坑复盘

Docker上部署LPG&#xff08;lokipromtailgrafana&#xff09;踩坑复盘 声明网上配置部署踩坑多机采集 声明 参考掘金文章&#xff1a;https://juejin.cn/post/7008424451704356872 版本高的用docker compose命令&#xff0c;版本低的用docker-compose 按照文章描述&#xff0c…

应急响应-Webshell-典型处置案例

网站后台登录页面被篡改 事件背景 在2018年11月29日4时47分&#xff0c;某网站管理员发现网站后台登录页面被篡改&#xff0c;“中招”服务器为windows系统&#xff0c;应采用java语言开发&#xff0c;所使用的中间件为Tomcat。 事件处置 Webshell排查 利用D盾对网站目录进…

C++_包装器

目录 1、包装器的用法 2、包装器的类型 3、包装器的作用 4、包装成员函数 5、bind&#xff08;绑定&#xff09; 5.1 bind的用法 5.2 bind减少参数个数 结语 前言&#xff1a; C11的包装器&#xff0c;总称为function包装器&#xff0c;而包装器又称适配器…

模块化机房的成本效益分析

在当今日益数字化的商业环境中&#xff0c;数据中心的建设和运营成本成为企业关注的重点。模块化机房以其独特的优势&#xff0c;不仅满足了快速部署和高效能的需求&#xff0c;还显著降低了总体成本。本文将深入探讨模块化机房在不同方面带来的成本效益。 1.预制模块化设计 …

如何解决由触发器导致 MySQL 内存溢出?

由触发器导致得 OOM 案例分析过程和解决方式。 作者&#xff1a;龚唐杰&#xff0c;爱可生 DBA 团队成员&#xff0c;主要负责 MySQL 技术支持&#xff0c;擅长 MySQL、PG、国产数据库。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编…

如何用 RAG 技术玩转文档问答?Milvus × 网易有道 QAnything 为你揭秘!

过去一年&#xff0c;RAG 在技术层面发展迅速&#xff0c;为向量数据库赛道添了一把火。RAG 和向量数据库的结合&#xff0c;能够有效解决幻觉、时效性差、专业领域知识不足等阻碍大模型应用的核心问题。 不久前&#xff0c;网易有道开源了自研的 RAG 引擎 QAnything。用户的任…

如何下载安装chromium浏览器

下载安装chromium浏览器去这个网站下载&#xff1a; CNPM Binaries Mirror 参考链接&#xff1a;手写 Puppeteer&#xff1a;自动下载 Chromium - 知乎

渲染农场:大规模渲染任务的高效处理方式

在当今的数字内容创作领域&#xff0c;渲染农场是处理大规模渲染任务的关键技术&#xff0c;它利用多台计算机的集群来分担复杂的渲染工作&#xff0c;大大提高了效率和速度。这篇文章将深入探讨渲染农场的工作原理、技术架构&#xff0c;以及如何根据需求选择合适的渲染农场。…

Vmware 点进centos不显示鼠标

今天安装了Vmward16 安装后在里面安装了centos7&#xff0c;但进入centos7 时没显示鼠标&#xff0c;但有点击效果。 设置了右上角的 编辑->首选项 -输入-》单击鼠标时抓取键盘和鼠标输入然后重启下vmware&#xff0c;但鼠标还是不显示 后面我的电脑重启了&#xff0c;然后…

【数学】【网格】【状态压缩】782 变为棋盘

作者推荐 视频算法专题 本文涉及知识点 数学 网格 状态压缩 LeetCode:782 变为棋盘 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动&#xff0c;你能任意交换两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换&am…

小区水电智能化系统

随着科技的进步&#xff0c;我们的生活变得越来越智能化&#xff0c;而小区水电智能化系统正是这一趋势的典范。这个系统不仅仅是一种便利&#xff0c;更是未来智慧生活的关键组成部分。让我们一起来了解一下它的奥秘吧! 让我们来看看小区水电智能化系统的核心&#xff1a;智能…

【Spring】idea连接mysql数据库

1 MySQL安装 下载地址&#xff1a;https://dev.mysql.com/downloads/installer/ 安装server only选项&#xff0c;之后的可以选择默认安装选项 2 MySQL登录并创建数据 -- 创建数据库 create databases spring_db; use spring_db; -- 创建表 create table users (id INT AUTO…

现货黄金交易网上有用的交易技巧

在不同的现货黄金交易网上&#xff0c;经常有投资者分享交易技巧。由于在网上发文没什么限制&#xff0c;所以这些交易技巧都是泥沙俱下&#xff0c;质量良莠不齐。不过也有一些是有用的&#xff0c;下面我们就来介绍一下现货黄金交易网上那些有用的交易技巧。 培养防守意识。什…

DataFunSummit 2023因果推断在线峰会:解码数据与因果,引领智能决策新篇章(附大会核心PPT下载)

在数据驱动的时代&#xff0c;因果推断作为数据科学领域的重要分支&#xff0c;正日益受到业界的广泛关注。DataFunSummit 2023年因果推断在线峰会&#xff0c;汇聚了国内外顶尖的因果推断领域专家、学者及业界精英&#xff0c;共同探讨因果推断的最新进展、应用与挑战。本文将…

滑动窗口的概念,糊涂窗口综合征,nagle算法

目录 1.流量控制 2.滑动窗口 3.思考问题 1.流量控制 一般来说,我们总是希望数据传输得更快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失.所谓流量控制(flow control)就是发送方的发送速率不要太快,要让接收方来得及接收. 2.滑动窗口 T…

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后&#xff0c;总是有这个报错&#xff0c;有时候还有别的icon也找不见 一通调查之后&#xff0c;发现是因为引入了一个vue插件 这个插件引入之后&#xff0c;webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…

el-select 选项文字超长解决方案

先看现象 省略号显示 <el-selectv-model"configs.domain.secondLevel"style"width: 100%"filterableallow-createdefault-first-optionplaceholder"请输入二级网段名称&#xff0c;例如&#xff1a;广州研发中心/研发网"focus"setOpti…

#QT(本地音乐播放器)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;之前做的音乐播放器只做了一个界面&#xff0c;是因为跟的课程发现到后面需要付费&#xff0c;并且WINGW6.2.0运行QMediaPlayer时无法运行&#xff0c;会崩溃&#xff0c;现在退一步用WINGW5.12.2做一个本地音乐播放器 3.记录&am…

漏洞挖掘 | 没有弱口令的挖掘思路

没有弱口令怎么挖&#xff1f;依稀记得有一个很老的思路叫做禁用js可以跳转后台&#xff0c;奈何学习两年半到现在从未发现一个这种漏洞。 不过&#xff0c;虽然不能直接搞到未授权后台登录&#xff0c;但是站有站的设计&#xff0c;小白有小白的打法&#xff01; 访问某URL&am…

web开发——前端html、css、JavaScript学习总结(持续更新中.......)

目录模版 1 html:结构标签/属性文本标记: mark文本设置:删除线del / 下划线ins/ 加粗b / 强调的文本em / 重要的文本 strong超链接: a联系信息: addressdiv 定义文档中的分区或节: div行元素:spanhtml结构: main / section / articlenav表格:table html中各种标签/属性的英文扩…