Shell编程规范与变量使用

news2025/1/23 9:41:59

目录

一、Shell编程概述

1.Shell脚本的概念

2.Shell脚本的应用场景

3.Shell的作用

4.Linux系统中支持的shell

二、Shell编程规范

1.编写Shell脚本规范步骤

2.Shell脚本执行方法

(1)以绝对路径执行(需要赋予脚本文件执行权限)

(2)指定shell解释器运行脚本(不需要赋予脚本文件执行权限)

(3)source 脚本文件 或 . 脚本文件 (会使用当前shell环境运行)

3.脚本错误种类

4.管道符与重定向的使用

标准输入与标准输出

(1)管道符 “ | ”

(2)重定向

三、Shell变量

1.变量的作用

2.变量命名要求

3.常用命名格式

4.Shell变量的类型

5.自定义变量的方法

(1)直接赋值

(2)键盘输入为变量赋值

6.删除变量

7.自定义变量作用范围

8.自定义变量永久启用

9.变量的算术运算

10.环境变量

11.只读变量

12.位置变量

13.预定义变量


一、Shell编程概述

1.Shell脚本的概念

将要执行的命令按顺序保存到一个文本文件,给该文件可执行权限,可结合各种shell控制语句以完成更复杂的操作。

2.Shell脚本的应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

  • ......

3.Shell的作用

介于系统内核与用户之间,负责解释命令行

img编辑

4.Linux系统中支持的shell

[root@localhost1 ~]#cat /etc/shells /bin/sh /bin/bash

/sbin/nologin /usr/bin/sh /usr/bin/bash

/usr/sbin/nologin /bin/tcsh /bin/csh

二、Shell编程规范

1.编写Shell脚本规范步骤

  • 创建脚本文件:首先创建一个.sh 为后缀的文件

  • 脚本申明解释器 :开头 #!/bin/bash 表示此行以下的代码语句是通过 /bin/bash 程序来解释的#!/bin/bash为默认解释器,还有其它类型的解释器,如# !/usr/bin/python,#! /usr/bin/expect

  • 注释信息:# 开头的语句为注释信息,可以在代码编写前简介此脚本(如时间、作者、作用等信息)

  • 脚本代码段:开发者使用shell编写的脚本,能够实现某个特定的任务

//编写 first.sh 脚本文件
[root@localhost1 ~]#vim first.sh
#!/bin/bash
#这是我的第一个脚本文件,用于输出 hello world
echo "hello world"

 

2.Shell脚本执行方法

(1)以绝对路径执行(需要赋予脚本文件执行权限)

​
[root@localhost1 ~]#chmod a+x first.sh
​
[root@localhost1 ~]#/root/first.sh
hello world


​

(2)指定shell解释器运行脚本(不需要赋予脚本文件执行权限)

[root@localhost1 ~]#bash first.sh
hello world
​
[root@localhost1 ~]#sh first.sh
hello world

(3)source 脚本文件 或 . 脚本文件 (会使用当前shell环境运行)

[root@localhost1 ~]#source first.sh
hello world
​
[root@localhost1 ~]#. first.sh
hello world

3.脚本错误种类

  • 命令错误:命令出错不会影响接下来的命令继续

  • 语法错误:会影响接下来的命令继续

  • 逻辑错误:逻辑有问题需要重新编写

检查代码正确性

[root@localhost1 ~]# bash -n 脚本名称 //检查语法错误

-x 脚本名称 //检查逻辑错误

4.管道符与重定向的使用

标准输入与标准输出

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。

(1)管道符 “ | ”

作用:将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象)

同一行命令中可以使用多个管道符

​
//过滤80端口的信息
[root@localhost1 ~]#ss -nltp | grep 80
LISTEN     0      128       [::]:80                    [::]:*                   users:(("httpd",pid=4308,fd=4),("httpd",pid=4307,fd=4),("httpd",pid=4306,fd=4),("httpd",pid=4305,fd=4),("httpd",pid=4304,fd=4),("httpd",pid=4303,fd=4))
​
//统计系统进程数(需要-1)
[root@localhost1 ~]#ps aux |wc -l
240
​
//统计/etc/下以.conf结尾的文件数量
[root@localhost1 ~]#find /etc/ -name *.conf -type f |wc -l
392


​

(2)重定向

