Shell 脚本 基础 学习 笔记 (超详细,适合新手观看学习)

Shell脚本语言

  • Shell关键字
  • Shell变量
    • 命名规则
    • 使用变量
    • 赋值变量
    • 自定义变量
    • 命令行交互read
    • 定义变量类型declare
    • 预定义变量
    • 环境变量
  • Shell字符串
  • Shell中的集合类型
    • 数组(array)
      • 数组定义和赋值
      • 数组元素访问
      • 获取数组长度
    • map
  • Shell运算
    • 算数运算符
    • 关系运算符
    • 布尔运算符
    • 逻辑运算符
    • 字符串运算符
    • 文件测试运算符
  • Shell语句
    • if语句
      • if语句语法格式
      • if else语法格式
      • if else-if else语法格式
    • for循环
    • while循环
    • until循环
    • case...esac
    • 跳出循环
      • break
      • continue
  • Shell函数
    • 定义函数
    • 调用函数
    • 获取返回值
    • 定义局部变量
  • Shell调试

第一行的#!/bin/bash标识该Shell脚本是由哪个shell解释:

#!/bin/bash

Shell关键字

  • echo:打印内容到屏幕上
  • exec:执行另一个Shell脚本
  • read:读标准输入
  • expr:对整数型变量进行算术运算
  • test:用于测试变量是否相等、是否为空、文件类型等

Shell_demo01.sh

#!/bin/bash
echo="Hello Shell"read ABC
echo "ABC is $ABC"expr $ABC - 4test "Hello"="Hello Shell"
test -d /home/kanglei/codeexec /home/kanglei/code/shell_demo02.shexit

Shell_demo02.sh

#!/bin/bash
echo "I'm Kavien"

初次执行会报错没有权限

shell_demo01.sh: line 12: /home/xiaoming/code/shell_demo02.sh: Permission denied
shell_demo01.sh: line 12: exec: /home/xiaoming/code/shell_demo02.sh: cannot execute: Permission denied

然后我们将两个文件的权限都赋值为777

chmod 777 shell_demo01.sh 
chmod 777 shell_demo02.sh 

再次执行即可执行成功,结果如下

99
ABC is 99
95
I'm Kavien

Shell变量

命名规则

  • 定义变量时,变量名不加美元符号$
  • 变量名和等号之间不要出现空格,但是可以使用下划线 - ‘_’
  • 一般变量名用大写
  • 命名只能是英文字母、数字和下划线,首个字符不能以数字开头
  • 不能使用标点符号和关键字

使用变量

  • 使用一个已经被定义过的变量。只要在变量名前面加美元符号并将变量加上花括号即可。
my_name="xiaoming"
echo ${my_name}

赋值变量

  • 赋值处必须是一个整体,不能有空格
  • 想要有空格,请使用单引号或者双引号将赋值处进行包围

自定义变量

  • 只读变量
    • 使用readonly将变量定义为只读变量,只读变量值不可改变
  • 删除变量
    • 使用unset可以删除变量,变量被删除后不能再次使用,unset不能删除只读变量
  • 全局变量
    • 使用export将变量设置为全局变量
#!/bin/bash
echo "I'm Kavien"# 定义普通变量
NAME=xiaoming
# 定义只读变量
readonly COUNTRY=SHANGHAI
# 定义全局变量
export HOME="shanghai pudong"# 打印变量的值
echo $NAME
echo $COUNTRY
echo $HOME# 删除变量
unset NAME
unset COUNTRY
unset HOMEecho $NAME 
echo $COUNTRY
echo $HOMEexit

执行结果如下

I'm Kavien
xiaoming
SHANGHAI
shanghai pudong
shell_demo02.sh: line 18: unset: COUNTRY: cannot unset: readonly variableSHANGHAI

命令行交互read

有时候我们希望在脚本运行时能根据用户的输入决定脚本后续执行逻辑,比如在安装插件的时候经常会让用户选择输入[N/Y]的时候。

read -p "Please input [N/Y]: " yn
if ["$yn" == "N" -o "$yn" == "n" ]; thenecho "NO"
elif ["$yn" == "Y" -o "$yn" == "y" ]; then	echo "YES"
fi

read命令的使用形式为

read [-pt] variable参数p:后面可以接提示符参数t:后面可以接秒数
eg:
read -p "please input your name" -t 5 name
# 表示将输入内容赋值给变量name,用户有5秒钟的输入时间。

