当前位置: 首页 > news >正文

掌握Shell脚本的if语句,让你的代码更加精准和高效

在这里插入图片描述

前言

大家好,我是沐风晓月,本文首发于csdn, 作者: 我是沐风晓月。 文章收录于 我是沐风晓月csdn专栏 【系统架构实战】专栏中的【shell脚本入门到精通】专栏。

本专栏从零基础带你层层深入,学会shell脚本,不是梦。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺 💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

文章目录

  • 前言
  • 一. if条件判断语句
    • 1.1 什么是if条件判断语句
    • 1.2 常用的测试操作符
    • 1.3 if条件判断语句的语法
  • 二. if语句常见案例
    • 2.1 判断系统目录是否存在(if单分支脚本)
    • 2.2 比较两个整数大小(if双分支脚本)
    • 2.3 判断年龄段(if多分支脚本)
  • 三. 拓展
    • 3.1 shell编程中各种括号的对比
    • 3.2 shell脚本中各种引号的对比
  • 总结

一. if条件判断语句

通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断。

1.1 什么是if条件判断语句

if条件判断语句用于根据某些条件来决定是否执行一段代码块;常用的条件有很多,比如命令是否执行成功,可以用 $? 来判断。

而这种使用$?判断的结果无非有两个,一个是执行成功,一个是没有执行成功。 那我们就可以基于这两个条件来加在特定条件下想要执行的命令。

1.2 常用的测试操作符

    1. 文件测试操作

我们常见的测试工具-test命令,这个可以对特定的条件进行测试,并根据返回结果来判断条件是否成立。

语法:

格式一: test 操作符 表达式格式二: [ 操作符 表达式 ]  

常用的文件测试符:

操作符作用
-d测试文件是否为目录文件(Directory)
-f测试文件是否为普通文件(File)
-e测试目录或文件是否存在(Exist)
-s判断文件是否为存字且为非空文件
-N判断文件从上一次被读取之后是否被修改过
-a测试目录或文件是否存在(Exist)建议使用-e,-a可能不准确
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为符号链接(软链接文件)
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件。可用于硬链接,主要判断两个文件是否指向同一个inode。

案例一,判断/root/是否为目录,且输出它的状态码:

[root@mufeng ~]# test -d /root/ && echo $?
0

可以看到如果返回结果为0,说明root是目录

反之返回结果不为零,就不是目录

[root@mufeng ~]# test -d a.txt  ; echo $?
1

这里使用的&& 和;有什么区别?

其实除了&&和; 还有 ||,具体的区别如下:

  • &&: 逻辑与(and)

当使用 && 分隔两个命令时,如果第一个命令执行成功(返回值为 0),则会执行第二个命令。如果第一个命令执行失败(返回值非 0),则第二个命令不会执行。

  • ; 表示顺序执行

当使用 ; 分隔两个命令时,无论第一个命令执行成功与否,都会执行第二个命令。

  • || 逻辑或(or)

当使用 || 分隔两个命令时,如果第一个命令执行失败(返回值非 0),则会执行第二个命令。如果第一个命令执行成功(返回值为 0),则第二个命令不会执行

综上所述,三个命令分隔符的区别如下:

  • &&:只有前一个命令执行成功时,才会执行后一个命令。
  • ;:无论前一个命令执行成功与否,都会执行后一个命令。
  • ||:只有前一个命令执行失败时,才会执行后一个命令。

案例二: 使用文件测试符来判断

[root@mufeng ~]# [ -d /root/ ];echo $?
0
[root@mufeng ~]# [ -f /root/ ];echo $?
1
[root@mufeng ~]# 

这个时候没有使用test,其实效果是一样,只不过这里要用[]来框起来。

    1. 整数测试

整数之间也可以比较,整数之间的比较使用的操作符如下:

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

使用的语法:

[  整数变量1  操作符  整数变量2  ] ​test 整数变量1  操作符  整数变量2

案例一: 测试3大于5

[root@mufeng ~]# [ 3 -gt 5 ]; echo $?
1
# 使用变量的形式
[root@mufeng ~]# a=3
[root@mufeng ~]# b=5[root@mufeng ~]# [ $a -gt $b ];echo $?
1
[root@mufeng ~]# 

