【Shell】if表达式

news2024/9/29 23:27:29

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" ]; then
    echo "这是一个符号链接"
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 ]; then
    echo "a 小于 100"
fi

3. 字符串比较条件

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

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

if [ -z "$str1" ]; then
    echo "str1 是空的"
fi

4. 逻辑运算符

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

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

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

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

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

6. 算术条件

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

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

7. 高级字符串模式匹配

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

运算符解释
==字符串相等,支持通配符
=~正则表达式匹配(Bash 特性)
示例:
if [[ "$string" == "hello*" ]]; then
    echo "字符串以 hello 开头"
fi

if [[ "$string" =~ ^[0-9]+$ ]]; then
    echo "字符串全是数字"
fi

8. 位运算符

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

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

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

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

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

10. 结合 case 语句

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

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

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

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

相关文章

C程序设计——结构化程序设计的三种结构

前面我说过&#xff1a;“结构化编程语言&#xff0c;用语法限制程序员&#xff0c;只能使用顺序、选择、循环三种结构来解决问题。” 接下来&#xff0c;就讲解这三种结构。 顺序结构 前面我讲过&#xff0c;C语言所有的程序&#xff0c;都必须有一个 main 函数&#xff0c…

TCP\IP标准与OSI标准

TCP/IP 模型和 OSI 模型都是用于描述网络体系结构的模型&#xff0c;但它们的设计理念和层次结构有所不同。TCP/IP 模型更注重实际实现&#xff0c;而 OSI 模型更注重抽象和标准化。 1. OSI 模型 (Open Systems Interconnection Model) OSI 模型是一个七层模型&#xff0c;从…

828华为云征文|部署在线论坛网站 Flarum

828华为云征文&#xff5c;部署在线论坛网站 Flarum 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 Flarum3.1 Flarum 介绍3.2 Flarum 部署3.3 Flarum 使用 四、总结 一、…

针对考研的C语言学习(定制化快速掌握重点2)

1.C语言中字符与字符串的比较方法 在C语言中&#xff0c;单字符可以用进行比较也可以用 > , < ,但是字符串却不能用直接比较&#xff0c;需要用strcmp函数。 strcmp 函数的原型定义在 <string.h> 头文件中&#xff0c;其定义如下&#xff1a; int strcmp(const …

Vue.js组件开发指南

Vue.js组件开发指南 Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;用于构建用户界面。它的核心是基于组件的开发模式。通过将页面分解为多个独立的、可复用的组件&#xff0c;开发者能够更轻松地构建复杂的应用。本文将深入探讨 Vue.js 组件开发的基础知识&#xff0c;并…

基于springoot新能源充电系统的设计与实现

新能源充电系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统新能源充电系统信息管理难度…

国产纯电SUV都在秀,只有Model Y在挨揍

文/王俣祺 导语&#xff1a;如果想知道纯电SUV应该怎么选&#xff0c;一定有人告诉你“无脑选Model Y”&#xff0c;虽说特斯拉确实粉丝多&#xff0c;但这也恰恰证明Model Y一度成为了纯电SUV的标杆。有标杆自然就有挑战者&#xff0c;随着阿维塔07、智己LS6以及乐道L60先后上…

云南省职业院校技能大赛赛项规程(软件测试)

赛项名称&#xff1a;软件测试 英文名称&#xff1a;Software Testing 赛项组别&#xff1a;高等职业教育 赛项编号&#xff1a;GZ034 目录 一、 赛项信息 二、竞赛目标 三、竞赛内容 1、本赛项考查的技术技能和涵盖的职业典型工作任务 2、专业核心能力与职业综合能力…

商标名称注册查询,到底是查询什么!

在商标注册前是需要商标名称注册查询&#xff0c;那这个到底是查询什么&#xff0c;普推知产商标老杨发现&#xff0c;近日国家知产局发布《商标代理委托合同示范文本》征求意见稿&#xff0c;虽然是参考使用不具有强制性&#xff0c;里面对商标名称注册查询描述是申请前商标检…

完成UI界面的绘制

