shell脚本语法
shell脚本的变量
系统变量
系统变量是操作系统用来存储配置信息的变量,它们可以控制操作系统的行为和程序的运行环境。系统变量的种类和内容取决于操作系统的类型和版本。以下是一些常见的系统变量类别和它们可能包含的内容:
-
环境变量:这些变量为程序提供运行时所需的信息,如文件路径、系统配置、用户偏好等。
- 例如:
PATH、HOME、TEMP、TMPDIR、USERPROFILE等。
- 例如:
-
系统配置变量:这些变量定义了系统的基本配置,如系统启动参数、硬件配置、网络设置等。
- 在 Linux 中,系统配置变量可能包括
HOSTNAME(主机名)、SHELL(默认 shell)、HISTSIZE(历史记录大小)等。
- 在 Linux 中,系统配置变量可能包括
-
用户配置变量:这些变量存储了用户的个人设置,如桌面环境、主题、语言偏好等。
- 用户配置变量可能包括
XDG_CONFIG_HOME(用户配置文件目录)、XDG_DATA_HOME(用户数据文件目录)等。
- 用户配置变量可能包括
-
安全和权限变量:这些变量与系统的安全设置和用户权限有关。
- 例如:在 Unix-like 系统中,
UID和EUID(用户 ID 和有效用户 ID)用于控制用户权限。
- 例如:在 Unix-like 系统中,
-
网络配置变量:这些变量定义了网络相关的设置,如 DNS 服务器、网关、子网掩码等。
- 例如:
GATEWAY、DNS、NETMASK等。
- 例如:
-
硬件配置变量:这些变量描述了硬件的配置,如内存大小、CPU 类型、磁盘分区等。
- 例如:在 Linux 中,
MEM_TOTAL(总内存大小)、CPUINFO(CPU 信息)等。
- 例如:在 Linux 中,
-
系统性能变量:这些变量与系统的性能和资源使用有关,如 CPU 使用率、内存使用情况、磁盘空间等。
- 例如:
LOAD_AVERAGE(系统负载平均值)。
- 例如:
-
系统状态变量:这些变量反映了系统当前的状态,如系统启动时间、运行时间、系统日志等。
- 例如:
UPTIME(系统运行时间)、BOOT_TIME(系统启动时间)。
- 例如:
系统变量可以通过不同的方式进行访问和修改,例如在命令行界面(CLI)中使用特定的命令,或者通过图形用户界面(GUI)中的系统设置工具。在编程和脚本编写中,系统变量经常被用来配置程序的行为或自动化任务。
环境变量
环境变量是系统变量的一个子集。
环境变量是为操作系统的程序提供配置信息的变量。它们可以在任何程序中被读取和修改,并且可以在程序启动时传递给程序。
这句话描述了环境变量在计算机操作系统中的作用和特点。
-
为操作系统的程序提供配置信息:环境变量存储了操作系统和运行在其上的程序所需的配置信息。这些信息可以包括文件路径、系统配置、用户偏好设置等。程序可以通过读取这些变量来获取必要的信息,而不需要在代码中硬编码这些信息。
-
变量:在计算机科学中,变量是存储数据的容器。环境变量是特殊的变量,它们不是由单个程序定义和管理的,而是由操作系统维护,并在系统范围内可用。
-
可以在任何程序中被读取和修改:这意味着任何运行在操作系统上的程序都可以访问和修改环境变量。这为程序提供了灵活性,因为它们可以根据环境变量的值来调整自己的行为。
-
可以在程序启动时传递给程序:当一个程序启动时,它可以接收到一组环境变量,这些变量可以作为参数传递给程序。这样,程序就可以根据这些变量的值来决定如何运行。例如,一个程序可能会检查一个特定的环境变量来决定是否启用调试模式。
总结来说,环境变量是操作系统中的一种机制,它允许程序在运行时获取和使用配置信息,而无需在代码中硬编码这些信息。这增加了程序的可移植性和灵活性,因为相同的程序可以在不同的环境(具有不同的配置)中运行,只需通过设置不同的环境变量即可。
环境变量的例子包括:
PATH 命令所示路径,以冒号为分割;
HOME 打印用户家目录;
SHELL 显示当前Shell类型;
USER 打印当前用户名;
ID 打印当前用户id信息;
PWD 显示当前所在路径;
TERM 打印当前终端类型;
HOSTNAME 显示当前主机名;
PS1 定义主机命令提示符的;
HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;
RANDOM 随机生成一个 0 至 32767 的整数;
HOSTNAME 主机名
创建坏境变量
#!/bin/bash# 创建一个新的环境变量
export MY_VAR="Hello, World!"# 打印当前的环境变量
echo "MY_VAR is set to: $MY_VAR"# 读取环境变量
read -p "Enter a new value for MY_VAR: " new_value
export MY_VAR=$new_value# 打印修改后的环境变量
echo "MY_VAR is now set to: $MY_VAR"# 删除环境变量
unset MY_VAR# 尝试打印已删除的环境变量(会显示空值)
echo "MY_VAR is set to: $MY_VAR"# 退出脚本
exit 0
- 1.给脚本执行权限:chmod +x env_variables.sh。
- 2运行脚本:./env_variables.sh。