案例二 查询当前目录下的文件数是否小于100,如果小于则提示

[root@mufeng ~]# test `ls|wc -l` -lt 100 && echo "文件数小于100"文件数小于100
    1. 字符串测试
      字符串的测试,不能够使用 le等等参数,那些参数只用于数字,那字符串的对比测试是如何来做呢?
操作符作用
=字符串内容相同
!=字符串内容不同,! 号表示相反的意思
-z字符串内容为空
-n字符是否存在

字符比较的语法格式:

 [ "字符串1"  =  "字符串2"  ]   //测试字符串1和字符串2的内容是否相同[ "字符串1" !=  "字符串2”  ]   //测试字符串1和字符串2的内容是否不同[ -z "字符串" ]    //测试字符串是否为空,或者指定的变量是否为空值。(测试字符串的长度是否为零)[ -n "字符串" ]    //测试字符串是否存在,即是否不为空。(测试字符串的长度是否非零)

-n不为空这里,我们可以用来判断对方输入的密码长度是否为空

思考: -z 和-n的区别?

在 shell 脚本中,-z 和 -n 是用于测试字符串长度的条件测试操作符。

-z 字符串 返回真(即退出状态为 0),如果字符串的长度为零。

-n 字符串 返回真(即退出状态为 0),如果字符串的长度非零。

所以,区别在于它们检查字符串长度的条件不同。

如果你想测试一个字符串是否为空,使用 -z;

如果你想测试一个字符串是否非空,使用 -n。

案例一: 判断用户输入的密码是否为空

[root@mufeng ~]# vim passwd.sh
[root@mufeng ~]# chmod +x passwd.sh 
[root@mufeng ~]# ./passwd.sh 
请输入你的密码:
当前未输入任何内容
[root@mufeng ~]# cat passwd.sh 
#!/bin/bash
read -p "请输入你的密码:" passwd[ -z $passwd ]  && echo "当前未输入任何内容"

案例二: 判断两个字符串是否相等

[root@mufeng ~]# cat passwd.sh 
#!/bin/bash
sth=adbd
read -p "请输入你的密码:" passwd[ $sth = $passwd ]  && echo "当前密码符合要求"
[root@mufeng ~]# ./passwd.sh 
请输入你的密码:adbd
当前密码符合要求
[root@mufeng ~]# 

这里我们使用的read 获取键盘输入,所获取到的一定是个字符串,但有时候我们直接定义的一些参数或者截取的参数,无法判断是字符串的时候,需要加 ""才能进行字符串的判断。

    1. 逻辑运算符

逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与",“逻辑或”,"逻辑否"三种。

常见的逻辑运算符:

  • -a或&& :逻辑与,“而且”的意思,全真才为真。

  • -o或|| :逻辑或,“或者”的意思,一真即为真。

  • ! :逻辑否。

在上面的案例中,其实我们已经用到了比如 &&

比如我们可以这么用:


[root@mufeng ~]# [ 1 -lt 2 ] && [ 1 -gt 4 ] ;echo $?
1

这里的意思就是 1 小于2 ,并且1 大于4, 最终输出结果为 1, 也就是不成立。

但如果用 ||就不一样了

[root@mufeng ~]# [ 1 -lt 2 ] || [ 1 -gt 4 ] ;echo $?
0

这两个式子只要有一个成立即可。

1.3 if条件判断语句的语法

  1. 单分支语句
第一种语法:
if <条件表达式>
then指令
fi第二种语法:推荐使用!
if <条件表达式>;then指令
fi

上文中的“<条件表达式>”位置部分,可以使用test、[]、[[]]、(())等条件表达式
备注:

  • if与条件表达式之间要有空格
  • [ ]与判断条件之间也必须有空格
  • ;前不能有空格
  • 以fi结尾,表示if语句的结束
  1. 双分支语句
if <条件表达式>then指令else指令
fi

例如:

if [ 家里是否有吃的 ]then我们在家吃晚饭else我们去饭馆就餐fi
  1. 多分支语句
