Shell基础知识汇总

news2025/2/27 2:47:28

一、变量

1.变量的类型

变量根据作用范围的大小主要分为局部变量全局变量环境变量
(1)局部变量:在Shell脚本中的函数内显示使用local关键字定义的变量。其作用域局限于函数内,当local变量名与global变量名同名时,使用的是local关键字定义的局部变量。
(2)全局变量:一般在Shell脚本的函数外定义,当然也可以在函数内不使用local关键字申明来定义全局变量。 全局变量仅在当前Shell脚本中有效,其他Shell脚本进程不能访问,其作用域从全局变量定义的位置(如果是在函数中定义的全局变量则是从函数被调用时执行变量定义的地方)开始,到脚本结束或被显示删除的地方为止。

name="tom"     ## 函数外定义的全局变量name
weight="50kg"     ## 函数外定义的全局变量weight

function test(){
  local name="jack"   ## 函数内定义的局部变量name
  sex="man"    ## 函数内定义的全局变量sex
  age=25   ## 函数内定义的全局变量age
  local age=18    ## 函数内定义的局部变量age
  age=20    ## 这里其实是重新给local定义的局部变量age重新赋值
  echo "test() name is ${name}"   ## 对应6中的结果,函数内部定义了局部变量name,所以获取到的是函数内定义的局部变量name的值
  echo "test() weight is ${weight}"  ## 对应7中的结果,函数内没有定义局部变量weight,所以使用的是全局变量weight的值
  echo "test() age is ${age}"  ## 对应8中的结果,获取到的是最新赋值后的局部变量值
}
function test2(){
  age=30    ## 函数内定义的全局变量age
  echo "test2() get sex is: ${sex}"
}
echo "name is ${name}"  ## 对应1中的结果拿取的是函数外定义的全局变量name的值
echo "weight is ${weight}"  ## 对应2中的结果拿取的是函数外定义的全局变量weight的值
echo "age is: ${age}"  ## 对应3中的结果,由于此时两个函数都未被调用,所以获取不到函数中定义的age变量的值
test2  ## 对应4中的结果,由于全局变量sex是在test函数中定义的,此时test函数未被调用,所以获取不到sex变量的值
echo "age is: ${age}"   ## 对应5中的结果,由于在test2函数执行后会创建一个全局变量age,所以此时获取到的变量age的值为30
test   
echo "age is: ${age}"   ## 对应9中的结果,由于test方法执行后重新创建一个全局变量age并赋值为25,所以此处获取到的是重新创建的全局变量age的值
test2   ## 对应10中的结果,由于test函数执行后会创建一个全局变量sex,所以此时再次执行后就可以获取到test函数中创建的全局变量sex的值
echo "age is: ${age}"   ## 对应11中的结果,test2函数执行后会重新创建一个值为30的全局变量age,此时再次获取到的是新创建的age的值

在这里插入图片描述
(3)环境变量:可以使用export命令行声明,这种属于临时环境变量,只在当前Shell会话中生效,关闭当前Shell会话后失效。永久环境变量需要修改/etc/profile配置文件,在该文件中定义的变量永久生效。

## 定义一个临时环境变量
export name=tom

## 定义一个永久环境变量
vim /etc/profile
## 进入编辑模式后添加一个想要设置的环境变量后保存退出
world='hello'
## 使用下面命令刷新/etc/profile文件,否则不会立即生效
source /etc/profile

在这里插入图片描述

2.特殊变量

  1. env:查看系统当前所有的环境变量。
    在这里插入图片描述
  2. 只读变量:只可查看,不能更改,也不能取消,只能重启后系统自动取消。
    在这里插入图片描述
  3. 位置变量:使用 $1,$2,$3 … ${10}, ${11} …表示,10以后的数字全部用大括号{}括起来,$数字表示脚本文件后跟的第几个参数。
    在这里插入图片描述在这里插入图片描述
  4. 预定义变量:
    (1)$0:代表文件本身。
    (2)$?:代表上一条命令的结果返回的值,命令执行成功返回0值;失败返回非0值 , return 退出函数时获取的返回值(0-255,超过部分%256取余)。
    (3)$#:代表传递到脚本的参数个数。
    (4)$@:与$*相同,但是使用时加引号,并在引号中返回每个参数(结果类似:‘1’ ‘2’ ‘3’)。
    (5)$*:代表以一个单字符串显示所有向脚本传递的参数(结果类似:‘1 2 3’)。
    (6)$$:代表脚本运行的当前进程ID号。
    (7)$!:代表后台运行的最后一个进程的ID号。

