Shell 脚本常用命令

Shell 脚本常用命令

  • 一.日志打印
    • 1.信息打印效果
    • 2.占位符打印效果
  • 二.文件检索
    • 1.文件夹查找
    • 2.文件名称
    • 3.文件内容检索
  • 三.字符串处理
    • 1.字符串截取
    • 2.字符串长度获取
    • 3.字符串判断
    • 4.数字判断
    • 5.数字运算
  • 四.日期获取
  • 五.文件遍历
    • 1.遍历获取修改时间和MD5
    • 2.Find 查找
  • 六.循环重试
    • 1.While 循环
    • 2.For 循环
  • 七.数组定义和打印
    • 1.定义并打印
    • 2.遍历数组
  • 八.IPV4 IP 地址校验
    • 1.正则匹配校验
    • 2.IP 封禁

一.日志打印

#!/bin/bash

SERVER_RUN=running
SERVER_STO=stopped

## 获取时间
get_current_time(){
    CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
}

## 文字 30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:深绿 37:白
## 背景 40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:深绿 47:白
## \033[0m 关闭所有属性 
## \033[1m 高亮
## \033[2m 半高亮
## \033[3m 斜体 (不生效)
## \033[4m 下划线 
## \033[5m 闪烁 (即文字闪烁)
## \033[7m 反显 (即背景色和文字颜色相反)
## \033[8m 消隐 
## \033[30m -- \33[37m 设置前景色 
## \033[40m -- \33[47m 设置背景色 
## \033[nA 光标上移n行 
## \033[nB 光标下移n行 
## \033[nC 光标右移n行 
## \033[nD 光标左移n行 
## \033[y;xH设置光标位置 
## \033[2J 清屏 
## \033[K 清除从光标到行尾的内容 
## \033[s 保存光标位置 
## \033[u 恢复光标位置 
## \033[?25l 隐藏光标 
## \033[?25h 显示光标


## printf "%-10s %5d\n" "apple" 3 ==> apple 10 个字符左对齐 3 5个字符右对齐
## printf '%s\n' hhaha

## 文字颜色
F_BLACK='\033[30m'
F_RED='\033[31m'
F_GREEN='\033[32m'
F_YELLOW='\033[33m'
F_BLUE='\033[34m'
F_PURPLE='\033[35m'
F_DEEP_GREEN='\033[36m'
F_WHITE='\033[37m'
## 背景颜色
B_BLACK='\033[40m'
B_RED='\033[41m'
B_GREEN='\033[42m'
B_YELLOW='\033[43m'
B_BLUE='\033[44m'
B_PURPLE='\033[45m'
B_DEEP_GREEN='\033[46m'
B_WHITE='\033[47m'
## 样式
HIG_LIGHT='\033[1m'
BLINK='\033[5m'
STYLE_CLEAR='\033[0m'

###################################
## 打印内容 
###################################
print_format(){
    ## 高亮
    IS_HIGLIGHT=$1
    if [[ "${IS_HIGLIGHT}" == "0" ]]; then
        IS_HIGLIGHT=''
    else
        IS_HIGLIGHT='\033[1m'
    fi
    ## 下划线
    IS_UNDER_LINE=$2
    if [[ "${IS_UNDER_LINE}" == "0" ]]; then
        IS_UNDER_LINE=''
    else
        IS_UNDER_LINE='\033[4m'
    fi
    ## 闪烁
    IS_BLINK=$3
    if [[ "${IS_BLINK}" == "0" ]]; then
        IS_BLINK=''
    else
        IS_BLINK='\033[5m'
    fi
    ## 是否换行
    IS_WRAP=$4
    if [[ "${IS_WRAP}" == "0" ]]; then
        IS_WRAP=''
    else
        IS_WRAP='\n'
    fi
    ## 文字和背景色
    FONT_COLOR=$5
    BACKGROUND_COLOR=$6
    INFO=$7
    ## 打印
    printf "${IS_HIGLIGHT}${IS_UNDER_LINE}${IS_BLINK}\033[${FONT_COLOR}m\033[${BACKGROUND_COLOR}m${INFO}${STYLE_CLEAR}${IS_WRAP}" 
}