if <条件表达式1>; then指令1
elif <条件表达式2>; then指令2
elif <条件表达式3>; then指令3
.......
else指令语句
fi

二. if语句常见案例

2.1 判断系统目录是否存在(if单分支脚本)

#!/bin/bash
#2023-03-09 21:44:53
#By author mufeng
#Judge DIR or Files
#############################if [ ! -d /tmp/mufeng/ ];then   
#判断mufeng目录是否存在,如果不存在,就创建mufeng目录mkdir -p /tmp/mufeng/
fi

运行结果:

[root@mufeng shell]# ll -d /tmp/mufeng/ 
ls: 无法访问/tmp/mufeng/: 没有那个文件或目录
[root@mufeng shell]# bash if_dir.sh 
[root@mufeng shell]# ll -d /tmp/mufeng/
drwxr-xr-x 2 root root 6 3月   9 21:53 /tmp/mufeng/

2.2 比较两个整数大小(if双分支脚本)

#!/bin/bash
#2023-03-09 21:59:10
#By author mufeng
#Judge Number Size
#############################read -p "请输入第一个整数: " NUM1
read -p "请输入第二个整数: " NUM2
if (($NUM1 > $NUM2));thenecho The $NUM1 greate than $NUM2.
elseecho The $NUM1 less than $NUM2.
fi

运行结果:

[root@mufeng shell]# bash if_number.sh 
请输入第一个整数: 56
请输入第二个整数: 12
The 56 greate than 12.
[root@mufeng shell]# 

2.3 判断年龄段(if多分支脚本)


#!/bin/bash
#2023-03-09 22:38:07
#By author mufeng
#Judge age
#############################read -p "请输入你的年龄: " ageif (($age < 8));thenprintf "儿童\n"
elif (($age >= 8 && $age< 18));thenprintf "少年\n"
elif (($age >= 18 && $age < 26));thenprintf "青年\n"
elif (($age >= 26 && $age < 40));thenprintf "壮年\n"
elif (($age >= 40 && $age < 60));thenprintf "中老年\n"
elseprintf "老年\n"
fi

运行结果:

[root@mufeng shell]# bash if_age.sh 
请输入你的年龄: 3
儿童
[root@mufeng shell]# bash if_age.sh 
请输入你的年龄: 56
中老年
[root@mufeng shell]# bash if_age.sh 
请输入你的年龄: 12
少年
[root@mufeng shell]# bash if_age.sh 
请输入你的年龄: 99
老年
[root@mufeng shell]# bash if_age.sh 
请输入你的年龄: 38
壮年

三. 拓展

3.1 shell编程中各种括号的对比

Shell编程中,尤其是使用if语句时,经常会使用()、(())、[]、[[]]、{}等括号,我们来对比下:

  • ( )用于多个命令组、命令替换、初始化数组,多用于SHELL命令组,
    例如:MO=(mo1 mo2 mo3),其中括号左右不保留空格;

  • (( ))整数扩展、运算符、重定义变量值,算术运算比较,例如:((i++))、((i<=100)),
    其中括号左右不保留空格;

  • [ ] bash内部命令,[ ]与test是等同的,正则字符范围、引用数组元素编号,
    不支持±*/数学运算符,逻辑测试使用-a、-o,
    通常用于字符串比较、整数比较以及数组索引,其中括号左右要保留空格;

  • [[ ]]bash程序语言的关键字,不是一个命令,[[ ]]结构比[ ]结构更加通用,
    不支持±*/数学运算符,逻辑测试使用&&、||,通常用于字符串比较、逻辑运算符等,
    其中括号左右要保留空格;

  • {}主要用于命令集合或者范围,例如mkdir -p /data/201{7,8}/,其中括号左右不保留空格。

3.2 shell脚本中各种引号的对比

