【Linux】shell的条件判断

article/2025/8/4 5:37:00

目录

一.使用逻辑运算符判定命令执行结果

二.条件判断方法 

三.判断表达式

3.1文件判断表达式

3.2字符串测试表达式

3.3整数测试表达式

3.4逻辑操作符


一.使用逻辑运算符判定命令执行结果

  • && 在命令执行后如果没有任何报错时会执行符号后面的动作
  • || 在命令执行后如果命令有报错会执行符号后的动作


二.条件判断方法 

使用测试语句来测试条件表达式的条件真假

实验代码
test "$a" = "$b" && echo yes || echo no    #test
no
[ $a = $b ] && echo yes || echo no    #[]
no
[[ $a =~ 2|10 ]] && echo yes || echo no    #[[]]
yes
(( $a < 0 | $a > 10 )) && echo yes || echo no    #(())
yes


三.判断表达式

3.1文件判断表达式

以下是常用的文件测试操作符

 实验代码

#检测文件是否存在
[ -a "/mnt/fjw" ] && echo yes || echo no
no
touch fjw
[ -a "/mnt/fjw" ] && echo yes || echo no
yes
[ -e "/mnt/fjw" ] && echo yes || echo no
yes#检测文件是否为块设备
[ -b "/dev/sda" ] && echo yes || echo no
yes#检测文件是否为字符设备
[ -c "/dev/pts/0" ] && echo yes || echo no
yes
[ -c "/dev/tty0" ] && echo yes || echo no
yes#检测是否为链接文件
ln -s fjw yyy
[ -L "/mnt/yyy" ] && echo yes || echo no
yes#检测是否为目录
[ -d "/mnt/" ] && echo yes || echo no
yes#检测是否为普通文件
[ -f "/mnt/" ] && echo yes || echo no
no
[ -f "/mnt/yyy" ] && echo yes || echo no
yes#检测是否为套接字
find / -type -s   #查找为套接字的文件
ls -l /run/systemd/journal/dev-log
srw-rw-rw-. 1 root root 0 May 31 11:39 /run/systemd/journal/dev-log 
[ -S "/run/systemd/journal/dev-log" ] && echo yes || echo no        #-S 为检测套接字
yes#检测文件是否设置了suid位
[ -u /mnt/fjw ]&& echo yes || echo no
yes#检测文件是否可读,可写,可执行
[ -r /mnt/fjw ] && echo yes || echo no
yes
[ -w /mnt/fjw ] && echo yes || echo no
yes
[ -x /mnt/fjw ] && echo yes || echo no
no#检测两个文件的新旧
[ "fjw" -nt "fjwyyy" ] && echo yes || echo no
no
[ "fjw" -ot "fjwyyy" ] && echo yes || echo no
yes#检测两个文件的节点号是否相同
ls -i    #查看文件节点号
[ "fjw" -ef "fjwtest" ] && echo yes || echo no
yes


3.2字符串测试表达式

常用的判断字符串操作符

#检测字符串是否为空
a=""
b=1
[ -z "$a" ] && echo yes || echo no
yes
[ -n "$a" ] && echo yes || echo no
no#检测字符串是否相等
[ "$USER" = "root" ] && echo yes || echo no
yes
su - yyy
[ "$USER" = "root" ] && echo yes || echo no
no


3.3整数测试表达式

常用的判断整数操作符

这里只拿[]与(())来做演示

#[]
a=1
[ "$a" -eq "1" ] && echo yes || echo no
yes
[ "$a" -ne "1" ] && echo yes || echo no
no
[ "$a"  -gt "2" ] && echo yes || echo no
no
[ "$a"  -ge "2" ] && echo yes || echo no
no
[ "$a"  -lt "2" ] && echo yes || echo no
yes
["$a"  -le "2" ] && echo yes || echo no
yes#(())
a=1
(($a==2)) && echo yes || echo no    #这里要用==,使用=会识别成赋值
no
(($a==2)) && echo yes || echo no
no
(($a!=2)) && echo yes || echo no
yes
(($a>2)) && echo yes || echo no
no
(($a>=2)) && echo yes || echo no
no
(($a<2)) && echo yes || echo no
yes
(("a"<="2")) && echo yes || echo no
yes