3.删除变量

使用 unset 命令可以删除变量,删除变量后该变量将无法再被使用,unset 命令不能删除只读变量。
在这里插入图片描述

4.使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

name="Tom"
echo $name
echo ${name}

二、字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
(1) 单引号:

str='hello world'
  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

(2)双引号

name='Tom'
str="Hello, I am \"$name\"! \n"
  • 双引号里可以有变量;
  • 双引号里可以出现转义字符。

(3)字符串拼接:下面三种方式输出结果是一样的。

name='Tom'
# 使用双引号拼接
str="hello, "$name" !"
str1="hello, ${name} !"

# 使用单引号拼接
str3='hello, '$name' !'

(4)获取字符串长度

str="abcde"
echo ${#str}   # 输出5

(5)提取子字符串

str="hello world"
echo ${str:1:4} # 输出 ello

(6)查找子字符串

str="hello world"
echo `expr index "$str" d`  # 输出 11

三、数组

(1)数组的定义:用括号来表示数组,数组元素用"空格"符号分割开,数组元素的下标由 0 开始编号。下标可以是整数或算术表达式,其值应大于或等于 0,可以不使用连续的下标,而且下标的范围没有限制。

array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)

(2)读取数组:获取数组中的元素需要利用下标。

array=(1 2 3 4)
# 获取数组中第二个元素
num=${array[1]}

# 获取数组中所有的元素
num=${array[@]}  或者 num=${array[*]}

(3)获取数组的长度

# 取得数组元素的个数
length=${#array[@]}   或者  length=${#array[*]}

# 如果数组下标对应的是一个字符串的话,取得数组中该单个字符串的长度
lengthn=${#array[n]}

四、基本运算符

Shell支持多种运算符,主要包括:算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。

  1. 算数运算符:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用,主要用于数字间的算术运算。常用的算术运算符有:+(加)-(减)*(乘)/(除)%(取余)=(赋值)==(等于)!=(不等于)
num=`expr 2 + 2`
num=`expr 2 \* 2`
注意:
1.表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
2.完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号
3.乘号(*)前边必须加反斜杠(\)才能实现乘法运算,如果是在 MAC 中 shell 的 expr 语法是:$((表达式)),
此处表达式中的 "*" 不需要转义符号 "\" 
  1. 关系运算符:关系运算符只支持整数,不支持小数和字符串,除非字符串的值是数字,主要用于两个整数大小的比较。常用的关系运算符有:-eq(等于)-ne(不等于)-gt(大于)-lt(小于)-ge(大于等于)-le(小于等于)==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于)
a=2
b=5
注意:
1.使用[]或者[[]]时,变量与[]或者[[]]之间必须要有空格隔开。
if [ $a -lt $b ]
if [[ $a -lt $b ]]
2.使用(()),变量与(())之间不需要空格隔开,且不能使用英文表示的运算符
if (($a<$b))
if (($a>=$b))
3.使用[]且不使用英文代表的运算符时,><前面需要使用转义符\,防止当作重定向符使用,使用[[]](())不需要转义
if [ $a \< $b ]
if [[ $a < $b ]]
if (($a<$b))
4.使用英文表示的关系运算符时,运算符与变量之间需要空格隔开,使用符号表示的关系运算符时,
运算符与变量之间最好不要使用空格隔开
if [[ $a <= $b ]]  ## 会报错
if [[ $a<=$b ]]
if (($a<=$b))
  1. 布尔运算符:主要用于判断表达式最终的真假。常用的布尔运算符有:-a(与)-o(或)!(非)
a=2
b=2
if ! [ $a -gt $b ]
if ! [ $a \> $b ]
if ! [[ $a -gt $b ]]
if [ $a -lt 20 -a $b -gt 10 ]
if [ $a -lt 30 -o $b -gt 10 ]
注意:
1.使用!运算符时需要与[]之间保持一个空格隔开。
2.!可以在[ ][[ ]]中使用,但不可以在(( ))中使用。
3.使用-a或者-o时,必须使用[]
  1. 逻辑运算符:逻辑运算符与布尔运算符非常相似,最终得到的都是整个表达式的真假,两者之间的区别主要是布尔运算符两边的表达式都是执行,而逻辑运算符具有短路的功能,当左边的表达式成立后就不会再去执行右边的表达式。常用的逻辑运算符有:&&(与)||(或)
a=5
b=15
if [[ $a -lt 10 && $b -gt 10 ]]  ## 逻辑与,如果左边为真,则继续判断右边表达式的真假,如果左边为假,则整个表达式最终结果为假,就没必要再去判断右边表达式的真假
if [[ $a -lt 10 || $b -gt 10 ]]  ## 逻辑或,如果左边为真,则整个表达式最终结果即为真,也就没必要再去判断右边表达式的真假,如果左边为假,还需要继续判断右边的表达式的真假
注意:
1.逻辑运算符必须在[[ ]](( ))中才有效,否则报错;
  1. 字符串运算符:主要用于比较字符串的内容。常用的字符串有:=(相等)!=(不相等)-z(检测字符串长度是否为0)-n(检测字符串长度是否不为 0)$(检测字符串是否不为空)
    注意:
a="abc"
b="efg"
if [ $a = $b ]
if [ $a != $b ]
if [ -z $a ]
if [ -n "$a" ]
if [ $a ]
  1. 文件测试运算符:主要用于检测 Unix 文件的各种属性。
file="/root/test.sh"
1.-b检测文件是否是块设备文件,如果是,则返回 true。
if [ -b $file ]
2.-c检测文件是否是字符设备文件,如果是,则返回 true。
if [ -c $file ]
3.-d检测文件是否是目录,如果是,则返回 true。
if [ -d $file ]
4.-f检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
if [ -f $file ]
5.-r检测文件是否可读,如果是,则返回 true。
if [ -r $file ]
1.-w检测文件是否可写,如果是,则返回 true。
if [ -w $file ]
1.-x检测文件是否可执行,如果是,则返回 true。
if [ -x $file ]
1.-s检测文件是否为空(文件大小是否大于0),不为空返回 true。
if [ -s $file ]
1.-e检测文件(包括目录)是否存在,如果是,则返回 true。
if [ -e $file ] 

五、流程控制

  1. if 条件语句
if [ $a == $b ]
then
   ...
elif [ $a -gt $b ]
then
   ...
else
   ...
fi
或者写成一行
if [ "$a" -gt "$b" ]; then ...; fi
如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 ><
if (( $a > $b )); then
    ...
fi
  1. case in 条件语句
case in 语句跟 if 语句类似,也是一种条件选择语句,当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了
case expression in
    pattern1)
        ...
        ;;
    pattern2)
        ...
        ;;
    pattern3)
        ...
        ;;
    ……
    *)
        ...