print_format 0 0 0 1 31 40 "Hello World"
print_format 0 0 1 1 31 40 "Hello World"
print_format 0 1 1 1 31 40 "Hello World"
print_format 1 1 1 1 31 40 "Hello World"

###################################
## 打印内容 服务状态
###################################
print_status(){
    server=$1
    status=$2
    if [[ "${status}" == "${SERVER_RUN}" ]]; then
        style=${F_GREEN}
    else
        style=${BLINK}${F_RED}
    fi
    printf "%-20s ${HIG_LIGHT}${style}%s${STYLE_CLEAR}\n" ${server} ${status}
}

###################################
## 打印服务状态
###################################
print_server(){
    get_current_time
    echo -e "[$CURRENT_TIME] ${F_YELLOW}Start to print server status${STYLE_CLEAR}"
    print_status spring-boot ${SERVER_RUN}
    print_status spring-clould ${SERVER_STO}
    print_status nginx ${SERVER_STO}
    print_status hadoop ${SERVER_STO}
    print_status kafka ${SERVER_RUN}
    print_status xxl-job ${SERVER_RUN}
}

print_server

1.信息打印效果

图片无法展示闪烁效果

在这里插入图片描述

2.占位符打印效果

在这里插入图片描述

二.文件检索

## 检索命令: find
## 可用参数
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type d : d-目录;c-字型装置文件;b-区块装置文件;p-具名贮列;f-一般文件;l-符号连结;s-socket
-pid n : pid 是 n 的文件

1.文件夹查找

find ./ -type d

在这里插入图片描述

2.文件名称

## 具体文件名
find ./ -type f -name kafka.log
## 模糊文件名
find ./ -type f -name kafka*

在这里插入图片描述

3.文件内容检索

## 检索文件
find test/ -type f | xargs grep 123
## 模糊文件检索
find test/ -type f -name spring* | xargs grep 123
find test/ -type f -name *.log | xargs grep 123

在这里插入图片描述

三.字符串处理

1.字符串截取

