shell 脚本基础(四十三)

news2024/11/24 10:29:22

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、概述

1. 概念

2. 学习路径

 2.1表达式

 2.2 语句

 2.3 函数

 2.4 正则表达式

 2.5 文件操作四剑客

二、表达式

1.shell

2.1 变量

2.2.1组成

2.2.2 类型

2.2.3 作用域

2.2.4 输出

2.2.5 shell中的字符串

2.2 运算符

2.3 shell脚本编写规范

2.4 shell运行规则

2.5 语句

2.5.1 条件语句

2.5.2 循环语句

2.5.3 开关语句

2. 文件操作四剑客

2.1 正则表达式

2.1.1 基础正则

2.1.2 扩展正则

2.1.3 常见正则表达式

2.2 grep进阶

2.3 find进阶

2.4 sed

2.5 awk



前言

       今天学习的是Shell脚本的编写,Shell脚本是一种编写在Unix或类Unix操作系统上的脚本程序,用于执行一系列的命令。它由一系列的命令和控制结构组成,可以通过直接在命令行中输入脚本名称来执行,也可以通过给脚本文件添加执行权限后直接运行该文件。

Shell脚本通常用于自动化任务,可以编写一些简单或复杂的脚本来执行重复性的工作,提高工作效率。它可以像编程语言一样实现流程控制、变量定义、函数调用等功能。Shell脚本可以用多种脚本语言编写,如Bash、Csh、Ksh等,其中Bash是最常用的脚本语言。

使用Shell脚本可以实现很多任务,比如文件处理、系统管理、数据处理等。它可以调用系统命令、执行外部程序、处理输入输出、控制进程等。Shell脚本的优点是简单易学、灵活性强,但在处理大规模任务和复杂逻辑时可能效率较低,适用于快速编写和执行一些小规模任务。


提示:以下是本篇文章正文内容,下面案例可供参考

一、概述

1. 概念

脚本就是将手动一次性执行的命令进行规范且自动化

2. 学习路径

 2.1表达式

    变量预定义变量
位置变量
自定义变量
    运算符数学运算
 数值比较
 字符串比较
文件判断
布尔运算符

 2.2 语句

条件语句 if
 分支语句   case
循环语句for
 while

 2.3 函数

函数:函数是以函数名()跟{}括起来的内容组成。函数可以实现一些功能封装,同时函数也支持与脚本类似的参数解析逻辑。

2.4 正则表达式

        标准正则
        扩展正则

2.5 文件操作四剑客

         find
        egrep
        sed
        awk

二、表达式

1.shell

shell命令解释环境
    类型
        sh
        ash
        bsh
        csh
        bash
        tcsh
        dsh
        zsh
    查看系统中支持的shell
        cat /etc/shells


    查看系统默认shell
        echo $SHELL

 2.表达式

2.1 变量

2.2.1组成

变量名不会变化杯子
容器...
声明规范不能是数字或数字开头
以_或字母开头
变量名中不能包含特殊字符
声明方法驼峰式userName
双驼峰UserName
shell写法user_name
username
USERNAME
变量值不断变化承载的物体
数字、字符

 2.2.2 类型

系统内置变量(环境变量)   env

自定义变量 varName=varValue
       等号两边不能有格
     数字 var1=1
