Shell 脚本常用命令

news2024/11/17 8:19:00

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

在这里插入图片描述

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

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

相关文章

解决jmeter导入jmx文件报错方法

有的时候我们导入别人的jmx文件&#xff0c;但是在导入的时候会报错&#xff0c;如下图&#xff1a; 这是缺少jmeter插件jar包所引起的&#xff0c;下载对应jar包放到jmeter安装目录对应的lib/ext下就可以了。可以通过插件管理工具包下载安装&#xff0c;也可以直接下载对应的…

Linux命令200例:tar命令主要用于创建、查看和提取归档文件(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

基于开源模型搭建实时人脸识别系统(四):人脸质量

续人脸识别实战之基于开源模型搭建实时人脸识别系统&#xff08;三&#xff09;&#xff1a;人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别&#xff0c;我们都会面临一个问题&#xff0c;就是输入的人脸图像的质量可…

用于优化开关性能的集成异质结二极管的4H-SiC沟道MOSFET

标题&#xff1a;4H-SiC Trench MOSFET with Integrated Heterojunction Diode for Optimizing Switching Performance 摘要 本研究提出了一种新型的4H-SiC沟道MOSFET&#xff0c;其在栅槽底部集成了异质结二极管&#xff08;HJD-TMOS&#xff09;&#xff0c;并通过TCAD模拟进…

Eduma主题 - 线上教育WordPress主题/网站

Eduma主题 – 线上教育WordPress主题是为教育网站、LMS、培训中心、课程中心、学院、大学、学校、幼儿园而制作的。基于我们使用以前的主题eLearning WP构建WordPress LMS的经验&#xff0c;Education WP是下一代&#xff0c;也是围绕WordPress最好的教育主题之一&#xff0c;它…

qemu - 运行树莓派

文章目录 安装 qemu下载树莓派内核使用 qemu 启动树莓派 查看 Mac 配置 uname -a我是 x86 架构&#xff0c;返回如下&#xff1a; $ uname -a Darwin S-iMac.local 22.5.0 Darwin Kernel Version 22.5.0: Mon Apr 24 20:51:50 PDT 2023; root:xnu-8796.121.2~5/RELEASE_X86_6…

基于Java SpringBoot+vue+html 的地方美食系统(2.0版本)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,csdn、博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统流程的分析3.1 用户管理的流程3.2个人中心管理流程3.3登录流程 4系统设计…

网络面试题(172.22.141.231/26,该IP位于哪个网段? 该网段拥有多少可用IP地址?广播地址是多少?)

此题面试中常被问到&#xff0c;一定要会172.22.141.231/26&#xff0c;该IP位于哪个网段&#xff1f; 该网段拥有多少可用IP地址&#xff1f;广播地址是多少&#xff1f; 解题思路&#xff1a; 网络地址&#xff1a;172.22.141.192 10101100.00010110.10001101.11000000 广播…

【react框架】如何手写一个超级mini的React,学完后对框架的理解也会更进一步

文章目录 前言起步工作先看虚拟dom长啥样写个createElement写个render第一次试验了解Fiber写个Fiber化函数改造render未完待续... 前言 本篇文章只是对https://qcsite.gatsbyjs.io/build-your-own-react/网站内容&#xff0c;做的一个内容的压缩&#xff0c;结合上自己的理解与…

iPhone卫星通信SOS功能如何在灾难中拯救生命

iPhone上的卫星紧急求救信号功能在从毛伊岛野火中拯救一家人方面发挥了至关重要的作用。这是越来越多的事件的一部分&#xff0c;在这些事件中&#xff0c;iPhone正在帮助人们摆脱危及生命的情况。 卫星提供商国际通信卫星组织负责移动的高级副总裁Mark Rasmussen在接受Lifewir…

基于springboot+vue的论坛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

EdgeOneToMinIO

省流 使用MinIO作为EdgeOne的源站。 背景介绍 项目中需要一个兼容S3协议的对象存储服务&#xff0c;腾讯云的COS虽然也兼容S3协议&#xff0c;但是也只是支持简单的上传下载&#xff0c;对于上传的时候同时打标签这种需求&#xff0c;就不兼容S3了。所以决定自建一个对象存储…

[技术杂谈]macOS上todesk无法远程操作鼠标键盘

远程到被控Mac后能看到画面&#xff0c;鼠标键盘操作无反应 远程后发现画面显示正常&#xff0c;但是键盘和鼠标的操作没有响应 可能是辅助功能没有勾选ToDesk_Session的权限。 可按以下步骤操作&#xff1a; 1> 在左上角点击苹果图标&#xff0c;选择“系统偏好设置” …

Spring练习-29(角色添加操作)

1、点击新建 2、添加角色名称和信息之后&#xff0c;添加到数据库当中&#xff0c;与此同时你的页面要跳回 3、跳回角色列表页面 4、那是入口&#xff0c;入口就是保存 5、当你保存到表单里就是提交呀&#xff01; 6、流程是我把数据封装给某个方法&#xff1a;------》封装给一…

【Leetcode】108. 将有序数组转换为二叉搜索树

一、题目 1、题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-1…

C++实现字符串的逆置

目录 C和C的区别 【1】C对C的扩充 【2】C对C的兼容 第一个C程序 【1】hello world 【2】cout标准输出流对象 i&#xff09;介绍 ii&#xff09;运算 iii&#xff09;cout的使用 iv&#xff09;使用cout指定格式的输出 练习&#xff1a;1、输出斐波那契的前10项。 【3】…

Vuex从入门到精通

文章目录 前言概念使用场景 搭建vue环境创建文件传入配置项 基本使用初始化数据getters的使用map方法使用 模块化&#xff0c;命名空间目的开启命名空间组件中读取state数据组件中读取getters数据开启命名空间后&#xff0c;组件中调用dispatch开启命名空间后&#xff0c;组件中…

聊聊磁悬浮技术

目录 1.磁悬浮的概念 2.磁悬浮的原理 3.磁悬浮的应用领域 4.磁悬浮技术的发展趋势 1.磁悬浮的概念 磁悬浮&#xff08;Magnetic Levitation&#xff09;&#xff0c;简称磁浮&#xff0c;是一种利用磁场力使物体悬浮在空中的技术。它通过在物体上加上一个磁场&#xff0c;与…

三、SQL注入之报错注入

文章目录 1、 xpath语法&#xff08;1&#xff09;extractvalue&#xff08;2&#xff09;updatexml 2、concatrand()group by()导致主键重复 报错注入就是利用了数据库的某些机制&#xff0c;人为地制造错误条件&#xff0c;使得查询结果能够出现在错误信息中。这里主要介绍报…

SOLIDWORKS基准面介绍

SOLIDWORKS是一款广泛应用于机械设计领域的三维建模软件&#xff0c;其中基准面是在建模过程中必不可少的要素。本文将介绍什么是SOLIDWORKS基准面&#xff0c;以及它在设计中的作用。 SOLIDWORKS基准面是指在设计过程中用来确定草图绘制、特征创建的参考平面。 SOLIDWORKS基…