项目Value
${val:start:length}左侧从 0 开始计算,从 start 开始向右截 length 长
${val:start}左侧从 0 开始计算,从 start 开始向右截到末尾
${val:0-start:length}右侧从 1 开始计算,从 start 开始向右截 length 长
${val:0-start}右侧从 1 开始计算,从 start 开始向右截到末尾
${val#*chars}* 模糊匹配,截取从左向右第一次出现 chars 的位置右侧。不包含 chars
${val##*chars}* 模糊匹配,截取从左向右最后一次出现 chars 的位置右侧。不包含 chars
${val%chars*}* 模糊匹配,截取从右向左第一次出现 chars 的位置左侧。不包含 chars
${val%%chars*}* 模糊匹配,截取从右向左最后一次出现 chars 的位置左侧。不包含 chars
#!/bin/bash

## 字符串截取 ${val:a:b} 从左侧 0 开始,第 a 位开始截取 b 位,b 缺省时截取到末尾
echo "从左开始截..."
val=123456789
echo ${val:2:3}
echo ${val:2}

echo "" && echo "从右开始截..."
## 字符串截取 ${val:0-a:b} 从右侧 1 开始,第 a 位开始截取 b 位,b 缺省时截取到末尾(都是从左向右截)
val=123456789
echo ${val:0-2:1}
echo ${val:0-2}

echo "" && echo " # 匹配并截取右侧字符串..."
## 截取右侧字符  # 向右截 *str 其中 * 表示模糊匹配,
val=12333456789
echo "从第一个   3 开始截取右侧的 " ${val#*3}
echo "从第一个   23 开始截取右侧的" ${val#*23}
echo "从最后一个 3 开始截取右侧的 " ${val##*3}
echo "从最后一个 23 开始截取右侧的" ${val##*23}
echo "不带模糊匹配则要写完整      " ${val#123}

echo "" && echo " % 匹配并截取左侧字符串..."
## 截取右侧字符  # 向右截 *str 其中 * 表示模糊匹配,
val=12333456789
echo "从第一个   3 开始截取左侧的 " ${val%3*}
echo "从第一个   23 开始截取左侧的" ${val%23*}
echo "从最后一个 3 开始截取左侧的 " ${val%%3*}
echo "从最后一个 23 开始截取左侧的" ${val%%23*}
echo "不带模糊匹配则要写完整      " ${val%6789}

效果演示

在这里插入图片描述

2.字符串长度获取

#!/bin/bash

## 字符串长度
val="1234 56"
echo "直接统计                      " ${#val}
echo "AWK分割后数组长度             " `echo ${val} | awk '{print length($0)}'`
echo "AWK分割后域个数               " `echo ${val} | awk -F "" '{print NF}'`
echo "wc -c 统计字符(默认带换行符)  " `echo ${val} | wc -c`
echo "wc -c 统计字符(去掉换行符)    " `echo -n ${val} | wc -c`
echo "expr 的 length 方法           " `expr length "${val}"`

在这里插入图片描述

3.字符串判断

#!/bin/bash

param=abcde
val=123456
var=
## 字符串为空
echo ------------------------------------
if [[ -z $var ]]; then
	echo "var is empty"
else
	echo "var is not empty"
fi

## 字符串非空
echo ------------------------------------
if [[ -n $val ]]; then
	echo "val is not empty"
else
	echo "val is empty"
fi
## 取反
if [[ ! -n $val ]]; then
	echo "val is empty"
else
	echo "val is not empty"
fi


## 字符串相等
echo ------------------------------------
if [[ $param == abcde ]]; then
	echo "param = abcde"
else
	echo "param != abcde"
fi
## 带引号
if [[ "$val" == "1234568" ]]; then
	echo "val = 123456"
else
	echo "val != 1234568"
fi

## 字符串不相等
echo ------------------------------------
if [[ $param != abcdef ]]; then
	echo "param != abcdef"
else
	echo "param = abcde"
fi

在这里插入图片描述

4.数字判断

#!/bin/bash

val=123
## > 12
if (($val > 21)); then
	echo "val > 21"
else 
	echo "val < 21"
fi
## < 321
if (($val > 321)); then
	echo "val > 321"
else 
	echo "val < 321"
fi
## -gt 21
if [ $val -gt 21 ]; then
	echo "val -gt 21"
else 
	echo "val -lt 21"
fi
## -lt 321
if [ $val -gt 321 ]; then
	echo "val -gt 321"
else 
	echo "val -lt 321"
fi
## >= 123
if (($val >= 123)); then
	echo "val >= 123"
else 
	echo "val < 123"
fi
## -ge 123
if [ $val -ge 123 ]; then
	echo "val -ge 123"
else 
	echo "val -lt 123"
fi
## < 321
if (($val < 321)); then
	echo "val < 321"
else 
	echo "val >= 321"
fi
## -lt 321
if [ $val -lt 321 ]; then
	echo "val < 321"
else 
	echo "val >= 321"
fi
## != 1
if (( $val != 1 )); then
	echo "val != 1"
else
	echo "val == 1"
fi
## != 1
if [ $val -ne 1 ]; then
	echo "val -ne 1"
else
	echo "val == 1"
fi

在这里插入图片描述

5.数字运算

#!/bin/bash

echo '5+4 =' $((5+4))
echo '5-4 =' $((5-4))
echo '5*4 =' $((5*4))
echo '5/4 =' $((5/4))

在这里插入图片描述

四.日期获取

#!/bin/bash

## 当前时间
date
## 年
echo $(date +'%Y')
## 月
echo $(date +'%m')
## 日
echo $(date +'%d')
## 年-月-日
echo $(date +'%Y-%m-%d')
## 年-月-日 时:分:秒
echo $(date +'%Y-%m-%d %H:%M:%S') 
## 昨天
echo $(date -d '-1 day' +'%Y-%m-%d')
## 明天
echo $(date -d '+1 day' +'%Y-%m-%d')
## 明天
echo $(date -d '+1 day' +'%Y-%m-%d')
## 获取 10MIN 前
echo $(date -d '-10 min' +'%Y-%m-%d  %H:%M:%S')
## 获取 10SEC 前
echo $(date -d '-10 sec' +'%Y-%m-%d  %H:%M:%S')
## 今日为周几 0-6 日-六
echo $(date +'%w')
## 某天是周几 20230806
echo $(date -d '20230806' +'%w')
## 获取时间戳
echo $(date +'%s')
## 时间戳转成日期
echo $(date -d @1692051748 +'%Y-%m-%d  %H:%M:%S')

在这里插入图片描述

五.文件遍历

1.遍历获取修改时间和MD5

#!/bin/bash

LOG_FILE_PATH=/home/test
CURRENT_DAY_TIME=$(date +'%Y%m%d')000000
for file in `ls ${LOG_FILE_PATH}`; do
	## 获取修改时间
	unixTime=`stat -c '%Y' $LOG_FILE_PATH/$file`
	## unixTime=`echo "$(date -d @$unixTime +'%Y-%m-%d %H:%M:%S') => $(date -d @$unixTime +'%Y%m%d%H%M%S')"`
	unixTime=$(date -d @$unixTime +'%Y%m%d%H%M%S')
	## 计算 MD5 并转大写
	md5=`md5sum $LOG_FILE_PATH/$file | awk '{ print $1 }' | tr [a-z] [A-Z]`
	## 打印文件名 修改时间
	printf '%-32s %s\n' $file "$unixTime $md5"
	## 获取今天修改的
	if [ $unixTime -ge $CURRENT_DAY_TIME ]; then
		echo $file
	fi
done

在这里插入图片描述

2.Find 查找

## 获取近1天
find /home/test/ -type f -mtime -1
## 获取近3天
find /home/test/ -type f -mtime -3

在这里插入图片描述

六.循环重试

1.While 循环

#!/bin/bash

func(){
	RETRY_TIMES=3
	## 循环重试
	while [[ 1 == 1 ]]; do
		echo 'pls input one char'
		read input
		## 
		if [[ $input != "exit()" ]]; then
			echo "you input " $input
		fi
		##
		RETRY_TIMES=$(($RETRY_TIMES-1))
		##
		if [[ $input == "exit()" ]]; then
			return 0
		fi
		## 
		if [ $RETRY_TIMES -le 0 ]; then
			return 1
		fi
	done
}
## 调用方法
func
## 退出循环
echo result $?

在这里插入图片描述

2.For 循环

#!/bin/bash

for (( i = 0; i < 10; i++ )); do
	echo $i
done

在这里插入图片描述

七.数组定义和打印

1.定义并打印

#!/bin/bash

arr=(1 2 3 4 5 6 7 8 9)
echo ${arr[@]}
echo ${arr[*]}

list="a b c d e f"
arr=($list)
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

arrs[0]=hello
arrs[1]=world
arrs[3]=how
echo ${arrs[@]}

array=([0]=a [1]=b [2]=c)
echo ${array[@]}

在这里插入图片描述

2.遍历数组

#!/bin/bash

list="a b c d e f"
arr=($list)
for i in ${arr[@]}; do
	echo $i
done

在这里插入图片描述

八.IPV4 IP 地址校验

1.正则匹配校验

#!/bin/bash

## ipv4 点分十进制
function check_ip(){  
    IP=$1
    ## 检测数值范围
    VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
    if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
        if [[ $VALID_CHECK == "yes" ]]; then  
            echo "$IP ok."
        else
            echo "$IP not ok!"
        fi
    else
        echo "$IP Format error!"
    fi
}

check_ip 192.168.1.2
check_ip 192.168.1.256
check_ip 192.168.1

在这里插入图片描述

2.IP 封禁

#!/bin/bash

## 应用端口
PORT=80
## 访问 IP 日志
logfile=/var/log/access.log
## 单位为 MIN 示例为近 5MIN
ACCESS_LIMIT=3
ACCESS_SCOPE=5
ACCESS_TMP=''
## 获取时间范围
d1=`date -d "-$ACCESS_SCOPE min" +"%Y%m%d%H%M"`
ipt=/sbin/iptables
ipa=/tmp/ip_analysis.log
ipb=/tmp/ip_block.log

## 封禁
block()
{
	## 计算时间
	ACCESS_TMP=$d1'*'
	for (( i = 1; i < $ACCESS_SCOPE; i++ )); do
		ACCESS_TMP=${ACCESS_TMP}'\|'$(($d1-$i))'*'
	done
	## 或匹配
	grep ${ACCESS_TMP} $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ipa
	## 
	cat $ipa
	## 利用for循环将次数超过 ACCESS_LIMIT 的IP依次遍历出来并予以封禁
	[[ -f $ipb ]] && rm -rf $ipb
	for i in `awk '$1>3 {print $2}' $ipa`
	do
		$ipt -I INPUT -p tcp --dport $PORT -s $i -j REJECT
		echo "`date +%F-%T` $i" >> $ipb
	done
	## 打印禁用的 ip
	[[ -f $ipb ]] && cat $ipb
}

## 解封
unblock()
{
	## 将封禁后所产生的 pkts 数量小于 10 的 IP 解封
	for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr`
	do
		$ipt -D INPUT $a
	done
	$ipt -Z
}

case $1 in 
"block")
	block
;;
"unblock")
	unblock
;;
*)
	echo 'pls input block|unblock'
	;;
esac

## 查看 iptables
/sbin/iptables -nvL INPUT --line-numbers

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:什么是分类/回归/聚类/降维/决策

目录 学习模式分为三大类&#xff1a;监督&#xff0c;无监督&#xff0c;强化学习 监督学习基本问题 分类问题 回归问题 无监督学习基本问题 聚类问题 降维问题 强化学习基本问题 决策问题 如何选择合适的算法 我们将涵盖目前「五大」最常见机器学习任务&#xff1a…

Java面向对象——多态、Object类、instanceof关键字以及final关键字

多态的概念 1.多态是指同一个方法调用可以在不同的对象上有不同的表现&#xff0c;即同一种方法调用方式适用于不同的数据类型。 编译时和运行时&#xff1a;编译时期调用的是父类中的方法&#xff0c;但运行时期会根据实际的对象类型来调用适当的方法。这种行为称为动态绑定&…

【已解决】记 Vue3+SpringBoot 前后端分离项目部署时的一次跨域问题

问题背景是在一次部署开发环境时&#xff0c;由于是前后端分离项目&#xff08;前端Vue3&#xff0c;后端SpringBoot&#xff09;&#xff0c;SpringBoot 使用 Docker 部署&#xff0c;前端访问服务接口时出现跨域问题。 不知道什么是跨域问题的小伙伴可以查看另一篇文章&…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案

一&#xff0c;什么是缓存穿透、雪崩、击穿&#xff1f; 1、缓存穿透&#xff1a; 是指用户查询数据&#xff0c;在数据库没有&#xff0c;自然在缓存中也不会有。这样就导致用户查询的时候&#xff0c;在缓存中找不到&#xff0c;每次都要去数据库再查询一遍&#xff0c;然后…

CSS 选择器

前言 基础选择器 以下是几种常见的基础选择器。 标签选择器&#xff1a;通过HTML标签名称选择元素。 例如&#xff1a; p {color: red; } 上述样式规则将选择所有<p>标签 &#xff0c;并将其文字颜色设置为红色。 类选择器&#xff1a;通过类名选择元素。使用类选择…

docker cURL error 6: Could not resolve host

场景&#xff1a; 微信小程序 获取 用户 openpid&#xff0c;在此之前&#xff0c;我需要先 "获取稳定版接口调用凭据"&#xff0c;根据手册提示的&#xff0c;要先调用 https://api.weixin.qq.com/cgi-bin/stable_token 我这边就开始了请求&#xff0c;结果返回了…

函数性能探测:更简单高效的 Serverless 规格选型方案

作者&#xff1a;拂衣、丛霄 2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算成为云计算新范式。Serverless 为应用开发提供了一种全新系统架构。借助 2023 年由 OpenAI 所带来的 AIGC 风潮&#xff0c;以阿里云函数计算 FC、AWS Lambda 为代表的 Serverless 以其更高…

Flink的常用算子以及实例

1.map 特性&#xff1a;接收一个数据&#xff0c;经过处理之后&#xff0c;就返回一个数据 1.1. 源码分析 我们来看看map的源码 map需要接收一个MapFunction<T,R>的对象&#xff0c;其中泛型T表示传入的数据类型&#xff0c;R表示经过处理之后输出的数据类型我们继续往…

在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)

前言 如题&#xff0c;具体用到的说明文档如下 virt.spiritlhl.net 具体流程 首先是按照说明&#xff0c;先得看看自己的服务器符不符合安装 Proxmox VE的条件 https://virt.spiritlhl.net/guide/pve_precheck.html#%E5%90%84%E7%A7%8D%E8%A6%81%E6%B1%82 有提到硬件和软…

Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

目录 1.什么是Redis缓存问题&#xff1f; 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染&#xff08;或满了&#xff09; 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案&#xff1a;队列重试机制 6.3 方案&#xff1a;异步更新缓…

基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画&#xff0c; 飞行的背景图 &#xff0c; 子弹图&#xff0c; 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏&#xff0c; 玩家用鼠标操作hero飞行机&#xff0c; 射出子弹杀死敌机&#xff0c;小蜜蜂。 敌机可以获得分数&…

浅谈java自定义中类两个对象的比较

目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例 3.输出 4.原因 2.那么我们要怎么做呢? 1.对Student类中重新实现quals方法(即对equals方法重写) 2.完整代码如下: 3.具体操作 4.演示 1.示例 2.输出 3.原因 实现比较两个对象的大小 第一种: 用…

Android 9.0 Vold挂载流程解析(下)

Android 9.0 Vold挂载流程解析&#xff08;上&#xff09; 前言 上一篇介绍了Android 文件系统中Vold挂载机制的总体框架&#xff0c;我们分析了vod进程的main.cpp.接下来我们分析下存储卡挂载和卸载的流程。 存储卡挂载 在上篇文章文章提到&#xff0c;监听驱动层挂载和卸…

【是C++,不是C艹】 手把手带你实现Date类(附源码)

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 恍惚间&#xff0c;已经两个月没更新了 &#xff08;&#xff1b;д&#xff40;&#xff09;ゞ 我忏…

听GPT 讲Alertmanager源代码--dispatch/silence/inhibit等

目前Alertmanager项目共计53M大小&#xff0c;其中.git占了46M&#xff0c;总的go代码行数不足6万行(包括.pb.go等文件)&#xff0c;不算是一个大项目。 但实现了告警的分发&#xff0c;静默等功能&#xff0c;值的研究&#xff0c;尤其是dispatch中的route部分。 在Prometheus…

2022年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;和数 给定一个正整数序列&#xff0c;判断其中有多少个数&#xff0c;等于数列中其他两个数的和。 比如&#xff0c;对于数列1 2 3 4, 这个问题的答案就是2, 因为3 2 1, 4 1 3。 时间限制&#xff1a;10000 内存限制&#xff1a;65536 输入 共两行&#x…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输…

关于lattice planner

使用编程创建驾驶场景。 1.使用Driving scenario Designer 交互方式创建驾驶场景 2.导出matalb function 3.修正这个函数&#xff0c;创建原始场景的变体。 4.调用这个函数&#xff0c;生成drivingScenario object。 5.在simulink中仿真&#xff0c;导入这个objcet &…