定义变量类型declare

declare命令的使用形式如下:

declare [-aixr] variable参数a:将variable定义为数组参数i:将variable定义为整形(integer)参数x:将variable设置成环境变量,类似于export的作用参数r:variable为readonly类型,值不能被更改

默认情况下,变量的赋值内容都是字符类型的。例如sum=100+300+500,我们希望echo $sum输出的是一个求和表达式100+300+500。如果想要输出求和后的值,可以使用declare命令declare -i sum=100+300+500,结果输出echo $sum的是900。

预定义变量

预定义变量常用来获取命令行的输入

  1. $0:脚本文件名
  2. $1-9:第1-9个命令行参数名
  3. $#:命令行参数个数
  4. $@:所有命令行参数
  5. $*:所有命令行参数
  6. $?:前一个命令的退出状态
  7. $$:执行的进程ID

环境变量

环境变量默认就存在,常用的有以下几种:

  • HOME:用户主目录
  • PATH:系统环境变量PATH
  • TERM:当前终端
  • UID:当前用户ID
  • PWD:当前工作目录,绝对路径

Shell字符串

  • 字符串是用单引号或者双引号或者可以不使用引号的整体。

  • 单引号字符串的限制

    • 单引号字符串中的变量值是无效的
    • 单引号中不能使用转义字符
  • 双引号字符串的优点

    • 双引号字符串中可以变量
    • 双引号中可以出现转义字符
  • 拼接字符串

    result1="hello,${COUNTRY}!"
    result2="hello,"${COUNTRY}"!"result3='hello,'${COUNTRY}'!'
    result4='hello,${COUNTRY}!'
    echo $result1 $result2
    echo $result3 $result4
    

    运行结果为:

    hello,SHANGHAI! hello,SHANGHAI!
    hello,SHANGHAI! hello,${COUNTRY}!
    
  • 获取字符串的长度

    echo ${#COUNTRY}等价于${#COUNTRY[0]}
    
  • 提取子字符串

    # 从字符串中第二个字符开始截取3个字符
    echo ${COUNTRY:1:3}
    # 从倒数第二位开始,截取三个字符,最后一个字符下标为-1
    echo ${COUNTRY:(-2):3}
    # 从第二位开始截取到最末尾,第一个字符下标为0
    echo ${COUNTRY:2}
    

    【注】第一个字符的索引值为0。

  • 查找子字符串(哪个字母先出现就计算哪个)

    string="runoob is a great site"
    echo `expr index "$string" io` # 输出4
    

    【注】以上脚本中的`是反引号,而不是单引号’。

  • 删除字符串

    #从前往后截取,%从后往前截取

    如果使用两个#或者两个%,则表示将符合的最长数据删除

    str="https://www.baidu.com/123/abc"
    # 删除前面的https://
    echo ${str#https://} # www.baidu.com/123/abc
    # 删除后面的/abc
    echo ${str%/abc} # https://www.baidu.com/123
    
  • 替换字符串

    # 将https替换成HTTP
    echo ${str/https/HTTP}
    
    • 使用一个斜杠(/)表示只替换第一个遇到的字符
    • 使用两个斜杠(//)则表示替换全部负荷的字符
    • 使用#匹配以指定字符开头的字符串(#删除字符串的前缀)
    • 使用%匹配以指定字符结尾的字符串(%删除字符串的后缀)
    echo ${str/b/B} # https://www.Baidu.com/123/abc
    echo ${str//b/B} # https://www.Baidu.com/123/aBc
    echo ${str/#abc/ABC} # https://www.baidu.com/123/abc
    echo ${str/%abc/ABC} # https://www.baidu.com/123/ABC
    echo ${str/#ht/HT} # HTtps://www.baidu.com/123/abc
    echo ${str/%ht/HT} # https://www.baidu.com/123/abc
    
  • 字符串默认值

    # 如果变量name没有赋过值,则给一个默认值default,否则使用指定的值
    echo $name # 输出为空
    echo ${name-default} # defalutname="abc"
    echo ${name-default} # abc
    # 如果将变量设置为"",则会认为赋过值
    name=""
    echo ${name-default} # 输出为空
    # 如果变量内容为""或者变量未初始化则给默认值,可以在-前面加个冒号,使用:-
    name=""
    echo ${name-default} # 输出为空
    echo ${name:-default} # default
    
  • 字符串split成数组

    # 以空格为分隔符分隔字符串成数组
    s="a b c d e"
    a=($s)
    echo ${a[*]} # a b c d e
    echo ${a[3]} # d
    # 需要指定特定字符进行分隔且原字符中又没有空格时,将特定字符替换成空格,然后进行分隔
    s="a,b,c,d,e"
    a=(${s//,/ }) # 两个斜线 // 表示全局替换的意思。逗号,是要被替换的模式,空格``是替换后的文字。
    # 如果字符串中本身带有空格,并且希望分隔符不为空格s="a b,c d e,f,g,h,i,j"old_ifs="$IFS"echo s #secho $s # a b,c d e,f,g,h,i,jecho $old_ifs # IFS=","echo $s # a b c d e f g h i ja=($s)echo $a # a becho ${a[@]}# a b c d e f g h i jecho ${a[2]} # fecho ${a[1]} # c d eecho ${a[3]} # gecho ${a[4]} # hecho ${#a[0]} # 3echo ${#s} # 19echo ${#a[*]} # 7 
    
  • 字符串的包含

    # 有时需要判断字符串str1中是否包含字符串str2,使用=~操作符
    str1="hello"
    str2="ell"
    if [[$str1 =~ $str2 ]];thenecho "$str1 contain $str2"
    fi
    
  • ``符号

    这个符号在数字键1的左侧,与单引号很类似,但其功能与单引号都有不同,该符号中的命令会被执行

    d=`date`
    echo $d
    

    如果不想用这个符号,可以用$() 替换

    e=$(date)
    echo $e
    

Shell中的集合类型

数组(array)

数组定义和赋值

数组中的元素用括号包围,各元素之间用空格隔开。

array_name=(v0 v1 v2 v3 v4)
# 重新设置指定元素的内容
array4_name[2]=v22
echo ${array_name[2]} # v22

数组元素访问

echo ${array_name[*]} # v0 v1 v2 v3 v4
echo ${array_name[@]} # v0 v1 v2 v3 v4

数组元素下标从0开始,想要访问指定位置的元素,使用[]指定下标值

echo ${array_name[0]} # v0
echo ${array_name[3]} # v3

获取数组长度

# 获取整个数组的长度
echo ${#array_name[@]} # 5
echo ${#array_name[*]} # 5
# 获取数组中单个元素的长度
echo ${#array_name[2]} # 2

map

map类型中存储的是键值对,map变量使用如下

# 定义map变量
declare -A map=(["a"]="1" ["b"]="2")
# 输出所有的key
echo ${!map[@]}
# 输出所有的value
echo ${map[@]}
# 输出指定key对应的value
echo ${map["a"]}
echo ${map["c"]}
# 添加元素
map["c"]="3"
echo ${map["c"]}
# map中键值对的个数
echo ${#map[@]}

Shell运算

【注意】

  1. 表达式和运算符之间要有空格,例如2+2是不正确的,必须写成2 + 2
  2. 完整的表达式要被``两个反引号包含。

算数运算符

下面列出了常用的算数运算符,假定变量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]是错误的,必须写成[ $a == $b ]
  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算

关系运算符

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

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

布尔运算符

运算符说明举例
!非运算,表达式为 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。

逻辑运算符

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

假定变量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。
$检测字符串是否不为空,不为空返回 true。[ $a ] 返回 true。

文件测试运算符

文件测试运算用于检测Unix文件的各种属性

操作符说明举例
-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。

其他检查符:

  • -S:判断某文件是否socket
  • -L:检测文件是否存在并且是一个符号链接

Shell语句

shift 命令可以用于将命令行参数向左移动一位,也就是忽略第一个参数,让 $2 作为新的 $1,以此类推。

#!/bin/bash
echo "原始参数: " $*
shift
echo "shift后参数: " $*
shift 2
echo "shift 2后参数: " $*1995

运行命令bash test.sh wo shi xiao ming ni meng hao,运行结果如下:

原始参数:  wo shi xiao ming ni meng hao
shift后参数:  shi xiao ming ni meng hao
shift 2后参数:  ming ni meng hao1995

if语句

if语句语法格式

if condition
then command1command2...commandN
fi

可以将以上命令写为一行(适用于终端命令行提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

代码解释:

  • 这段代码是一个简单的条件判断语句,用于检查系统中正在运行的 SSH 进程数量是否大于 1。

  • 代码中使用了 $() 来执行命令替换。$(ps -ef | grep -c "ssh") 执行了一个命令,用于查询运行中的进程列表,然后使用 grep 过滤出包含 “ssh” 字符串的行,并使用 -c 参数计算匹配行的数量。

  • 接着,[ ... ] 是一个条件判断语句的开头;-gt 表示大于的比较运算符;1 是要比较的值。

  • 如果运行中的 SSH 进程数量大于 1,则输出 “true”。

if else语法格式

if condition
then command1command2
else command3
fi

if else-if else语法格式

if condition
then command1
elif condition2
thencommand2
elsecommand3
fi

if else的[...]判断语句大于使用-gt,小于使用-lt

if [ "$a" -gt "$b" ]; then...
fi

如果使用((...))作为判断语句,大于和小于可以直接使用><

for循环

for循环语法格式:

for var in item1 item2 ... itemN
do command1command2
done

一行格式:

for var in item1 item2 ... itemN; do command1; command2... done;

当变量值在列表中,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

# 顺序输出当前列表中的数字
for loop in 1 2 3 4 5
doecho "The value is:$loop"
done
# 顺序输出字符串中的字符
for str in This is a string
doecho $str
done

while循环

while循环用于不断执行一系列命令,也用于从输出文件中读取数据。

while condition
docommand
done
# 举例说明:如果int小于等于5,则输出int的值,并使int+1
int=1
while(( $int<=5))
doecho $intlet "int++"
done
# 上述案例中,使用到了let命令,用于执行一个或多个表达式,变量计算中不需要加上$来表示变量

无限循环

while
docommand
done
# 或者
while true
docommanddone
# 或者
for (( ; ; ))

until循环

  • until循环执行一系列命令直至条件为true时停止
  • until循环与while循环在处理方式上刚好相反
# until语法格式
until condition
do command
done

condition一般为条件表达式,如果返回值为false,则继续执行循环体内的语句,否则跳出循环。

# 使用until输出0~9的数字
a=0
until [ ! $a -lt 10 ]
doecho $aa=`expr $a + 1`
done

case…esac

case…esac为多选择语句,与其他语言中的swith…case语句类似,是一种多分支选择结构,每个case分支用右圆括号开始,用两个分号;;表示break,即执行结束,跳出整个case…esac语句,esac作为结束标记。

可以用case语句匹配一个值与一个模式,如果匹配成功,执行想匹配的命令。

casein 
模式1)command1command2;;
模式2)command1command2;;
esac
  • 取值后必须为单词in,取值可以为变量或常数
  • 每个模式必须以右括号结束
  • 如果无一匹配模式,使用星号*捕获该值,再执行后面的命令。
# 脚本提示输入,寻找相匹配的项
echo '输入 1 到 2 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in1)  echo '你选择了 1';;2)  echo '你选择了 2';;*)  echo '你没有输入 1 到 2 之间的数字';;
esac
# 脚本匹配字符串
site="abc"
case "$site" in"abc") echo "ABC" ;;"def") echo "DEF" ;;"ghi") echo "GHI" ;;
esac

跳出循环

break

break命令允许跳出所有循环(终止执行后面的所有循环)

# 以下脚本会进入死循环直到接收到输入数字大于5的情况,会跳出这个循环
while :
doecho -n "输入 1 到 5 之间的数字:"read aNumcase $aNum in1|2|3|4|5) echo "你输入的数字为 $aNum!";;*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"break;;esac
done

continue

continue命令不会跳出所有循环,仅仅跳出当前循环

# 当接收到数字大于5时,循环不会结束,语句echo "游戏结束"永远不会被执行
while :
doecho -n "输入 1 到 5 之间的数字: "read aNumcase $aNum in1|2|3|4|5) echo "你输入的数字为 $aNum!";;*) echo "你输入的数字不是 1 到 5 之间的!"continueecho "游戏结束";;esac
done

Shell函数

定义函数

# 语法格式
function 函数名 () {command
}function 函数名 {command
}函数名 () {command
}
# 案例说明
function hello_fun(){echo "hello function() fun"echo $1 $2return 1
}function hello_function{echo "hello function fun"echo $1 $2return 1
}hello()
{echo "hello fun"
}

调用函数

# 直接使用函数名调用hello函数
hello
# 使用[函数名 函数参数]来传递参数
hello_function 1 2
# 使用[FUN=`函数名 函数参数`]来间接调用
Fun=`hello_fun 1 2`
echo $FUN

获取返回值

$?可用于获取前一个函数的返回值

hello_fun 1 2
echo $? # 返回1

定义局部变量

# 使用local来在函数中定义本地变量
fun()
{local x=1echo $x
}

Shell调试

sh -n script_name.sh检查是否有语法错误,没有任何输出则表示无语法错误。

sh -x script_name.sh执行并调试Shell脚本

# 命令
sh -x test.sh wo shi xiao ming ni meng hao
# 运行结果
+ echo 原始参数:  wo shi xiao ming ni meng hao
原始参数:  wo shi xiao ming ni meng hao
+ shift
+ echo shift后参数:  shi xiao ming ni meng hao
shift后参数:  shi xiao ming ni meng hao
+ shift 2
+ echo shift 2后参数:  ming ni meng hao1995
shift 2后参数:  ming ni meng hao1995

前缀为+表示Shell的输出,不带任何符号的表示我们程序的输出。

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

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

相关文章

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长&#xff0c;成就大牛之路 在这个科技日新月异的时代&#xff0c;掌握一门编程语言或专业技能已是必备&#xff0c;不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书&#xff0c;涵盖Python、Java、Kotlin、Android和SQL&#xff0c;助你快速在技术之…

Ubuntu22下源码编译CEF(branch=6045)+mp4+mp3笔记

前段时间编译了win版本&#xff0c;最近捣鼓一下Ubuntu版本。 配置网络,Ubuntu在网络配置填写了代理&#xff0c;在终端还是要输入 set http_proxyxxxx:xx set https_proxyxxxx:xx 这样避免大部分的git代码下载 为了减少下载代码和避免git那个几G内存的坑&#xff0c;我直接…

Python 标准库SYS

标准库sys引入及方法介绍和示例。 简介 sys 模块主要负责与 Python 解释器进行交互&#xff0c;该模块提供了一系列用于控制 Python 运行环境的函数和变量。 命令行参数 可以获取传递给python 执行文件的命令行参数&#xff0c;命令行参数是由sys模块存储在名为argv的列表中&…

通信子网在计算机网络中的地位和作用

一、通信子网是计算机网络的核心组成部分 通信子网是计算机网络的核心组成部分&#xff0c;它负责为计算机网络中的各种设备提供通信支持。无论是主机之间的数据传输&#xff0c;还是主机与终端之间的数据通信&#xff0c;都需要通过通信子网来实现。通信子网是连接各个设备的关…

严世芸龟法养生经

文章目录 严世芸理念荤素搭配&#xff0c;不偏嗜动静结合心平气和 龟息法 严世芸 严世芸&#xff0c;出生于1940年&#xff0c;现任上海中医药大学的主任医师&#xff0c;教授。他父亲是近代上海有名的中医&#xff0c;他又是著名医家张伯臾的亲传弟子。 从小就在父亲诊室里长…

leetCode算法—3.无重复字符的最长子串

1.给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 …

PO 对象被锁定

问题描述 在创建PO对象的时候&#xff0c;由于上次电脑断网导致PO连接中断&#xff0c;但服务器中登录用户还在占用PO对象&#xff0c;需要手动在POD中删除锁对象才可编辑 解决方案 登录到POD页面&#xff0c;点击右上角Administration 点击Lock Overview&#xff0c;查看…

营销投放下半场,游戏行业如何寻觅进化空间?

摘要&#xff1a;微博&#xff0c;游戏行业突围市场新利器 游戏行业&#xff0c;格局永远在变。 从2017年互联网大厂集体盯上游戏大蛋糕&#xff0c;到2021年行业收缩&#xff0c;再到今年上半年实际销售收入继去年首次出现同比下滑…几经过山车式行情的游戏行业&#xff0c;…

加密友好不意味容易!亚洲地区实施了世界上最严格的加密规定!

2023年的一大主题是亚洲作为加密货币世界中至关重要的地区的持续崛起。这在很大程度上要归功于新加坡等著名的数字资产中心&#xff0c;以及香港和日本的重新崛起。 虽然这些司法管辖区确实欢迎数字资产&#xff0c;但围绕它们的炒作可能会有些误导&#xff0c;加密友好并非意味…

【AI】如何准备mac开发vue项目的环境

为了在Mac上开发Vue项目&#xff0c;你需要准备一些工具和环境。以下是主要的步骤&#xff1a; 安装Node.js和npm&#xff1a; Vue.js是一个基于JavaScript的框架&#xff0c;因此你需要Node.js环境。访问Node.js官网下载并安装Node.js&#xff0c;这也会自动安装npm&#xff0…

图像生成中的“Classifer-free guidance”是什么?

在图像生成领域&#xff0c;"Classifier-free guidance"是一种用于改善条件生成模型性能的技术&#xff0c;特别是在使用生成对抗网络&#xff08;GANs&#xff09;或扩散模型等生成模型时。这个概念最近在与扩散模型相关的文献中变得流行&#xff0c;尤其是在OpenAI…

玩转大数据18:大规模数据处理与分布式任务调度

引言 在数字化时代&#xff0c;数据成为了一种宝贵的资源&#xff0c;对于企业和组织来说&#xff0c;如何有效地处理和分析这些数据成为了关键的竞争力。大规模数据处理与分布式任务调度作为大数据处理的核心技术&#xff0c;为解决这一问题提供了有效的解决方案。 随着数据…

赛宁网安多领域亮相第三届网络空间内生安全发展大会

2023年12月8日&#xff0c;第三届网络空间内生安全发展大会在宁开幕。两院院士、杰出专家学者和知名企业家相聚南京&#xff0c;围绕数字经济新生态、网络安全新范式进行广泛研讨&#xff0c;为筑牢数字安全底座贡献智慧和力量。 大会围绕“一会、一赛、一展”举办了丰富多彩的…

vue实现滑动验证

效果图&#xff1a; 源码地址&#xff1a;github文档地址&#xff1a; https://github.com/monoplasty/vue-monoplasty-slide-verify 使用步骤&#xff1a;1&#xff0c;安装插件&#xff1a; npm install --save vue-monoplasty-slide-verify 在main.js中使用一下&#xff…

wgcloud访问页面如何加前缀/wgcloud

nginx配置实现加/wgcloud - WGCLOUD

网络层--TCP/UDP协议

目录 一、TCP/UDP协议介绍 1、UDP(User Datagram Protocol)--用户数据报协议 1.1 UDP报文格式 1.2 UDP协议的特性 2、TCP(Transmission Control Protocol )--传输控制协议 2.1 TCP报文格式 2.2 TCP协议的特性 2.3 TCP三次握手 2.4 四次挥手 三、TCP和UDP的区别 四、t…

Vue3-17-ref 模板引用的基本使用

什么是模板引用 简单来说&#xff0c;就是在 js 代码中 获取到 html 中的dom元素的完整信息&#xff0c; 从而实现直接操作dom元素的效果。模板引用的语法 1、给 dom 元素添加 ref名称 属性&#xff0c;指定一个独有的名称&#xff1b; 2、js 中 声明一个 与 dom 元素的 ref 同…

标准化考场网络时钟系统(子母钟系统)技术建设方案

标准化考场网络时钟系统&#xff08;子母钟系统&#xff09;技术建设方案 标准化考场网络时钟系统&#xff08;子母钟系统&#xff09;技术建设方案 【摘要】时钟系统是校园网络中一个重要的精准计时系统&#xff0c;随着网络的普及&#xff0c;许多校园都建了自己的校园专网&…

c#面试面向对象——在项⽬中为什么使⽤接⼝?接⼝的好处是什么?什么是⾯向接⼝开发?

1.解耦合 接口可以用于定义组件之间的契约&#xff0c;通过接口进行通信&#xff0c;而不必关心具体的实现细节。这使得各个组件之间的依赖关系更加松散&#xff0c;减少了代码的耦合性&#xff0c;使得系统更加灵活和可扩展。 // 定义支付接口 public interface Payment {void…

自建网站如何快速被搜索引擎搜索到?

新网站被搜索引擎迅速收录通常需要一些时间&#xff0c;但您可以采取一些措施来加速这个过程。以下是一些建议&#xff1a; 创建网站地图&#xff1a; 确保您的网站有一个XML站点地图&#xff0c;其中包含所有页面的信息。提交这个站点地图到搜索引擎&#xff0c;如Google Sear…