esac
1.expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,
只要能够得到 expression 的值就可以。
2.pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。
3.case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配,匹配成功就执行后面对应的所有语句
(该语句可以有一条,也可以有多条),直到遇见双分号 ;; 结束,跳出整个 case 语句。
4. case in 类似Java的 switch ... case 语句,而 ;; 类似其中的break跳出循环的作用,*) 类似其中的 default起到托底作用。
5.最后的 *) 部分可以没有,最后的 *) 部分中的 ;; 可以写也可以不写,但是其他分支的 ;; 必须要写。
  1. for 循环
1.for 循环中的 exp1(初始化语句)、exp2(判断条件)和 exp3(自增或自减)都是可选项,都可以省略(但分号;必须保留)
for((exp1; exp2; exp3))
do
    ...
done
例1. 计算从 1 加到 100 的和
for ((i=1; i<=100; i++))
do
    ((sum += i))
done

2.for in 循环,每次循环都会从list中取出一个值赋给变量 num,然后进入循环体(do 和 done 之间的部分),
执行循环体中的操作。直到取完list中的所有值,循环就结束了。其中list的形式有多种,你可以直接给出具体的一系列值,
也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符。
for num in list
do
    ...
done
例2. 计算从 1 加到 100 的和
sum=0
for n in {1..100}
do
    ((sum+=n))
done
或者写成一行
for n in {1..100}; do ((sum+=n)); done;
  1. while 循环
while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。
while condition
do
    command
done
例1.计算从 1 加到 100 的和
i=1
sum=0
while ((i <= 100))
do
    ((sum += i))
    ((i++))
done
例2.实现无限循环
while true
do
    command
done
或者
while :
do
    command
done
  1. until 循环
ntil 循环与 while 循环在处理方式上刚好相反,循环执行一系列命令直至条件为 true 时停止
until condition
do
    command
done
例1.计算从 1 加到 100 的和
i=1
sum=0
until ((i > 100))
do
    ((sum += i))
    ((i++))
done
  1. break和continue跳出循环