3.4逻辑操作符

[ ! -e /mn ] && echo yes
yesa=5
[ "$a" -lt "10" -a "$a" -gt "0" ] && echo yes || echo no
yes
[[ "$a" -lt "10" && "$a" -gt "0" ]] && echo yes || echo no
yes
[[ $a < 10 && $a > 0 ]] && echo yes || echo no
no
(($a<10 && $a>0)) && echo yes || echo no
yes
(($a<3 || $a>10)) && echo yes || echo no
no


http://www.hkcw.cn/article/hpbIVdILkm.shtml

相关文章

Codeforces Round 1028 (Div. 2)(ABC)

A. Gellyfish and Tricolor Pansy 翻译&#xff1a; 水母和小花在玩一个叫 “决斗 ”的游戏。 水母有 a HP&#xff0c;花花有 b HP。 它们各有一个骑士。水母的骑士有 c HP&#xff0c;而花花的骑士有 d HP。 他们将进行一轮游戏&#xff0c;直到其中一方获胜。对于 k1、2、.…

智能化程度越高,算法“越狱”也会越来越多

前两天&#xff0c;有关美国人工智能&#xff08;AI&#xff09;公司OpenAI旗下推理大模型o3首次出现“不听人类指挥&#xff0c;拒绝关闭”的消息引发高度关注。这种现象应该不算技术性“错误”&#xff0c;而是算法&#xff08;无意识性&#xff09;“失误”——“算法越狱”…

Redis最佳实践——性能优化技巧之Pipeline 批量操作

Redis Pipeline批量操作在电商应用中的性能优化技巧 一、Pipeline核心原理与性能优势 1. 工作机制对比&#xff1a; sequenceDiagramtitle 常规请求 vs Pipeline请求# 常规模式Client->>Redis: 命令1Redis-->>Client: 响应1Client->>Redis: 命令2Redis--&g…

机器人学基础——正运动学(理论推导及c++实现)

机器人正运动学 机器人正运动学一般是指从机器人的关节位置到基于参考坐标系下末端执行器的位置。 平移变换和旋转变换 平移变换 假设我们有两个坐标系A和B&#xff0c;坐标系A与B的方位相同&#xff0c;xyz轴的指向都是一致的&#xff0c;即没有旋转变换。有一点p&#xf…

玉渊谭天:中方香会行动的三个细节 现场观察与国际反响

在第22届香格里拉对话会上,观察到了几个细节,这些细节揭示了中方在这次对话会上的行动。在第一场全体会议上,国防大学的张弛教授提问美国国防部长如何处理美国联盟与东盟国家之间的关系。柬埔寨等东盟国家代表向张弛表示感谢,认为他的提问触及了关键问题,反映了东盟国家的…

Python-13(永久存储)

创建并打开文件 open(file,mode)函数 该函数用于打开一个文件并返回对应的文件对象。 file参数指定的是文件路径和文件名&#xff0c;如果没有添加路径&#xff0c;那么默认将文件创建在python的主文件夹里面。mode参数指定的是打开的模式&#xff0c;r表示读取&#xff08;…

linux驱动开发(1)-内核模块

内核模块 模块最大的好处是可以动态扩展应用程序的功能而无须重新编译链接生成新的应用程序镜像&#xff0c;在微软的Windows系统上动态链接库DLL&#xff08;Dynamic Link Library&#xff09;&#xff0c;Linux系统上的共享库so&#xff08;shared object&#xff09;文件的…

【ISP算法精粹】动手实战:用 Python 实现 Bayer 图像的黑电平校正

在数字成像领域&#xff0c;图像信号处理器&#xff08;ISP&#xff09;如同幕后英雄&#xff0c;默默将传感器捕获的原始数据转化为精美的图像。而黑电平校正&#xff0c;作为ISP预处理流程中的关键一环&#xff0c;直接影响着最终图像的质量。今天&#xff0c;我们就通过Pyth…

【数据结构】顺序表和链表详解(上)