类型操作符作用
重定向输入<从指定文件读取数据
重定向输出>将标准输出结果保存到指定的文件,并且覆盖原有文件
重定向追加>>将标准输出追加到保存的文件的尾部
标准错误输出2>将错误信息保存到指定文件,并且覆盖原有文件
标准错误追加2>>将错误信息追加到指定文件的末行
混合输出&> 结尾添加2>&1将标准输出,标准错误输出一并保存到指定文件,覆盖原有内容
混合追加&>>将标准输出,标准错误输出一并追加保存到指定文件末行
​
//将123abc重定向输出到zspasswd.txt文件中
[root@localhost1 ~]#echo "123abc" > zspasswd.txt
​
//将zspasswd.txt中的内容重定向输入到前一个命令的标准输入中(首先关闭selinux,可以更改密码)
[root@localhost1 ~]#setenforce 0
[root@localhost1 ~]#passwd --stdin zhangsan < zspasswd.txt
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
​
//将1234567890 重定向追加到zspasswd.txt文件中
[root@localhost1 ~]#echo 1234567890 >> zspasswd.txt
[root@localhost1 ~]#cat zspasswd.txt
123abc
1234567890
​
//将标准错误输出重定向覆盖到zspasswd.txt文件中
[root@localhost1 ~]#ausdbcabuewu 2> zspasswd.txt  --输入乱码,使系统显示标准错误输出,在重定向覆盖此文件
[root@localhost1 ~]#cat zspasswd.txt
bash: ausdbcabuewu: 未找到命令...


​

三、Shell变量

1.变量的作用

变量是用来临时保存数据的,并且该数据时可以变化的,任何一个语言都离不开变量,如果某个内容需要多次使用并且会重复出现,这样就可以使用变量了,如果需要修改直接修改变量就可以了。

2.变量命名要求

  • 区分大小写

  • 只能以字母或下划线“_”开头

  • 命名只能使用字母、数字和下划线“_”组成

3.常用命名格式

  • 驼峰:FirstName

  • 小驼峰:firstName

  • 下划线:first_name

4.Shell变量的类型

  • 自定义变量:由用户自己定义,修改和使用

  • 特殊变量:环境变量、只读变量、位置变量、预定义变量

5.自定义变量的方法

(1)直接赋值

[root@localhost ~]# 变量名=变量值

注: 如果定义变量值中间有空格需要用单、双引号引起来;

两边不可以有空格;

​
[root@localhost1 ~]#a=123
[root@localhost1 ~]#echo $a
123
​
[root@localhost1 ~]#A=456
[root@localhost1 ~]#echo $A
456
​
[root@localhost1 ~]#test='hello world'
[root@localhost1 ~]#echo $test
hello world


​

赋值时使用引号的效果

[root@localhost ~]# 变量名="xxxx" // 双引号——允许通过$符号引用其他变量值

变量名='xxxx' //单引号——禁止引用其他变量, $ 原样显示

变量名=xxxx //反撇号——命令替换,提取命令执行后的输出结果

命令和$(命令)作用相同

//双引号效果
[root@localhost1 ~]#A=456
[root@localhost1 ~]#AA="$A"
[root@localhost1 ~]#echo $AA
456
​
//单引号效果
[root@localhost1 ~]#B='$b'
[root@localhost1 ~]#echo $B
$b
​
//反撇号效果
[root@localhost1 ~]#ls=`ls`
[root@localhost1 ~]#echo $ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面

(2)键盘输入为变量赋值

[root@localhost ~]# read 变量名 // read 变量名(没有提升信息)继续输入变量值即可赋值

-p “显示提示信息” // 可追加输出需要显示的提示信息

//为 MyName 赋值(无提示信息)
[root@localhost1 ~]#read MyName
hhh
[root@localhost1 ~]#echo $MyName
hhh
​
//为 YourName 赋值(有提示信息)
[root@localhost1 ~]#read -p "请输入你的名字:" YourName
请输入你的名字:xxx
[root@localhost1 ~]#echo $YourName
xxx

6.删除变量

unset 变量名

[root@localhost1 ~]#A=123
[root@localhost1 ~]#echo $A
123
​
//删除变量
[root@localhost1 ~]#unset A
[root@localhost1 ~]#echo $A

7.自定义变量作用范围

默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。

[root@localhost1 ~]# export 变量名

8.自定义变量永久启用

在/etc/profile(全局配置文件)中添加 export 变量名

9.变量的算术运算