请注意,这个脚本中设置的环境变量只在脚本运行的当前 shell 会话中有效。一旦脚本结束,这些环境变量就会消失。如果你想要永久设置环境变量,你可以将 export 命令添加到你的 shell 配置文件中,如 ~/.bashrc 或 ~/.profile。
特殊变量
$0 当前脚本的名称;
$n 当前脚本的第n个参数,n=1,2,…9;
$* 当前脚本的所有参数(不包括程序本身);
$# 当前脚本的参数个数(不包括程序本身);
$? 令或程序执行完后的状态,返回0表示执行成功;
$$ 程序本身的PID号。
#!/bin/bash# 打印脚本名称
echo "Script name: $0"# 打印所有参数
echo "All arguments: $*"
echo "Arguments as array: $@"# 打印参数个数
echo "Number of arguments: $#"# 打印上一个命令的退出状态
echo "Last command exit status: $?"# 打印当前脚本的 PID
echo "Script PID: $$"# 打印每个参数
for i in "$@"; doecho "Argument $i"
done# 模拟一个命令执行
echo "This is a test command."
exit 42 # 模拟命令退出状态为 42

用户变量
在 Linux 系统中,用户变量通常指的是用户定义的环境变量,这些变量可以由用户自己设置,用于存储个人偏好、配置信息或用于程序运行时的参数。
用户变量可以通过以下几种方式设置:
-
临时变量:在当前终端会话中设置,只对当前会话有效。
export VARIABLE_NAME="value" -
持久变量:在用户的 shell 配置文件中设置,如
~/.bashrc、~/.bash_profile、~/.profile等,这样每次新的终端会话开始时,这些变量都会被加载。echo 'export VARIABLE_NAME="value"' >> ~/.bashrc source ~/.bashrc # 重新加载配置文件 -
局部变量:在脚本或程序中定义,只在这个脚本或程序的上下文中有效。
VARIABLE_NAME="value"
用户变量可以用于多种用途,例如:
- 指定程序的配置文件路径。
- 定义程序的运行参数。
- 存储用户的个人偏好设置,如编辑器、语言环境等。
- 用于脚本中的逻辑判断和流程控制。
一些常见的用户变量示例包括:
EDITOR:用户偏好的文本编辑器,如vim、nano等。BROWSER:用户偏好的网页浏览器。DISPLAY:用于 X Window 系统的显示环境变量。LANG和LC_ALL:用于设置语言和区域设置。XDG_CONFIG_HOME:用户配置文件的目录。XDG_DATA_HOME:用户数据文件的目录。
用户可以通过 env 命令查看当前会话中的所有环境变量,或者使用 printenv 命令查看特定的环境变量:
env
printenv VARIABLE_NAME
要修改或删除用户变量,可以使用 unset 命令:
unset VARIABLE_NAME
这些用户变量为 Linux 系统提供了灵活性和个性化的配置选项。
变量操作
声明变量:
variable_name="value"
读取变量:
echo $variable_name
修改变量:
variable_name="new_value"
删除变量:
unset variable_name
字符串操作:
1.获取字符串长度
echo ${#newString}
#!/bin/bash
#In variable assignment, there should be no spaces around the equal sign
string1="hello world!"
echo ${#string1}
2.拼接字符串:
variable_name="new_value"
new_string="$variable_name""additional_text"
实际上下面这种方式也是可行的
new_string=$variable_name"additional_text"
注意事项
避免歧义:虽然这种拼接方式有效,但在复杂的脚本中,为了提高可读性和避免歧义,建议使用双引号明确地包裹变量和字符串。
特殊字符处理:如果字符串字面量中包含特殊字符,使用双引号可以确保这些字符被正确处理。
3.截取字符串:
${variable_name:start:length}
# 从第0个字符开始截取,截取3个字符
echo ${variable_name:0:3}
#!/bin/bash
variable_name="new_value"
new_string=${variable_name:0:3}
echo $new_string
这个0-3的范围是左闭右开的:[0,3),所以输出为
new
缺省length
${variable_name:start}
截取会从索引start处,包含start,一直截取到字符串末尾。
#!/bin/bash
variable_name="newvalue"
new_string=${variable_name:3}
echo $new_string
输出为value
4.负索引
Shell也支持负索引,这意味着你可以从字符串的末尾开始计算位置。例如:
echo ${variable_name: -3}
#!/bin/bash
variable_name="new_value"
new_string=${variable_name: -3}
echo $new_string
这会从 variable_name 的末尾开始,向前截取3个字符,输出lue
使用#和%截取字符串的四种方式
${varible##*string} #从左向右截取最后一个string后的字符串
#!/bin/bash
variable="one_two_three_two_three_one"
new_string="${variable##*two}"
echo "$new_string" # 输出: "_three_one"
${varible#*string} #从左向右截取第一个string后的字符串
#!/bin/bash
variable="one_two_three_two_three_one"
new_string="${variable#*two}"
echo "$new_string" # 输出: "_three_two_three_one"
${varible%%string*} #从右向左截取最后一个string后的字符串
#!/bin/bash
variable="one_two_three_two_three_one"
new_string="${variable%%two*}"
echo "$new_string" # 输出: "one_"
${varible%string*} #从右向左截取第一个string后的字符串
#!/bin/bash
variable="one_two_three_two_three_one"
new_string="${variable%two*}"
echo "$new_string" # 输出: "one_two_three_"
5.默认值:
如果变量未设置或为空,你可以提供一个默认值:
echo ${variable_name:-default_value}
#!/bin/bash
variable=""
new_string="${variable:-"dsgsd"}"
echo "$new_string"
如果 variable_name 未设置或为空,将输出 default_value。
6.大小写转换:
参数扩展还允许你转换字符串的大小写:
echo ${variable_name,,} # 转换为小写
echo ${variable_name^^} # 转换为大写
echo ${variable_name,,^^} # 先转小写再转大写
#!/bin/bash
variable="HELLO WORLD!"
new_string="${variable,,}"
echo "$new_string"
new_string="${new_string^^}"
echo "$new_string"
new_string="${new_string,,}"
echo "$new_string"
new_string="${new_string,,^^}"
echo "$new_string"
替换字符串中的某个值:
new_string="${variable_name/old_value/new_value}"
示例
text="Hello World"
new_text="${text/World/Earth}"
echo $new_text
字符串运算符
等于 (=):
#用于比较两个字符串是否相等。
#通常在 [[ ]] 或 [ ] 测试中使用。
[[ "$str1" = "$str2" ]]
[ "$str1" = "$str2" ]不等于 (!= 或 <>):
#用于比较两个字符串是否不相等。
#在 [[ ]] 中使用 !=,在 [ ] 中使用 <>。
[[ "$str1" != "$str2" ]]
[ "$str1" != "$str2" ] # 错误,[ ] 不支持 !=,应使用 [ "$str1" != "$str2" ] 来避免解析错误
[ "$str1" <> "$str2" ]模式匹配 (== 或 =~):
#用于检查字符串是否符合特定的模式。
#在 [[ ]] 中使用 == 进行模式匹配,=~ 用于正则表达式匹配。
[[ "$str" == "pattern"* ]]
[[ "$str" =~ regex ]]大于 (>):
#用于按字典顺序比较两个字符串。
#通常在 [[ ]] 或 [ ] 测试中使用。
[[ "$str1" > "$str2" ]]
[ "$str1" > "$str2" ]小于 (<):
#用于按字典顺序比较两个字符串。
#通常在 [[ ]] 或 [ ] 测试中使用。
[[ "$str1" < "$str2" ]]
[ "$str1" < "$str2" ]长度检查 (-n 和 -z):
#用于检查字符串的长度。
#-n 检查字符串是否非空,-z 检查字符串是否为空。
[[ -n "$str" ]] # 字符串非空
[[ -z "$str" ]] # 字符串为空
数值操作:
算术扩展方法
增加数值:
((variable_name++))
减少数值:
((variable_name--))
计算数值:
variable_name=$(($variable_name + 1))
数值操作示例
#!/bin/bash# 定义一个变量并初始化为10
variable_name=10# 打印初始值
echo "Initial value: $variable_name" # 输出将会是 10# 增加数值
((variable_name++))
echo "After increment: $variable_name" # 输出将会是 11# 减少数值
((variable_name--))
echo "After decrement: $variable_name" # 输出将会是 10# 计算数值,将变量的值增加 5
variable_name=$(($variable_name + 5))
echo "After addition: $variable_name" # 输出将会是 15# 计算数值,将变量的值乘以 2
variable_name=$(($variable_name * 2))
echo "After multiplication: $variable_name" # 输出将会是 30# 计算数值,将变量的值除以 3
variable_name=$(($variable_name / 3))
echo "After division: $variable_name" # 输出将会是 10
expr命令方法
a=1
b=2
expr $a + $b
expr $a - $b
expr $a \* $b
expr $b / $a
expr $b % $a
请注意,在使用 expr 时,每个操作数和运算符之间需要有空格,并且某些运算符(如乘法 * 和除法 /)可能需要使用反斜杠 \ 进行转义。
在编写脚本时,推荐使用算术扩展 (( … )),因为它更直观、易于阅读,并且比 expr 更安全,因为它不需要担心某些字符的转义问题。
关系运算符
在Shell脚本中,关系运算符用于比较两个数值或字符串。
当条件为真时,返回 0(在Shell中,0 通常表示成功或真)。
当条件为假时,返回 1(非零值通常表示有错误或假)。
检测两个数是否相等:
if [ $a -eq $b ]; thenecho "a is equal to b"
fi
检测两个数是否不相等:
if [ $a -ne $b ]; thenecho "a is not equal to b"
fi
检测左边的数是否大于右边的:
if [ $a -gt $b ]; thenecho "a is greater than b"
fi
检测左边的数是否小于右边的:
if [ $a -lt $b ]; thenecho "a is less than b"
fi
检测左边的数是否大于等于右边的:
if [ $a -ge $b ]; thenecho "a is greater than or equal to b"
fi
检测左边的数是否小于等于右边的:
if [ $a -le $b ]; thenecho "a is less than or equal to b"
fi
在这些示例中,$a 和 $b 可以是数值变量。这些关系运算符通常用在 if、while、until 等条件语句中。
请注意,当使用这些运算符时,方括号 [ ] 内的表达式两侧需要有空格,否则Shell可能无法正确解析命令。
另外,这些运算符也可以用于字符串的比较,但字符串比较时要注意,它们是按照字典顺序进行比较的。如果需要字符串相等的比较,应使用 = 运算符,而字符串不等的比较则使用 != 运算符。
在编程和脚本编写中,布尔运算符和逻辑运算符都是用来进行条件判断和控制程序流程的重要工具。它们在功能上有所重叠,但用途和上下文有所不同。下面详细解释它们的区别:
布尔运算符
布尔运算符主要涉及逻辑真值(true)和假值(false),用于构造布尔表达式。这些运算符通常包括:
- 等于 (
==在某些语言中,如 Bash) 或 (=在其他语言如 C、Java 中) - 不等于 (
!=或<>) - 大于 (
>) - 小于 (
<) - 大于等于 (
>=) - 小于等于 (
<=)
这些运算符通常用于比较两个值,并根据比较结果返回布尔值(真或假)。它们在决策结构(如 if 语句)中非常有用。
逻辑运算符
逻辑运算符用于组合多个布尔表达式,以创建更复杂的条件。这些运算符包括:
- 逻辑与 (
&&在大多数编程语言中,包括 Bash) - 逻辑或 (
||在大多数编程语言中,包括 Bash) - 逻辑非 (
!)
逻辑运算符允许你根据多个条件的组合结果来控制程序的流程。例如,你可以使用逻辑与来要求两个条件同时为真时才执行某段代码。
区别
-
用途:
- 布尔运算符:用于比较两个值或变量,并根据比较结果返回一个布尔值。
- 逻辑运算符:用于组合多个布尔表达式,以便在单一表达式中评估多个条件。
-
操作对象:
- 布尔运算符:通常操作具体的数据值或变量。
- 逻辑运算符:操作的是布尔表达式的结果。
-
返回值:
- 布尔运算符:返回布尔值(真或假)。
- 逻辑运算符:也返回布尔值,但这个值是由多个布尔表达式通过逻辑运算得到的。
示例
在 Bash 脚本中,你可以这样使用它们:
# 布尔运算符示例
if [ $a -eq $b ]; thenecho "a is equal to b"
fi# 逻辑运算符示例
if [ $a -gt $b ] && [ $c -lt $d ]; thenecho "a is greater than b and c is less than d"
fiif [ $a -ne $b ] || [ $c -eq $d ]; thenecho "a is not equal to b or c is equal to d"
fiif [ $a -lt 10 ] && [ $a -gt 5 ]; thenecho "a is between 5 and 10"
fi
在这些示例中,-eq、-gt、-lt 是布尔运算符,用于比较数值。而 && 和 || 是逻辑运算符,用于组合多个条件。
理解这些运算符的区别对于编写逻辑清晰、易于维护的代码至关重要。
文件测试运算符
| 运算 | Shell中的实现 | 主要符号 |
|---|---|---|
| 检测文件是否是块设备文件 | [ -b $file ] | -b file |
| 检测文件是否是字符设备文件 | [ -c $file ] | -c file |
| 检测文件是否是目录 | [ -d $file ] | -d file |
| 检测文件是否是普通文件(既不是目录,也不是设备文件) | [ -f $file ] 返回 true | -f file |
| 检测文件是否设置了 SGID 位 | [ -g $file ] | -g file |
| 检测文件是否设置了粘着位(Sticky Bit) | [ -k $file ] | -k file |
| 检测文件是否是有名管道 | [ -p $file ] | -p file |
| 检测文件是否设置了 SUID 位 | [ -u $file ] | -u file |
| 检测文件是否可读 | [ -r $file ] | -r file |
| 检测文件是否可写 | [ -w $file ] | -w file |
| 检测文件是否可执行 | [ -x $file ] | -x file |
| 检测文件是否为空(文件大小是否大于0) | [ -s $file ] | -s file |
| 检测文件(包括目录)是否存在 | [ -e $file ] | -e file |
数组操作:
声明数组:
array_name=(element1 element2 element3)
读取数组元素:
echo ${array_name[0]} # 读取第一个元素
修改数组元素:
array_name[0]="new_element"
添加数组元素
array+=("new_element")
删除数组元素
unset array[1]
删除整个数组
a=(1 2 3 4 5 5)
unset a
获取数组长度:
echo ${#array_name[@]}
遍历数组
你可以使用 for 循环来遍历数组中的所有元素。
for element in "${array_name[@]}"; doecho $element
done
遍历数组示例
a=(1 2 3 4 5 6 7 8 7 9)
for element in "${a[@]}";doecho $element
done
需要注意的是数组的元素用空格分隔
合并数组
使用数组拼接
#!/bin/bash# 定义两个数组
array1=("element1" "element2" "element3")
array2=("element4" "element5")# 合并数组
merged_array=("${array1[@]}" "${array2[@]}")# 打印合并后的数组
echo "Merged Array: ${merged_array[@]}"
使用循环
#!/bin/bash# 定义两个数组
array1=("element1" "element2" "element3")
array2=("element4" "element5")# 创建一个新的数组,用于存储合并后的结果
merged_array=()# 将第一个数组的元素添加到新数组中
for element in "${array1[@]}"; domerged_array+=("$element")
done# 将第二个数组的元素添加到新数组中
for element in "${array2[@]}"; domerged_array+=("$element")
done
打印合并后的数组
echo "Merged Array: ${merged_array[@]}"
高级字符串处理:
使用case语句进行模式匹配:
case "$variable_name" inpattern1)echo "Matched pattern1";;pattern2)echo "Matched pattern2";;*)echo "No match";;
esac
case语句示例
#!/bin/bash# 假设我们有一个变量,存储了用户的输入
user_input="start"# 使用case语句来匹配不同的模式
case "$user_input" in# 如果用户输入是 "start",则执行以下命令start)echo "The process has started.";;# 如果用户输入是 "stop",则执行以下命令stop)echo "The process has stopped.";;# 如果用户输入是 "pause",则执行以下命令pause)echo "The process has been paused.";;# 如果用户输入是 "resume",则执行以下命令resume)echo "The process has been resumed.";;# 匹配任何其他值,执行以下命令*)echo "Invalid command.";;
esac
echo
在Shell脚本中,echo 命令有多种用途,主要用于输出文本、变量的值、命令的结果等。以下是一些常见的使用场景:
-
输出文本:
直接输出一段文本信息到终端。echo "Hello, World!" -
输出变量的值:
输出变量的内容。name="Kimi" echo "My name is $name." -
输出命令的输出:
使用命令替换($(command)或`command`)来输出命令的结果。echo "Current date: $(date)" -
格式化输出:
使用转义字符(如\n换行、\t制表符)来格式化输出。echo -e "First line.\nSecond line\tIndented." -
条件输出:
在条件语句中输出信息。if [ $USER == "root" ]; thenecho "You are the superuser." fi -
循环输出:
在循环中输出一系列值。for i in {1..5}; doecho "Number $i" done -
重定向输出到文件:
将输出保存到文件中。echo "This will be saved to a file." > file.txt -
使用
echo进行字符串操作:
echo可以用于字符串拼接。first="Hello" last="World" echo "${first}, ${last}!" -
输出错误信息:
在脚本中输出错误信息,通常用于调试或错误处理。echo "Error: Unable to process file." >&2 -
输出环境变量:
输出环境变量的值。echo "PATH: $PATH" -
输出数组:
输出数组的内容。array=("Apple" "Banana" "Cherry") echo "Fruits: ${array[*]}" -
使用
echo进行算术运算:
echo可以用于简单的算术运算。echo "Sum: $((3 + 5))"
相关文章:
shell脚本语法
shell脚本的变量 系统变量 系统变量是操作系统用来存储配置信息的变量,它们可以控制操作系统的行为和程序的运行环境。系统变量的种类和内容取决于操作系统的类型和版本。以下是一些常见的系统变量类别和它们可能包含的内容: 环境变量:这些…...
TCP 拥塞控制:一场网络数据的交通故事
从前有条“高速公路”,我们叫它互联网,而这条公路上的车辆,则是数据包。你可以把 TCP(传输控制协议)想象成一位交通警察,负责管理这些车辆的行驶速度,以防止交通堵塞——也就是网络拥塞。 第一…...
(黑马点评) 五、探店达人系列功能实现
5.1 发布和查看探店笔记 5.1.1 发布探店笔记 这块代码黑马已经完成了,在发布探店笔记界面,有两块内容是需要上传的。一是笔记内容,二是笔记配图。其中笔记配图部分黑马使用的是上传到本地前端服务器上面的。我我觉得可以将图片文件发布在阿里…...
SQLiteDatabase insert or replace数据不生效
在Android开发中,如果您在SQLite数据库中更新了数据,但重启应用后更新的数据不再生效,那么可能的原因有: 更新操作没有正确执行,可能是由于SQL语句错误或者数据库没有正确打开。 更新操作在事务中没有被正确提交。 更…...
基于Python实现一个浪漫烟花秀
为了实现一个类似烟花秀的效果,我们可以通过复杂的粒子系统来模拟烟花的升起、绽放和下落效果。以下是一个示例,旨在创建更为动态和逼真的烟花秀效果。 示例代码 这个代码示例将使用 matplotlib 和 numpy,并实现更丰富的视觉效果࿱…...
电气自动化入门03:安全用电
视频链接:2.1 电工知识:触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击:电流通过人体。 电伤:电流热效应…...
【深度学习】(2)--PyTorch框架认识
文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...
前端面试记录
js 1. 函数式编程 将计算过程视为一系列的函数调用,函数的输出完全由输入决定,不依赖于或改变程序的状态,使得函数式编程的代码更加可预测和易于理解。 函数式编程的三个核心概念:纯函数、高阶函数和柯里化。 高阶函数:函数可以作为参数传…...
裁员了,很严重,大家做好准备吧!
最近刷到这样一个故事: 一个网友在大厂当牛马接近10年,部门优秀员工,业绩一直很稳,没想到,今年公司引进AI降本增效,开始大幅裁员,有些部门一夜之间被连锅端! 上个月果然轮到他了&a…...
uniapp组件uni-datetime-picker选择年月后在ios上日期不显示
uniapp组件uni-datetime-picker选择年月后在ios上日期不显示 操作步骤: ios 选择年月 预期结果: 日期变为选择年月的日期 实际结果: 日期不显示 bug描述: uni-datetime-picker 2.2.22 ios点击年月选择后日期不显示 解决方案 …...
01_快速入门
读取数据 import pandas as pd# df pd.read_excel(https://xxxx/xxx//xx.xslx) # 读取网络数据 # df pd.read_excel(rd:\data\xx.xslx) # 读取本地文件 # 如果是csv文件,用read_csv()函数 df pd.read_csv(seaborn/iris.csv)查看数据 df.head() # 前5条记录 d…...
数据结构之分文件编译学生管理
list.h #ifndef LIST_H_ #define LIST_H_ #define MAX 30 typedef struct {int id;//学号char name[20];//姓名char major[20];//专业int age;//年龄 }student,*Pstudent;typedef struct {student data[MAX];//储存学生信息的数组int len;//统计学生个数 }list,*Plist;Plist c…...
TypeScript入门 (二)控制语句
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地…...
MVP 最简可行产品
MVP(最小可行产品)是一种产品开发策略,其主要目的是用最少的时间和资源,开发一个包含最基本必要功能的产品。这样做的目的是能够以最小的成本进入市场,获取用户反馈,再根据反馈逐步优化产品。 MVP是什么 …...
数仓工具:datax
datax可以理解为sqoop的优化版, 速度比sqoop快 因为sqoop底层是map任务,而datax底层是基于内存 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定…...
CSS传统布局方法(补充)——WEB开发系列37
开发技术不断演进,布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局,再到今天的弹性盒(Flexbox)与 CSS Grid 网格布局,每一种布局方式都有其独特的背景和解决特定问题的优势。 一、CSS Grid 出…...
【系统架构设计师】软件架构的风格(经典习题)
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3~4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15~16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24~…...
网页打开时,下载的文件fetcht类型?有什么作用?
fetch API是一种用于向服务器发送请求并获取响应的现代Web API。它支持获取各种类型的数据,包括文本、JSON、图像和文件等。fetch API的主要优势之一是支持流式传输和取消请求,这使得处理大型数据集和长时间运行的操作变得更加简单和可靠。此外&…...
作为HR,如何考察候选人的专业知识与技能
这是严肃的话题,如何考察候选人的专业知识和技能。HR招聘是一个让我们既爱又恨的过程。爱的是,我们有机会遇到各种各样的人才;恨的是,要从茫茫人海中找到那个“对的人”简直比找一根针在干草堆里还难。 本系列的文章,…...
阻止冒泡事件
每一div都有一个切换事件 div里包括【复制】事件, 点击【复制按钮】,会触发【切换事件】 因为冒泡 在 Vue 3 中,阻止 click 事件冒泡可以使用以下常规方法: 1 事件修饰符:Vue 3 中提供了多种事件修饰符,…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