前言&#xff1a;上期我们介绍了算法的复杂度&#xff0c;知道的算法的重要性同时也了解到了评判一个算法的好与坏就去看他的复杂度(主要看时间复杂度)&#xff0c;这一期我们就从顺序表和链表开始讲起。 文章目录 一&#xff0c;顺序表1&#xff0c;线性表2&#xff0c;顺序表…

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;默认通过 pacman 安装&#xff09;目标工具链&#xff1a; pipxnumpypipsetuptoolswheel &#x1f6e0;️ 安装过程与结果记录…

sqli-labs靶场32-37关(宽字节注入)

目录 前言 less32&#xff08;宽字节注入&#xff09; less33&#xff08;宽字节注入&#xff09; less34&#xff08;POST型宽字节注入&#xff09; less35&#xff08;数字型闭合宽字节&#xff09; less36&#xff08;宽字节注入&#xff09; less37&#xff08;POST…

SRE 基础知识:在站点可靠性工程中可以期待什么

作者&#xff1a;来自 Elastic Elastic Observability Team 在过去的 20 年里&#xff0c;大多数领先企业已经采用云计算和分布式系统来开发它们的应用程序。一个意想不到的后果是&#xff1a;传统的 IT 运维&#xff08; IT operations - ITOps &#xff09;常常难以应对日益增…

day16 leetcode-hot100-31(链表10)

25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 1.模拟法 思路 将这个过程拆解为两个步骤&#xff0c;第一步将单分组的节点反转&#xff0c;第二步将反转后的链表加入原链表。 针对节点反转很容易&#xff0c;参考之前的206. 反转链表 - 力扣&#xff08;Le…

黑马Java面试笔记之Redis篇(使用场景)

1.面试题 我看你做的项目中&#xff0c;都用到了redis&#xff0c;你在最近的项目中那些场景使用了redis呢 2.提问的底层逻辑 面试官提问你这个问题一是想验证你的项目场景的真实性&#xff0c;二是为了作为深入发问的切入点 3.延伸出来的知识点 3.1 缓存 缓存三兄弟&#x…

PyTorch -TensorBoard的使用 (一)

设置环境 新建python文件 .py 安装Tensorboard 在终端进行安装 显示安装成功 两个logs&#xff0c;出现这种情况怎么解决 所有的logs文件删掉delete&#xff0c;重新运行 add_image 不满足要求 Opencv-numpy 安装Opencv add_image 用法示例 &#xff08;500&#xff0c;375&am…

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题

运行Qt串口通信 open(QIODevice::ReadWrite) 时&#xff0c;总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…

[yolov11改进系列]基于yolov11引入迭代注意力特征融合iAFF的python源码+训练源码

【iAFF介绍】 1. IAFF&#xff08;迭代注意力特征融合&#xff09; iAFF通过引入多尺度通道注意力模块和迭代融合&#xff0c;更好的整合不同尺度和语义不一致的特征&#xff0c;有效解决特征融合问题&#xff0c;提高目标检测的精度。 特征融合&#xff0c;即不同层或分支的…

springboot-响应接收与ioc容器控制反转、Di依赖注入

1.想将服务器中的数据返回给客户端&#xff0c;需要在controller类上加注解&#xff1a;ResponseBody; 这个注解其实在前面已经使用过&#xff0c;RestController其实就包含两个注解&#xff1a; Controller ResponseBody 返回值如果是实体对象/集合&#xff0c;将会转换为j…

idea中springboot2.7(由于步入另一个线程,已跳过 xxx 处的断点)

idea springboot2.7 debug 问题 springboot 2.7 debug 模式时引入 spring-boot-devtools 卡在代码中不往下执行&#xff0c;提示&#xff1a;由于步入另一个线程&#xff0c;已跳过 xxx 处的断点。 原因 springboot 2.7 引入 spring-boot-devtools <!-- debug时不推荐开…

ROS应用之如何配置RTOS满足机器人系统中的实时要求

如何配置RTOS以满足机器人系统中的实时要求 前言 实时操作系统&#xff08;RTOS&#xff09;在机器人系统中的应用至关重要&#xff0c;尤其在需要对环境变化做出快速反应的高精度控制系统中。ROS2作为开源机器人操作系统&#xff0c;为机器人提供了强大的框架和工具链&#x…