字符串 shell中可以不使用引号
当包含有空格时,需要使用引号
引号的用法 不会引用变量值    单引号    '
     会应用变量值 双引号     "
    引用命令结果 反撇号   `
     $(命令)   应用场景较多
    位置变量脚本后参数所在的位置
 $1
 ...
    $9
 预定义变量     $0    脚本本身的名称
     $# 脚本后参数的个数
     $* 脚本运行时参数的内容(整体输出)
     $@ 脚本运行时参数的内容(逐个输出)
     $? 脚本运行完毕后的返回值
 默认情况   0           成功
  非0         失败

                    

2.2.3 作用域

    默认变量只在当前shell下生效
    若要在当前及其子shell下生效,需要声明为全局变量
        export

2.2.4 输出

echo $varName

2.2.5 shell中的字符串

 string
    赋值: str1=foodfornoting.gpg
    (1)获得字符串的长度
    语法:    ${#StringName}
    案例:    echo ${#str1}
    输出结果:17
    (2)字符串取子串
    语法:    ${#StringName:position:lenght}
    案例:    echo ${str1:0:3}
    输出结果:foo
    注意:lenght没有定义时,一直取到字符串的结尾!
    (3)字符串的截取
    a)从左至右截取最后一个匹配字符串string之后的所有字符串
    语法:    ${StringName##*string}
    案例:    echo ${str1##*fo}
    输出结果:rnoting.gpg
    b)从左至右截取第一个匹配字符串string之后的所有字符串
    语法:    ${StringName#*string}
    案例:    echo ${str1#*fo}
    输出结果:odfornoting.gpg
    c)从右至左截取最后一个匹配字符串string之后的所有字符串
    语法:    ${StringName%%string*}    
    案例:    echo ${str2%%o*}
    输出结果:f
    d)从右至左截取第一个匹配字符串string之后的所有字符串
    语法: ${StringName%string*}
    案例: echo ${str2%o*}
    输出结果:foodforn
    (4)字符串的拼接
    语法:    StringName3=${StingName1}${StringName2}
    案例:    str1=Hello
        str2=,Jack!
        str3=${str1}${str2}
        echo ${str3}
    输出结果: Hello,Jack!
    (5)字符串替换:
    语法:    ${StringName/OldString/NewString}
    案例:    str1=foodfornoting.gpg
        echo ${str1/oo/kk}
    输出结果:fkkdfornoting.gpg

2.2 运算符

数学运算

数学运算+ - * / %* 作为乘号时需要加转义符\
运算方法exprexpr $a + $b
$((a+b))echo $((a+b))
$[a+b]echo $[a+b]
注意
  
 shell不支持浮点数的显示

比较运算

条件测试test var1 比较符 var2
[ var1 比较符 var2 ]
&&[ $a -ne $b ] &&  echo OK条件 && 输出结果
条件为真输出
||[ $a -ne $b ] ||  echo OK条件 || 输出结果
条件为假输出

数值比较

-eq等于
-ne不等于
-lt小于
-le小于等于
-gt大于
-ge大于等于

字符串比较

=字符串一致
!=字符串不一致
-z字符串为空
! -z 字符串不为空

文件比较

-e文件或目录是否存在
-f是否为文件
-d是否为目录
-r判断文件是否可读
-w判断文件是否可写
-x判断文件是否可执行

逻辑运算符

&&-a并且,有假则假,全真为真[ -r 111 -a -w 111 -a -x 111 ]
[ -r 111 ] && [ -w 111 ] &&  [ -x 111 ]
 [ -x /root/file1 -a  -d /root/file1 ]
 [ -x /root/file1 ]  && [ -d /root/file1 ]
||-o或者,有真则真,全假为假
取反有真则假,有假则真

2.3 shell脚本编写规范

     第一行
        #!/bin/bash
    第二行
        #脚本的说明
    第三行
        脚本正文

2.4 shell运行规则

没有x权限bash  脚本所在路径/脚本文件
source 脚本所在路径/脚本文件          脚本存在cd  时,会切换到目标目录
.      脚本所在路径/脚本文件
有x权限./脚本文件
脚本绝对路径/脚本文件

shell脚本运行追踪
    bash -x 脚本所在路径/脚本文件

$[$RANDOM%100]
    返回100内随机数

seq 1 10
    返回1到10 的连续数字

{1..10}
    返回1到10 的连续数字

seq 1.1 10.1
    返回1.1 2.1 3.1.... 10.1

read -p "提示语" 变量名
    读取键盘输入并赋值给变量名

2.5 语句

2.5.1 条件语句

单分支if
        if [ ];then
fi
    双分支if
        if [ ];then
else
fi
    多分支if
        if [ ];then
elif [ ];then
else
fi

2.5.2 循环语句

  for
        for 条件(i in 值)|((i=1;i<=10;i++))
do
    语句
done
    while
        i=1
while 条件
do
    语句
    let  i++
done
    关于$*与$@的验证

2.5.3 开关语句

  case
        case $1 in
条件1)
    语句
;;
条件2)
    语句
;;
*)
    帮助信息
;;
esac
    nginx启动脚本

2. 文件操作四剑客

2.1 正则表达式

2.1.1 基础正则

    a)查找特定字符
        cat test.txt | grep -n 'was'


    b)利用[]查找集合字符
        cat test.txt | grep -n 'sh[io]rt'
            匹配i或者o


        cat test.txt | grep -n '[^w]'
            排除w


        cat test.txt | grep -n '[a-h]oo'


        cat test.txt | grep -n '[0-9]'

     c)查找行首"^"与行尾"$" 
        cat test.txt | grep -n '^[A-Z]'


        cat test.txt | grep '\.$'
            \ 为转义符
    d)查找任意一个字符"."与重复字符"*"
        cat test.txt | grep -n 'w..d'


        cat test.txt | grep -n 'ooo*'


    e)查找连续的字符范围"{}",需要使用转义符,"\{\}"
        cat test.txt | grep -n 'o\{2\}'


        cat test.txt | grep -n 'wo\{2,5\}d'


        cat test.txt | grep -n 'wo\{2,\}d'

 

2.1.2 扩展正则

    a)+,重复一个或一个以上的前一个字符
        cat test.txt | grep -nE 'wo+d' 或者
        cat test.txt | egrep -n 'wo+d'


    b)?,零个或者一个前一个字符
        cat test.txt | egrep -n 'bes?t'


    c)|,使用或者的方式找出多个字符
        cat test.txt | egrep -n 'of|is|on'


    d)(),查找组字符串
        cat test.txt | egrep -n 't(a|e)st'


    e)()+,辨别多个重复的组
        cat test.txt | egrep -n 'A(xyz)+C' 

2.1.3 常见正则表达式

数字
        “^[0-9]*[1-9][0-9]*$” //正整数  
        “^((-\d+)|(0+))$” //非正整数(负整数 + 0)  
        “^-[0-9]*[1-9][0-9]*$” //负整数  
        “^-?\d+$” //整数 
        “^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0)  
        “^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数 
        “^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0) 
        “^(-?\d+)(\.\d+)?$” //浮点数 
字符串
        “^[A-Z]+$” //由26个英文字母的大写组成的字符串  
        “^[a-z]+$” //由26个英文字母的小写组成的字符串  
        “^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串  
        “^\w+$” //由数字、26个英文字母或者下划线组成的字符串

 Email
        “^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址  
        “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”                         //Email 

Url 
        “^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” //url 

IP
        “^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”   //IP地址

Tel 
        /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码

日期校验
           /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日    yyyy-MM-dd /                    yy-MM-dd 格式
           "^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$"   // 年-月- 日  yyyy-MM-dd 格式
          /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

2.2 grep进阶

  选项
        -r
            递归扫描指定目录下的每一个文件
        -l
            只显示匹配到指定关键字的文件名,而不是文件内容
    案例
        查看/etc目录下所有包含bash的文件名
        grep -rl bash /etc

 egrep
    完美支持正则表达式

2.3 find进阶

    按照权限查找
        -perm
    按照时间戳查找
        -atime
        -mtime
        -ctime
    -exec
        find /var/spool/mail -type f -exec rm -rf {} \;
    xargs
        find /var/spool/mail -type f | xargs rm -rf

2.4 sed

语法
    sed [选项] '操作' 参数 
    sed [选项] -f scriptfile 参数

选项

-e

表示用指定命令或脚本处理

-f指定脚本文件
-h帮助
-n表示仅显示处理后的结果
-i直接编辑文本文件
-r支持扩展正则

操作

a增加,在当前行下面以行增加指定内容
c替换,将选定行替换
d删除,删除指定行
i插入,在选定行的上面插入一行
p打印
s替换,替换成指定字符
y字符转换

案例
    1.输出符合条件的文本:
        sed -n 'p' test.txt     #相当于cat


        sed -n '3p' test.txt    #打印第3行


        sed -n '3,6p' test.txt    #打印第3到6行的内容


        sed -n 'p;n' test.txt    #打印奇数行 
        sed -n 'n;p' test.txt    #打印偶数行


        sed -n '1,6{p;n}' test.txt    #打印1到6行之间的奇数行


        sed -n '5,${p;n}' test.txt    #从第5行开始打印奇数行


        sed -n '/goo/p' test.txt    #匹配goo 


        sed -n '5,/goo/p' test.txt     #匹配从第5行开始到包含goo的行


        sed -n '/goo/,10p' test.txt     #匹配从包含goo的行到第10行结束


        sed -n '/the/=' test.txt    #打印包含the的行号


    2.删除符合条件的文本
        nl test.txt | sed '3d'    #删除第3行 
        nl test.txt | sed '3,5d'


        nl test.txt | sed '/the/d'    #删除the所在行


    3.替换符合条件的文本
        nl test.txt | sed 's/the/TTTTTT/'    #替换全文本


        nl test.txt | sed '3s/good/TTTTTT/'    #替换第4行


        nl test.txt | sed 's/l/L/2'        #替换匹配到的第2个l


    4.迁移符合条件的文本
        H:复制;g:覆盖;G:追加行;w:保存;r:读取;a:追加内容
        sed '/the/{H;d};$G' test.txt #匹配the所在行并迁移至文件末尾
        sed '3aTest' test.txt #在第3行下面新建行并写入Test
        sed '/the/aTest' test.txt #匹配the所在行并在下一行写入Test
    5.使用脚本编辑文件内容
        vim opt.txt
        1,5H
        1,5d
        16G
        sed -f opt.txt test.txt    #将1到5行迁移至16行后
    6.以上修改想要直接修改文本源文件,只需要加入选项"-i"

2.5 awk

语法
    awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...
    awk -f 脚本文件 文件1 文件2 ...

选项
    -F
        指定每行的分隔符
        默认分隔符为空格

内建变量

FS指定每行的分隔符
NF指定当前处理行的字段个数
NR当前处理行的行号
$0当前处理行的整行内容
$n当前处理的第n个字段
FILENAME处理文件名
RS数据记录分割,默认是\n

案例:
    a)按行输出
        awk '{print}' test.txt          #等同cat 


        awk 'NR>=1&&NR<=3{print}' test.txt 


        awk 'NR==1,NR==3{print}' test.txt #打印1到3行

        awk 'NR%2==0{print}' test.txt     #打印偶数行


    b)按段输出
        默认以"空格"分段!
        ifconfig ens33 |awk '/netmask/{print $2}' #筛选IP地址
        cat /etc/shadow | awk -F : '$2=="!!"{print $1}' #打印不能登录系统的用户
    c)调用shell命令
        cat /etc/passwd | awk -F : '/bash$/{print | "wc -l"}' /etc/passwd     #统计能够登录系统的用户个数       


 总结

Shell脚本是一种文本文件,由一系列命令和控制结构组成,用于执行一系列的任务。

Shell脚本可以通过直接在命令行中输入脚本名称来执行,也可以通过给脚本文件添加执行权限后直接运行该文件。

Shell脚本可以用多种脚本语言编写,如Bash、Csh、Ksh等,其中Bash是最常用的脚本语言。

Shell脚本可以调用系统命令、执行外部程序、处理输入输出、控制进程等。

Shell脚本可以实现文件处理、系统管理、数据处理等多种任务。

Shell脚本具有简单易学、灵活性强的特点,适用于快速编写和执行一些小规模任务。

Shell脚本的效率可能较低,适用于处理小规模任务和简单逻辑,对于大规模任务和复杂逻辑,可能效率较低。

Shell脚本是Unix系统中常用的自动化工具,广泛应用于系统管理、软件开发等领域。

总而言之,Shell脚本是一种简单、灵活的自动化工具,能够帮助我们自动化执行任务,提高工作效率。

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

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

相关文章

二级评论列表功能

一&#xff1a;需求场景 我的个人网站留言列表在开发时&#xff0c;因为本着先有功能的原则。留言列表只有一级&#xff0c;平铺的。 当涉及多人回复&#xff0c;或者两个人多次对话后&#xff0c; 留言逻辑看着非常混乱。如下图 于是&#xff0c;我就打算将平铺的列表&#…

【数据备份、恢复、迁移与容灾】上海道宁与云祺科技为企业用户提供云数据中心容灾备份解决方案

云祺容灾备份系统支持 主流虚拟化环境下的虚拟机备份 提供对云基础设施 云架构平台以及 应用系统的全方位数据保护 云祺容灾备份系统规范功能 增强决策能力 高效恢复数据至可用状态 有效降低恢复成本 更大限度减少业务中断时间 保障业务可访问性 开发商介绍 成都云祺…

部署 Windows 域(一)

目录 简介 1. 部署 AD 前的准备 2. 部署 Windows 域的过程 2.1 安装域控制器 2.2 将客户机加入域 1.联机加入域 2.脱机加入域 简介 前面章节介绍了域的相关概念&#xff0c;以及工作组和域的主要区别&#xff0c;想要实现域环境&#xff0c;就必须部署至少一台域控制器。…

BUCK电路-TL494方案 持续更新大概2周更新完成

目录 一、电磁感应现象 这个现象是如何产生的 磁生电的变换的条件 二、电感的伏安特性 计算磁场大小可以用上面这个公式 磁感应强度B来表示 u0是真空磁导率 N是线圈的匝数 I是通过这个线圈的的电流大小 电生磁的过程就是由I来生成这个B 可以加入磁芯提高磁感应强度 …

Lnton羚通云算力平台【PyTorch】教程:关于Tensors的基础知识

Tensors Tensors 是一个特殊的数据结构&#xff0c;非常类似于数组和矩阵&#xff0c;在 PyTorch 中&#xff0c;我们使用 tensors 编码模型的输入和输出&#xff0c;以及模型的参数。 Tensors 非常类似于 NumPy 的 ndarrays&#xff0c; tensors 可以运行在 GPU 以及其他硬件…

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …

webrtc学习(七)-媒体协商

一.概述 媒体协商嘴主要的作用就是看通信双方都支持那些编解码器&#xff0c;这些编解码器又包含那些参数&#xff0c;比如音频的参数包括采样率&#xff0c;采样大小&#xff0c;通道数&#xff0c;对于视频的参数包括分辨率帧率等一系列参数&#xff0c;此外传输中用的payloa…

基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 LSTM: GRU 2.算法运行软件版本 matlab2022a 3.部分核心程序 %构建GRU网络模型 layers [ ...sequenceInputLayer(N_feature)gruLayer(N_hidden)f…

SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 从极简实现到IOC改进

目录 引出git代码仓库准备工作支付宝沙箱api内网穿透 [natapp.cn](https://natapp.cn/#download) springboot整合—极简实现版1.导包配置文件2.controller层代码3.进行支付流程4.支付成功回调 依赖注入的改进1.整体结构2.pom.xml文件依赖3.配置文件4.配置类&#xff0c;依赖注入…

SQL注入之联合查询

文章目录 联合查询是什么&#xff1f;联合查询获取cms账号密码尝试登录 联合查询是什么&#xff1f; 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用union select 语句&#xff0c;该语句会同时执行两条select 语句&#xff0c;实现跨库、跨表查询。 必要条件 两…

IDEA项目实践——会话跟踪、Web当中的jsp编程以及jsp开发模型和EL与JSTL以及过滤器介绍

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践…

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

&#xff08;二&#xff09;Git在公司中团队内合作和跨团队合作和分支操作的全部流程&#xff08;一篇就够&#xff09;https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*&#xff0c;可以快速高效地…

UE Mesh Draw Pipeline 解析

为什么引入Mesh Draw Pipeline -------------作者:mx 常规渲染管线(老的渲染管线)的弊端 ①无法很好的进行排序以及剔除,以UE为例,使用位图 来表示物体可见性,无法快速找到最前面的物体,drawlist无法实现动态物体和静态物体的 draw sorting ②无法很好的进行合批。…

【javaweb】学习日记Day4 - Maven 依赖管理 Web入门

目录 一、Maven入门 - 管理和构建java项目的工具 1、IDEA如何构建Maven项目 2、Maven 坐标 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;主要组成 3、IDEA如何导入和删除项目 二、Maven - 依赖管理 1、依赖配置 2、依赖传递 &#xff08;1&#xff09;查…

使用Pytorch和OpenCV实现视频人脸替换

“DeepFaceLab”项目已经发布了很长时间了&#xff0c;作为研究的目的&#xff0c;本文将介绍他的原理&#xff0c;并使用Pytorch和OpenCV创建一个简化版本。 本文将分成3个部分&#xff0c;第一部分从两个视频中提取人脸并构建标准人脸数据集。第二部分使用数据集与神经网络一…

二级MySQL(四)——完整性约束

一种规则&#xff0c;限制存储的数据 保证数据库中数据的正确&#xff0c;有效和完整 分类&#xff1a; 非空——得有值——NOT NULL 唯一——唯一的&#xff0c;不重复——UNIQUE 主键——非空且唯一——PRIMARY KEY 默认——给出默认值——DEFAULT 检查——保证某个条件…

CentOS Stream 9中安装MySQL的详细步骤

文章目录 卸载MySQL在线安装离线安装忘记密码 卸载MySQL 安装前先卸载系统上旧版本的 MySQL&#xff08;没有则跳过此步骤&#xff09; 查看已安装的MySQLrpm -qa | grep mysql卸载查询到的所有安装包rpm -e PackageName # 可批量删除删除my.cnf 查看/etc/my.cnf文件是否还存…

【consul】

consul 一、什么是服务注册与发现1.11.2 二、 什么是consul2.1定义2.2特性2.2.1服务注册与发现&#xff1a;2.2.2健康检查&#xff1a;2.2.3Key/Value存储&#xff1a; 三、consul部署-datacenter &#xff1a;指定数据中心名称&#xff0c;默认是dc1。consul &#xff1a;指定…

Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!

文章目录 前言dayofweek 函数官方说明BUG 重现Spark SQL 中的使用总结 前言 使用的集群环境为&#xff1a; hive 3.1.2spark 3.0.2 dayofweek 函数官方说明 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, …, 7 Saturday). …

线性代数的本质笔记(3B1B课程)

文章目录 前言向量矩阵行列式线性方程非方阵点积叉积 前言 最近在复习线代&#xff0c;李永乐的基础课我刷了一下&#xff0c;感觉讲的不够透彻&#xff0c;和我当年学线代的感觉一样&#xff0c;就是不够形象。 比如&#xff0c;行列式为什么那么重要&#xff0c;它的含义究…