绘制UI 接上文&#xff0c;在Order90Canvas下创建Image子物体&#xff0c;图片资源ui_fish_lv1&#xff0c;设置锚点&#xff08;CountdownPanelImg同理&#xff09;&#xff0c;命名为LvPanelImg,创建Text子物体&#xff0c;边框宽高各50&#xff0c; &#xff0c;重名为LvT…

阻焊层解析:PCB的“保护伞”是什么?

在电子制造行业中&#xff0c;尤其是PCBA贴片加工领域&#xff0c;阻焊层是一个重要的概念。以下是对阻焊层的详细讨论分析&#xff0c;包括其定义、作用以及类型。 阻焊层的定义 阻焊层&#xff0c;顾名思义&#xff0c;是一种用于阻止焊接的材料层。在PCB&#xff08;印刷电…

11.C++程序中的常用函数

我们将程序中反复执行的代码封装到一个代码块中&#xff0c;这个代码块就被称为函数&#xff0c;它类似于数学中的函数&#xff0c;在C程序中&#xff0c;有许多由编译器定义好的函数&#xff0c;供大家使用。下面就简单说一下&#xff0c;C中常用的函数。 1.sizeof sizeof函…

Perceptually Optimized Deep High-Dynamic-RangeImage Tone Mapping

Abstract 我们描述了一种深度高动态范围&#xff08;HDR&#xff09;图像色调映射算子&#xff0c;该算子计算效率高且感知优化。 我们首先将 HDR 图像分解为归一化拉普拉斯金字塔&#xff0c;并使用两个深度神经网络 (DNN) 根据归一化表示估计所需色调映射图像的拉普拉斯金字…

Mybatis缓存机制(图文并茂!)

目录 一级缓存 需求我们在一个测试中通过ID两次查询Monster表中的信息。 二级缓存 案例分许(和上述一样的需求) EhCache第三方缓存 在了解缓存机制之前&#xff0c;我们要先了解什么是缓存&#xff1a; ‌缓存是一种高速存储器&#xff0c;用于暂时存储访问频繁的数据&…

利用大模型改进知识图谱补全的研究

人工智能咨询培训老师叶梓 转载标明出处 尽管现有的基于描述的KGC方法已经利用预训练语言模型来学习实体和关系的文本表示&#xff0c;并取得了一定的成果&#xff0c;但这些方法的性能仍然受限于文本数据的质量和结构的不完整性。 为了克服这些限制&#xff0c;中国科学技术…

PG高可靠模拟

模拟延迟 主库故障&#xff0c;备库尝试切换为主库

9.29 LeetCode 3304、3300、3301

思路&#xff1a; ⭐进行无限次操作&#xff0c;但是 k 的取值小于 500 &#xff0c;所以当 word 的长度大于 500 时就可以停止操作进行取值了 如果字符为 ‘z’ &#xff0c;单独处理使其变为 ‘a’ 得到得到操作后的新字符串&#xff0c;和原字符串拼接 class Solution { …

MySQL - 运维篇

一、日志 1. 错误日志 2. 二进制日志 3. 查询日志 记录了所有的增删改查语句以及DDL语句 4. 慢查询日志 二、主从复制 1. 概述 2. 原理 3. 搭建 三、分库分表 1. 介绍 2. Mycat概述 3. Mycat入门 4. Mycat配置 5. Mycat分片 6. Mycat管理及监控 四、读写分离 1. 介绍 2. 一…

【ADC】使用运算放大器驱动 SAR 型 ADC 时的线性输入范围

概述 本文学习于TI 高精度实验室课程&#xff0c;总结使用运算放大器驱动 SAR ADC 时的注意事项。具体包括&#xff1a;了解运算放大器共模范围和输出摆幅限制如何影响 SAR ADC 性能&#xff0c;研究运算放大器设计技术以避免共模和输出摆幅限制&#xff0c;讨论轨到轨放大器与…

PCB敷铜敷不了相同网络的线怎么办?

图片上的情况就是今天需要讲的内容&#xff0c;可以看出出来的线头是GND,敷的铜也是GND但是相同网络就是不能连在一起。 解释&#xff1a; 这是因为我们敷铜的时候属性选的是连接相同的net,如图所示&#xff1a; 解决办法&#xff1a; 只需要设置改为相同的Object就可以了&…