【Shell】if表达式

1. 文件测试条件

Shell 提供了丰富的文件测试选项来检测文件或目录的存在、类型及权限等。以下是所有常用的文件测试选项:

测试选项解释
-e检查文件或目录是否存在
-f检查是否为普通文件(非目录或设备文件)
-d检查是否为目录
-r检查文件是否可读
-w检查文件是否可写
-x检查文件是否可执行
-L检查文件是否为符号链接
-h检查文件是否为符号链接(与 -L 相同)
-p检查文件是否为命名管道(FIFO)
-S检查文件是否为套接字文件
-b检查文件是否为块设备文件
-c检查文件是否为字符设备文件
-s检查文件是否非空
-t检查文件描述符是否关联到终端(通常用于测试 stdin
-g检查文件是否设置了 SGID(Set Group ID on execution)位
-u检查文件是否设置了 SUID(Set User ID on execution)位
-k检查文件是否设置了粘滞位(Sticky Bit)
-O检查文件是否由当前用户拥有
-G检查文件是否由当前用户所在的组拥有
-N检查文件是否自上次访问后被修改
示例:
if [ -L "/path/to/symlink" ]; thenecho "这是一个符号链接"
fi

2. 数值比较条件

在 shell 中,数值比较使用以下运算符:

比较运算符解释
-eq等于(equal)
-ne不等于(not equal)
-gt大于(greater than)
-ge大于或等于(greater or equal)
-lt小于(less than)
-le小于或等于(less or equal)
示例:
if [ "$a" -lt 100 ]; thenecho "a 小于 100"
fi

3. 字符串比较条件

用于字符串的比较选项如下:

比较运算符解释
=字符串相等(注意:有些 shell 需要使用 ==
!=字符串不相等
-z字符串长度为零
-n字符串长度非零
示例:
if [ "$str1" = "$str2" ]; thenecho "str1 和 str2 相等"
fiif [ -z "$str1" ]; thenecho "str1 是空的"
fi

4. 逻辑运算符

用于将多个条件组合在一起的运算符:

运算符解释
&&逻辑与(两个条件都为真)
`
示例:
if [ "$a" -lt 10 ] && [ "$b" -gt 5 ]; thenecho "a 小于 10 且 b 大于 5"
fi

5. 条件组合(复合条件)

Shell 支持多个条件组合在一起进行判断,例如使用 [[ ... ]] 可以简化条件的书写并避免一些常见的错误。下面是复合条件的一些特殊符号和逻辑运算符:

运算符解释
[[ ... ]]扩展的测试命令,支持复杂的逻辑条件和模式匹配。通常比 [...] 更加安全和强大。
!取反操作符,用于否定条件
示例:
if [[ "$a" -lt 10 && "$b" -gt 5 ]]; thenecho "a 小于 10 且 b 大于 5"
fi

6. 算术条件

(( ... )) 用于进行算术运算,常用于数值计算和逻辑判断。

运算符解释
+加法
-减法
*乘法
/除法
%取模运算
==判断相等(数值比较)
!=判断不等(数值比较)
<小于(数值比较)
>大于(数值比较)
<=小于或等于(数值比较)
>=大于或等于(数值比较)
示例:
if (( a + b == 10 )); thenecho "a 和 b 之和为 10"
fi

7. 高级字符串模式匹配

[[ ... ]] 语法中可以使用字符串模式匹配,例如使用通配符或正则表达式。

运算符解释
==字符串相等,支持通配符
=~正则表达式匹配(Bash 特性)
示例:
if [[ "$string" == "hello*" ]]; thenecho "字符串以 hello 开头"
fiif [[ "$string" =~ ^[0-9]+$ ]]; thenecho "字符串全是数字"
fi

8. 位运算符

Shell 还支持位运算符(主要在算术条件中使用):

运算符解释
&位与(AND)
``
^位异或(XOR)
<<左移
>>右移
示例:
if (( a & 1 )); thenecho "a 是奇数"
fi

9. 整数比较运算符(用于 (( ... ))let 命令)

除了上述的 -eq-lt 等运算符外,在 (( ... ))let 命令中可以使用经典的 C 风格比较运算符,如 ==!=<> 等。

示例:
if (( a == b )); thenecho "a 和 b 相等"
fi

10. 结合 case 语句

除了 if 语句,shell 脚本中还可以使用 case 语句进行模式匹配,它在处理多种情况时非常有用。

示例:
case "$var" instart)echo "启动";;stop)echo "停止";;*)echo "未知命令";;
esac

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

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

相关文章

9.29总结

这星期学了概率和组合数学 这是我觉得的一个有趣的题目&#xff0c;每个人身上都有n-1根绳子&#xff0c;如果组不成稳定三角&#xff0c;那么肯定有两个人相邻两根绳子颜色不一样&#xff0c;那么每两个这样的人就会贡献一个不稳定三角形&#xff0c;所以只要所有三角形减去每…

64.【C语言】再议结构体(下)(未完)

本文衔接第63篇 目录 6.复习 7.修改默认对齐数 8.结构体传参 01.传递非指针参数 02.传递指针参数(传递地址) 03.对比 9.结构体实现位段 01.位段的定义 02.格式 03.例题 答案速查 分析 前置知识:位段的内存分配 解析 若按浪费空间处理 验证 6.复习 20.【C语言…

①三菱Modbus主站MELSEC转ModbusRTU/ASCII工业MELSEC网关串口服务

三菱Modbus主站MELSEC转ModbusRTU/ASCII工业MELSEC网关串口服务https://item.taobao.com/item.htm?ftt&id834634632647 MELSEC 通信单元 MELSEC 转 RS485 MS-A1-80X1 系列概述 型号&#xff1a;1路总线MELSEC网关(单网口&#xff09; MS-A1-8011 1路总线MELSEC网关(双…

A Learning-Based Approach to Static Program Slicing —— 论文笔记

A Learning-Based Approach to Static Program Slicing OOPLSA’2024 文章目录 A Learning-Based Approach to Static Program Slicing1. Abstract2. Motivation(1) 为什么需要能处理不完整代码(2) 现有方法局限性(3) 验证局限性: 初步实验研究实验设计何为不完整代码实验结果…

计算机网络基础--认识协议

目录 前言 一、IP地址与端口 二、网络协议 1.网络体系结构框架 2.网络字节序 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 计算机网络涉及非常广泛&#xff0c;这篇文章主要对计算机网络有个认识 提示&#xff1a;以下是本篇文章正文内容&#x…

C++系列-继承

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 继承的概念和定义 继承是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行拓展&#xff0c;增加功能&#xff0c;这样可以…

【PyTorch】生成对抗网络

生成对抗网络是什么 Generative Adversarial Nets&#xff0c;简称GAN GAN&#xff1a;生成对抗网络 —— 一种可以生成特定分布数据的模型 《Recent Progress on Generative Adversarial Networks (GANs): A Survey》 《How Generative Adversarial Networks and Its Varian…

基于Megatron-LM从0到1完成GPT2模型预训练、模型评估及推理

随着 ChatGPT 迅速爆火&#xff0c;引领基于Transformer架构的大模型从幕后走到台前。但 ChatGPT 的成功并不是一蹴而就&#xff0c;而是&#xff0c;经过了从早期的 GPT1 到 GPT2&#xff0c;之后到 GPT3 和 InstructGPT、然后到GPT3.5和ChatGPT&#xff0c;直到如今的多模态大…

一钉多用:自攻螺钉在家居与工业领域的广泛应用

自攻螺钉的结构要素有哪些重要特点&#xff1f; 自攻螺钉适用于非金属或软金属&#xff0c;不需要配合预先开好的孔和攻牙。自攻螺钉的尖头设计使其能够“自我攻入”材料中&#xff1b;而普通螺丝通常是平头&#xff0c;规格一致。自攻螺钉的关键在于&#xff0c;打孔时不需要进…

【JavaEE初阶】网络原理

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 ⽹络互连 IP地址 端口号 协议 协议分层 优势 TCP/IP 五层网络模型 数据在网络通信中的整体流程 封装和分用 封装 分用 ⽹络互连 随着时代的发展&#xff0c;越来越需…

Angular基础学习(入门 --> 入坑)

目录 一、Angular 环境搭建 二、创建Angular新项目 三、数据绑定 四、ngFor循环、ngIf、ngSwitch、[ngClass]、[ngStyle]、管道、事件、双向数据绑定--MVVM 五、DOM 操作 &#xff08;ViewChild&#xff09; 六、组件通讯 七、生命周期 八、Rxjs 异步数据流 九、Http …

51单片机的光照强度检测【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块光照传感器按键蜂鸣器LED等模块构成。适用于光照强度检测、光照强度测量报警等相似项目。 可实现功能: 1、LCD1602实时显示光照强度信息 2、光照强度传感器&#xff08;电位器模拟&#xff09;采集光照信息 3、可…

X86架构(九)——保护模式的进入

全局描述符表 全局描述符表(Global Descriptor Table,GDT)是保护模式下非常重要的一个数据结构。 在保护模式下&#xff0c;对内存的访问仍然使用段地址和偏移地址&#xff0c;在每个段能够访问之前&#xff0c;必须先行设置好 GDT 的地址&#xff0c;并加载全局描述符表寄存…

emp.dll丢失怎么解决,快来试试这个几个解决方法

在日常使用电脑玩游戏的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中最常见的就是“emp.dll丢失”。那么&#xff0c;emp.dll到底是什么&#xff1f;它为什么会丢失&#xff1f;丢失后会对我们的电脑产生什么影响&#xff1f;本文将为您详细解析emp.dll的概念…

[BUUCTF从零单排] Web方向 03.Web入门篇之sql注入-1(手工注入详解)

这是作者新开的一个专栏《BUUCTF从零单排》&#xff0c;旨在从零学习CTF知识&#xff0c;方便更多初学者了解各种类型的安全题目&#xff0c;后续分享一定程度会对不同类型的题目进行总结&#xff0c;并结合CTF书籍和真实案例实践&#xff0c;希望对您有所帮助。当然&#xff0…

打造高业绩朋友圈:策略与实践

在数字化时代&#xff0c;朋友圈不仅是个人生活的展示窗口&#xff0c;更是商业变现的有力平台。许多人通过精心经营朋友圈&#xff0c;实现了财富的增长&#xff0c;甚至达到了年入百万的惊人业绩。朋友圈已成为普通人实现逆袭的重要战场。 要打造一个业绩过万的朋友圈&#…

关于武汉芯景科技有限公司的IIC电平转换芯片XJ9509开发指南(兼容PCa9509)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.VCCA1.35V,VCCB5V,A1输入&#xff0c;B1输出 2.VCCA1.35V,VCCB5V,B1输入&#xff0c;A1输出 3.VCCA1.35V,VCCB5V,A2输入&#xff0c;B2输出 4.VCCA1.35V,VCCB5V,B2输入&#xff0c;A2输出

升级 Windows 后如何恢复丢失的文件

升级到 Windows 11 后可以恢复丢失的文件&#xff01;阅读帖子直到最后&#xff0c;了解如何做到这一点。 为了获得安全更新并使用最新的操作系统&#xff0c;人们会升级到最新版本的 Windows。然而&#xff0c;在这样做的过程中&#xff0c;许多人丢失了他们的重要文件&#…

基于SpringBoot+Vue+MySQL的体育商城系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网的飞速发展&#xff0c;电子商务已成为人们日常生活中不可或缺的一部分。体育用品市场作为其中的一个重要分支&#xff0c;也逐渐向线上转移。基于SpringBootVueMySQL的体育商城系统应运而生&#xff0c;旨在通过构建…

优秀的拆分C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 6422221 是一个优秀的拆分。注意&#xff0c;6222 不是一个优秀的拆分&#xff0c;因为拆分成的 3 个数不满足每个数互不相同。 思路&#xff1a; 题目大致意思是说给定一个正整数NN&#xff0c;让你用二进制表示&#xff08;…