整数变量的算术运算(Shell 默认只支持整数运算

算术运算符含义
+
-
*(使用expr 时,乘需要使用 * )
/
%取余

使用整数变量的算术运算赋值

  • 变量=$((数值或变量1 运算符 数值或变量2))

  • 变量=$[数值或变量1 运算符 数值或变量1]

  • 变量=$(expr 数值或变量1 运算符 数值或变量2)

  • let 变量=数值或变量1运算符数值或变量2 (数值与运算符之间不需要空格)

[root@localhost1 ~]#AB=$(($a + $b))
[root@localhost1 ~]#echo $AB
30
​
[root@localhost1 ~]#AB=$[100 / $b]
[root@localhost1 ~]#echo $AB
5
​
[root@localhost1 ~]#AB=$(expr $a \* 2)
[root@localhost1 ~]#echo $AB
20
​
[root@localhost1 ~]#let AB=99%$b
[root@localhost1 ~]#echo $AB
19

10.环境变量

[root@localhost1 ~]#env //使用 env 命令可以查看到当前工作环境下的环境变量

环境变量名解释
USER当前用户
HOME当前用户家目录
LANG当前环境使用的语言和字符集
SHELL当前环境使用的shell
PATH当前环境可执行程序的搜索路径
[root@localhost1 ~]#env
XDG_SESSION_ID=6
HOSTNAME=localhost1
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.116.1 53256 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/2
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=192.168.116.1 53256 192.168.116.10 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=localhost:1

11.只读变量

定义只读变量无法手动修改和删除,但由于自定义变量是临时的,重启后便不存在了。

[root@localhost1 ~]# readonly 变量=变量值 //自定义只读变量

[root@localhost1 ~]# readonly -p //查看所有只读变量

//自定义只读变量
[root@localhost1 ~]#readonly x=123123
​
//查看所有只读变量
[root@localhost1 ~]#readonly -p
declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d"
declare -ar BASH_REMATCH='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -ir EUID="0"
declare -ir PPID="4550"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
declare -r x="123123"

12.位置变量

Shell脚本执行命令操作时会带有很多变量$n,文件中执行的第一变量为$1,n数值依次递增,用于代表某个位置的变量。

前9个位置变量可以用$1、$2、... 、$9 表示 ,第10个及以后的位置变量 $ 后跟的数值必须加{},如 ${28} 代表第28个位置变量

//编写脚本用于输出位置$1~$10变量
[root@localhost1 ~]#vim locate.sh
#!/bin/bash
echo -n $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
​
[root@localhost1 ~]#source locate.sh 1 3 5 7 9 11 13 15 17 19
1 3 5 7 9 11 13 15 17 19

13.预定义变量

预定义变量含义
$0代表脚本文件本身
$#表示脚本文件中变量参数的个数
$?表示前一条命令执行后返回的状态码,返回0代表执行成功;返回任何非0值代表执行异常。常被用于shell脚本return返回的退储值。
$@把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4 ..."
$*把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表“$1” “$2” “$3” “$4” ...

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

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

相关文章

stable diffusion webui 文生图(txt2img)api接口调用(使用C#)

唠嗑 本次将跟读者讲一下如何通过C#请求sd webui api 【txt2img】接口&#xff0c;如果读者觉得文章有用&#xff0c;请给【点个赞】吧&#xff0c;有问题可以评论区提问。 实战 1.配置api启用参数 启动webui时&#xff0c;需加上【–api】 命令以保证api接口可以被调用。如…

Shell脚本文本三剑客之awk编辑器

目录 一、sed编辑器简介 二、sed工作流程 三、sed命令 四、sed命令的使用 1.sed打印文件内容&#xff08;p&#xff09; &#xff08;1&#xff09;打印文件所有行 &#xff08;2&#xff09;打印文件指定行 2.sed增加、插入、替换行&#xff08;a、i、c&#xff09; …

Shell脚本之正则表达式详解

目录 一、正则表达式简介 二、正则表达式的组成 三、正则表达式分类 四、正则表达式字符用法 1.基础正则表达式常见元字符&#xff08;支持grep、egrep、sed、awk&#xff09; 2. 扩展正则表达式元字符&#xff08;支持&#xff1a;egrep、grep -E、awk、sed -r&#xff…

C语言之数据在内存中的存储(2)

本章重点&#xff1a;浮点数在内存中的存储 浮点数&#xff1a;数学中的小数 eg.123.45 12.345*10^1 1.2345*10^2 1E10&#xff1a;1.0*10^10 整型家族的类型&#xff0c;表示范围&#xff1a;limits.h 浮点数&#xff1a;float.h 大家可以猜测一下打印的这四个数字…

Unity中动画系统的性能优化

降低骨骼数&#xff0c;减少面片数。 方法&#xff1a; 1.勾选Optimize Game Objects&#xff0c;以剔除骨骼节点对应的Transform节点 2.开启多线程渲染选项 主要影响的函数调用开销&#xff0c;可以在profiler中查看&#xff1a; Animators.Update MeshSkinning.Update C…

【TCP/IP】多进程服务器的实现(进阶) - 信号处理及signal、sigaction函数

目录 信号 signal函数 sigaction函数 尝试用信号来处理僵尸进程 我们在之前学习了如何处理“僵尸进程”&#xff0c;但也会有疑问&#xff1a;调用wait和waitpid函数时我们关注的始终是在子进程上&#xff0c;那么父进程上的管控&#xff08;对于子进程&#xff09;该如何实…

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数&#xff1a; void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…

chatgpt赋能python:Python如何创建新项目

Python如何创建新项目 Python已经成为了全球最受欢迎的编程语言之一。如果您是一个有经验的Python工程师&#xff0c;您可能已经知道如何在命令行上创建新项目。但是&#xff0c;如果您是一个新手或初学者&#xff0c;您可能需要一些指导来开始创建新的项目。在本篇文章中&…

Vue中如何进行样式绑定?

Vue中如何进行样式绑定&#xff1f; 在Vue中&#xff0c;我们可以很方便地进行样式绑定。样式绑定是将CSS样式与Vue组件中的数据进行关联的一种技术。通过样式绑定&#xff0c;我们可以根据组件的状态动态地修改其外观。本文将介绍Vue中的样式绑定&#xff0c;包括类绑定、内联…

chatgpt赋能python:Python如何进行升序排列?

Python如何进行升序排列&#xff1f; Python是一门广泛应用于Web开发、数据科学、人工智能、机器学习等领域的编程语言。在这个快速发展的世界中&#xff0c;如何高效地排序数据是非常重要的。本文将介绍Python中如何进行升序排序。 基本排序方法 Python提供了一个内置函数s…

Vue 中的列表渲染

Vue 中的列表渲染 在 Vue 中&#xff0c;列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表&#xff0c;从而实现数据的展示和交互。在本文中&#xff0c;我们将探讨 Vue 中的列表渲染的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理…

【模块三:职业成长】38|能力维度三:如何提升解决跨领域冲突的能力?

你好&#xff0c;我是郭东白。今天我们来讨论架构师核心能力的第三个层次——解决跨领域冲突。 上节课我们讲了从程序员到兼职架构师的跨越&#xff0c;也就是如何搭建解决横向问题的能力。 不过&#xff0c;在兼职架构师这个角色中&#xff0c;架构能力是一个加分项&#xff…

chatgpt赋能python:如何使用Python升序排列一个列表?

如何使用Python升序排列一个列表&#xff1f; 在Python编程中&#xff0c;我们经常需要对列表进行排序。列表排序是一种常见的操作&#xff0c;可以帮助我们对数据进行分析和管理。在这篇文章中&#xff0c;我们将学习如何使用Python对一个列表进行升序排列。 什么是升序排列…

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP&#xff08;Network Time Protocol&#xff09;网络时间协议&#xff0c;是用来使计算机时间同步的一种协议&#xff0c;它可以使计算机对其服务器或时钟源做同步…

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题&#xff1a; 数字.数字. 文字 三级标题&#xff1a;数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序&#xff0c;逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…

shell脚本语句控制命令(exit、break、continue)

一、exit exit用于直接退出shell脚本程序并返回状态码&#xff08;状态码可在执行命令执行后用$&#xff1f;查看&#xff09; 如果不在exit后添加状态码&#xff0c;会默认返回最后一条命令执行后的状态码 exit 加状态码&#xff0c;代表退出程序并向系统指定状态码 状态码…

基于zinx的go tcp通信案例

基于zinx的go tcp通信示例 一、zinx简介:(https://gitee.com/Aceld/zinx/) Zinx是一个基于Golang的轻量级tcp服务框架&#xff0c;根据官方的定位&#xff0c;zinx是在游戏领域或者其他长链接的领域的轻量级企业框架&#xff0c;其使用简单&#xff0c;性能高效&#xff0c;能…

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C#)

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK和图像时间戳的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK获取时间戳的…

Vue中如何进行条件渲染

Vue中如何进行条件渲染 Vue是一款流行的前端框架&#xff0c;它提供了许多方便的功能来处理数据和视图。其中一个非常有用的功能是条件渲染。条件渲染可以根据条件来控制视图的显示和隐藏。在本文中&#xff0c;我们将介绍Vue中如何进行条件渲染&#xff0c;并提供一些示例代码…

异常数据检测 | Python实现k-means时间序列异常数据检测

文章目录 文章概述模型描述源码分享学习小结文章概述 异常数据检测 | Python实现k-means时间序列异常数据检测 模型描述 k-means是一种广泛使用的聚类算法。它创建了k个具有相似特性的数据组。不属于这些组的数据实例可能会被标记为异常。在我们开始k-means聚类之前,我们使用e…