Shell 也是通过 breakcontinue 两个关键字来跳出循环,和Java中的功能是完全一样的,两者的区别跟Java的也是一样的。
breakcontinue 的区别在于 break 是跳出整个循环,而 continue 只是跳出当前循环。
例1. 不断的计算100除以输入的数的结果,直到当输入的值为0时退出循环
num=100
while read n; do
    if((n==0)); then
        echo "can not input ${n}"
        break
    else
        result=`expr $num / $n`
        echo "the result is: ${result}"
    fi
done
例2. 不断的计算100除以输入的数的结果,当输入的值为0时,输出一个提示“请输入任意非0的数字”
while read n; do
    if((n==0)); then
        echo "please input not ${n} number"
        continue
    else
        result=`expr $num / $n`
        echo "the result is: ${result}"
    fi
done

六、Shell 函数

  1. 函数的定义
shell中函数标准的定义格式如下:
function name() {
    statements
    [return value]
}
也可以不写 function 关键字:
name() {
    statements
    [return value]
}
如果写了 function 关键字,也可以省略函数名后面的小括号:
function name {
    statements
    [return value]
}
注意:
1.return value 表示函数的返回值,value 的值是 (0-255之间的任意数,当然也可以不写 return value,
这时会将最后一条命令运行结果,作为返回值。
2.方法的()中没有参数的定义,这个跟Java的方法参数定义不太一样,shell的参数是在调用函数的时候直接写在函数后面的。
  1. 函数的调用
    所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可。如果传递参数,那么多个参数之间以空格分隔。
## 定义一个函数
function name(){
	echo "初始化的name为:TOM !"
    echo "接收第一个name参数为 $1 !"
    echo "接收第二个name参数为 $2 !"
    echo "接收的参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
    return $#
}
## 不传参调用函数
echo "=============first use with no param=============="
name
## 传参调用函数
echo "=============second use with param================"
name Tom Jack
## 输出函数返回结果
echo "the function result is:$?"

在这里插入图片描述

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

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

相关文章

激活函数高频面试题集合

激活函数激活函数的作用是什么&#xff1f;常用的激活函数Relu引入Relu的原因Relu顺序relu在零点可导吗&#xff0c;不可导如何进行反向传播&#xff1f;Geluleaky relu优点缺点softmaxsigmoid缺陷tanh缺点如何选择激活函数Bert、GPT、GPT2中用的激活函数是什么&#xff1f;为什…

我在chatgpt学习requestIdleCallback

react对接chatgpt&#xff0c;导入json形成记忆数据继续提问&#xff0c;想要私聊 [{"role": "user","content": "requestIdleCallback 怎么使用" }, {"role": "assistant","content": "requestI…

电子采购系统的优缺点分析及选型建议

在现今&#xff0c;电子采购系统的出现&#xff0c;为企业采购带来了全新的解决方案。它可以使采购过程更加自动化、高效化&#xff0c;减少采购成本和人力资源的浪费。本文将对电子采购系统的优缺点进行分析&#xff0c;并提供选型建议。 电子采购系统优点&#xff1a; 1、自…

(Linux) make/makefile的简单介绍以及使用

make和makefile的功能make和makefile的使用规则make和makefile的功能 什么是make和makefile,它有什么作用&#xff1f;我相信这是大部分人在刚接触make和makefile时疑惑。那我们就一起来看看它的答案吧。 make是一条命令&#xff0c;makefile是一个文件&#xff0c;两个搭配使…

基于ZC序列的帧同步

Zadoff-Chu序列是一种特殊的序列&#xff0c;具有良好的自相关性和很低的互相关性&#xff0c;这种性能可以被用来产生同步信号&#xff0c;作为对时间和频率的相关运算在TD-LTE系统中&#xff0c;Zadoff-Chu(ZC)序列主要应用于上行RS序列生成、PRACH前导序列生成以及主同步信号…

CIMCAI mature AI product, digital port intelligent port waterway

全球港航人工智能领军企业中集飞瞳CIMCAI&#xff0c;成熟港航人工智能产品全球领先&#xff0c;核心技术世界顶尖水平数字化港航自动化。全球集装箱人工智能AI领军企业CIMCAI中集飞瞳&#xff0c;全球航运港口高科技领军企业&#xff0c;率先将港口人工智能Ceaspectus™产品做…

python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作

文章目录课程目标认识openCV如何安装openCVOpenCV 读取、缩放、翻转、写入图像读取图片缩放图片翻转图片写入图片openCV绘制图形和文字创建一个纯黑色的底图画一个矩形再画一个正方形再画一个圆形再画一个实心圆画一条线画多边形在真实的图片上加载图形在真实的图片上加载文字O…

创建菜单栏、菜单、菜单项

1、QMainWindow窗口 1.1、创建菜单栏 this 代表的是 当前窗口&#xff08;主窗口&#xff09;&#xff0c;也就是 当前窗口中添加/设置 菜单栏 this->resize(800,600); //创建 菜单栏 QMenuBar *menuBar new QMenuBar(this); //将菜单栏 添加到主窗口的特殊位置 this-&g…

第12届蓝桥杯省赛真题剖析-2020年12月20日Scratch编程初级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第123讲。 第12届蓝桥杯省赛举办了两次&#xff0c;这是2020年10月20日举行的第一次省赛初级组试题&#xff0c;比赛仍…

<STM32>STM32CubeMX-串口收发通信(DMA传输)(6)

&#xff1c;STM32&#xff1e;STM32CubeMX-串口收发通信(DMA传输)&#xff08;6&#xff09; 本节主要讲解串口DMA通信的功能&#xff0c;主要采用DMA接收数据的方式&#xff1b; DMA、串口的详细解说可参考《STM32F4XXX中文参考手册》&#xff0c;资料有详细的讲解和说明&am…

【机器视觉------标定篇(二)】三点成圆算法(求相机旋转中心)

应用场景 机器视觉项目应用中&#xff0c;相机安装在机器人上&#xff0c;并且需要定位产品返回坐标偏差以及角度偏差。 与九点标定配合使用&#xff0c;实现精准角度补偿。 算法输入 不共线的三点坐标 A&#xff08;X₁,Y₁&#xff09; &#xff0c;B&#xff08;X₂,Y₂&…

关于加解密方法报错java.security.InvalidKeyException: Illegal key size

1、找到自己的jdk安装路径下去&#xff1b; 2、找到java.security查看是否存在#crypto.policyunlimited,如果有把该#号去掉&#xff0c;注释打开&#xff1b; 3、若java.security文件中不存在#crypto.policyunlimited&#xff0c;则应该去从官网下载jce策略文件&#xff08;补丁…

springboot+vue旧物置换网站(完整源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旧物置换网站。项目源码请联系风歌&#xff0c;文末附上联系信息 。 目前有各类成品java毕设&#xff0c;需要请看文末联系方式 。ja…

Python|基于粒子群和遗传算法的微电网优化调度

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Hadoop2.0伪分布式平台环境搭建

一、搭建环境的前提条件 环境&#xff1a;ubuntu-16.04 hadoop-2.6.0 jdk1.8.0_161。这里的环境不一定需要和我一样&#xff0c;基本版本差不多都ok的&#xff0c;所需安装包和压缩包自行下载即可。 因为这里是配置Hadoop的教程&#xff0c;配置Java以及安装VMware Tools就自行…

为什么2017年之后操作系统仍将扮演重要角色?

操作系统的历史虽然不像计算科学那么久远&#xff0c;但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统&#xff0c;这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。 在可预期的…

详解二叉搜索树 --- key模型和key/value模型

&#x1f340;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;数据结构 一、认识二叉搜索树的key模型和key/value模型 key的模型是指每个节点只有一个键值&#xff0c;用于确定节点在树中的位置。节点的键值必须满足二叉搜索树的性质&#xff0c;即左子节点的键值小于…

SpringBoot 中使用Guava实现单机令牌桶限流

SpringBoot项目中如何对接口进行限流&#xff0c;有哪些常见的限流算法&#xff0c;如何优雅的进行限流。 首先就让我们来看看为什么需要对接口进行限流&#xff1f; 为什么要进行限流&#xff1f; 因为互联网系统通常都要面对大并发大流量的请求&#xff0c;在突发情况下&a…

你还还还没学会RabbitMQ?-----------RabbitMQ详解及快速入门(工作模式)

你像天外来物一样&#xff0c;求之不得&#xff08;咳咳&#xff0c;指offer&#xff09;&#x1f339; 文章目录什么是MQ&#xff1f;MQ的优势与劣势使用MQ需要满足的条件常见的MQ产品关于RabbitMQ生产者消费者工作模式订阅模式路由模式通配符模式什么是MQ&#xff1f; Messa…

机器学习——支持向量机的训练

目录 实践SVM分类 测试1-1​编辑 测试1-2 SVM核心 支持向量机函数 分类器SVC的主要属性: 分类器SVC的主要方法: 回归器SVR的主要属性: 支持向量机在鸢尾花分类中的应用 实践SVM分类 (1)参数C的选择: C为惩罚系数,也称为正则化系数: C越小模型越受限&#xff08;即单个数据…