Shell编程中,不仅会是使用变量,还经常会使用$、\、单引号、双引号、反引号等符号。
如下为几种符号简单区别对比:

  • $主要用于引用变量值,例如定义变量MF=mufeng,引用时,需要用 $MF;

  • \反斜杠,主要是用于对特定的字符实现转义,保留原有意义,例如echo “$MF”结果会打印$MF,而不会打印mufeng;

  • ''单引号 ,单引号又称为强引,不具有变量置换的功能,所有的任意字符还原为字面意义,实现屏蔽Shell元字符的功能;

  • "",双引号又称为弱引,具有变量置换的功能,保留$(使用变量前导符), (转义符), `(反向引号)元字符的功能;

  • 反向引号(``),反引号,位于键盘Tab键上面一行的键,用作命令替换(相当于$(…))。

举例:

[root@mufeng shell]# MF=mufeng[root@mufeng shell]# echo $MF
mufeng[root@mufeng shell]# echo \$MF
$MF[root@mufeng shell]# echo hostname
hostname[root@mufeng shell]# echo '$hostname'
$hostname[root@mufeng shell]# echo `hostname`
mufeng[root@mufeng shell]# echo $(hostname)
mufeng

总结

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 博客主页:mufeng.blog.csdn.net
💕 本文由沐风晓月原创,首发于CSDN博客
💕 全力以赴,持续学习,不负如来不负卿

相关文章:

掌握Shell脚本的if语句,让你的代码更加精准和高效

前言 大家好&#xff0c;我是沐风晓月&#xff0c;本文首发于csdn&#xff0c; 作者: 我是沐风晓月。 文章收录于 我是沐风晓月csdn专栏 【系统架构实战】专栏中的【shell脚本入门到精通】专栏。 本专栏从零基础带你层层深入&#xff0c;学会shell脚本&#xff0c;不是梦。 &…...

音质好的蓝牙耳机有哪些?音质最好的蓝牙耳机排行

说起当代人外出必备是数码产品&#xff0c;蓝牙耳机肯定存在。不管是听歌还是追剧&#xff0c;蓝牙耳机在音质上的表现也是越来越好了。下面&#xff0c;我来给大家推荐几款音质好的蓝牙耳机&#xff0c;一起来看看吧。 一、南卡小音舱蓝牙耳机 参考价&#xff1a;259 蓝牙版…...

一次Android App NDK崩溃问题的分析及解决

文章目录小结NDK崩溃的问题通过logcat查看崩溃日志提取tombstone的记录通过ndk-stack来输出日志取得的日志分析并解决分析使用add2line定位具体报错的行数解决参考小结 最近碰一次Android App NDK崩溃的问题&#xff0c;这个NE&#xff08;Native Exception&#xff09;是从ND…...

因果图判定表法

因果图&判定表法 在了解了等价类和边界值比较适宜搭档的测试用例方法之后 接下来我们来了解另外一队就是因果图和判定表 因果图会产生判定表法 因果图法 等价类划分法和边界值分析方法都是着重考虑输入条件而不考虑输入条件的各种组合、输入条件之间的相互制约关系。例…...

Oracle 数据库相关信息清单列表

Oracle 数据库相关信息清单列表 一、设置Oracle安装目录 Oracle基目录(ORACLE_BASE):D:\databases\oracle\oracle_11g\app\Administrator 软件位置(ORACLE_HOME):D:\databases\oracle\oracle_11g\app\Administrator\product\11.2.0\dbhome_1 数据库文件位置:D:\databa…...

射频资料搜集--推荐几个网站和链接

https://picture.iczhiku.com/resource/eetop/wHKYFQlDTRRShCcc.pdfhttps://picture.iczhiku.com/resource/eetop/wHKYFQlDTRRShCcc.pdfVCO pulling的资料 模拟滤波器与电路设计手册 - 射频微波仿真 - RF技术社区 Practical RF Amplifier Design Using the Available Gain Pr…...

B1048 数字加密

decription 本题要求实现一种数字加密方法。首先固定一个加密用正整数 A&#xff0c;对任一正整数 B&#xff0c;将其每 1 位数字与 A 的对应位置上的数字进行以下运算&#xff1a;对奇数位&#xff0c;对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 …...

Qt使用FFmpeg播放视频

一、使用场景 因为项目中需要加载MP4播放开机视频&#xff0c;而我们的设备所使用的架构为arm架构&#xff0c;其中缺乏一些多媒体库。安装这些插件库比较麻烦&#xff0c;所以最终决定使用FFmpeg播放视频。 二、下载编译ffmpeg库 2.1 下载源码 源码下载路径&#xff1a;http…...

Win32 ListBox控件

Win32 ListBox控件 创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …...

最大值池化与均值池化比较分析

1 问题在深度学习的卷积网络过程中&#xff0c;神经网络有卷积层&#xff0c;池化层&#xff0c;全连接层。而池化层有最大值池化和均值池化两种情况&#xff0c;而我们组就在思考&#xff0c;最大值池化和均值池化有什么区别呢&#xff1f;两者的模型准确率是否有所不同&#…...

统计学 多元线性回归

文章目录统计学 多元线性回归多元线性回归模型拟合优度显著性检验线性关系检验回归系数检验多重共线性及其处理多重共线性的问题多重共线性的识别与处理变量选择利用回归方程进行预测哑变量回归统计学 多元线性回归 多元线性回归模型 多元线性回归模型&#xff1a;设因变量为…...

tar和gzip压缩和解压

打包和压缩的区别&#xff1a;打包&#xff1a;将多文件 封装在一起压缩&#xff1a;将多文件 封装在一起 通过特定的算法 将冗余的数据 进行删除tar默认是打包命令&#xff0c;如果想用tar进行压缩 必须加选项1、gzip格式压缩&#xff1a;tar zcvf 压缩包包名 文件1 文件2 文件…...

搭建Docker企业私有仓库

什么是仓库 仓库&#xff08;Repository&#xff09;是存储和分发 Docker 镜像的地方。镜像仓库类似于代码仓库&#xff0c;Docker Hub 的命名来自 GitHub&#xff0c;Github 是我们常用的代码存储和分发的地方。同样 Docker Hub 是用来提供 Docker 镜像存储和分发的地方。 谈…...

[NOIP2009 提高组] 最优贸易(C++,tarjan,topo,DP)

题目描述 $C 国有国有国有 n 个大城市和个大城市和个大城市和 m$ 条道路&#xff0c;每条道路连接这 nnn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mmm 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的…...

计算机网络:移动IP

移动IP相关概念 移动IP技术是移动结点&#xff08;计算机/服务器&#xff09;以固体的网络IP地址&#xff0c;实现跨越不同网段的漫游功能&#xff0c;并保证了基于网络IP的网络权限在漫游中不发生任何改变。移动结点&#xff1a;具有永久IP地址的设备。归属代理&#xff08;本…...

binutils工具集——GNU binutils工具集简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 GNU binutils是一个二进制工具集&#xff0c;主要包括&#xff1a; ld&#xff0c;GNU链接器。as&#xff0c;GNU汇编器。addr2line&#xff0c;把地址转化为文件名和行号。nm&#xff0c;列出目标文件的符…...

Golang编译选项(ldflags)有趣应用

本文介绍如何在构建时使用ldflags选项给Golang应用程序注入变量&#xff0c;用于给Go可执行文件增加版本标识或GIT提交摘要等信息。 应用程序的版本信息 我们首先查看Docker Cli 包含的提交信息&#xff1a; docker version 返回结果&#xff1a; Server: Docker Engine - Co…...

AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动

目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告AIR32F103(二) Linux环境和LibOpenCM3项目模板AIR32F103(三) Linux环境基于标准外设库的项目模板AIR32F103(四) 27倍频216MHz,CoreMark跑分测试AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码AIR32F103(六) ADC,I2S…...

Uipath Excel 自动化基础系列文章

Uipath Excel 自动化基础系列文章已发布到CSDN,网址&#xff1a;https://blog.csdn.net/Marshaljun?typeblog (3月份会在CSDN博客发布Uipath Excel 实战课程及经验分享) Uipath Studio流程设计器介绍 https://blog.csdn.net/Marshaljun/article/details/128699022 Uipath St…...

神经网络优化器之随机梯度下降法的理解

随机梯度下降法&#xff08;SGD&#xff09;随机梯度下降方法&#xff0c;在每次更新时用1个样本&#xff0c;随机也就是说我们用样本中的一个例子来近似我所有的样本&#xff0c;由于计算得到的并不是准确的一个梯度&#xff0c;因而不是全局最优的。但是相比于批量梯度&#…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...