BASH shell脚本篇2——条件命令
这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令
1. If语句
if语句用于在顺序执行语句的流程中执行条件任务。If语句通常用于在Bash脚本中做出决定。它们根据可能设置的条件来决定是否运行一段代码。if语句的语法格式有几种,如下:
# 1. if语句基本格式:
# 注意:观察第一行中使用的空格,在第一行末尾使用分号。两者都必须使
# 用,if条件语句以fi结尾
if [ condition ];
then
statements
fi# 2. if-else语法格式:
if [ condition ];
then <if block commands>
else <else block commands>
fi# 3. else-if语法格式:
if [ condition ];
then
<commands>
elif [ condition ];
then
<commands>
else
<commands>
fi
if语句condition中可以包含一些操作符去处理更复杂的场景。以下是一些最常用的操作符:
| 操作符 | 描述 |
| ! EXPRESSION | 检查EXPRESSION是否为假 |
| -n STRING | 检查STRING的长度是否大于零 |
| -z STRING | 检查STRING的长度是否为零(即为空) |
| STRING1 == STRING2 | 检查STRING1是否等于STRING2 |
| STRING1 != STRING2 | 检查STRING1是否不等于STRING2 |
| INTEGER1 -eq INTEGER2 | 检查INTEGER1在数值上是否等于INTEGER2 |
| INTEGER1 -gt INTEGER2 | 检查INTEGER1在数值上是否大于INTEGER2 |
| INTEGER1 -lt INTEGER2 | 检查INTEGER1在数值上是否小于INTEGER2 |
| -d FILE | 检查FILE是否存在并且它是一个目录 |
| -e FILE | 检查FILE是否存在 |
| -r FILE | 检查FILE是否存在,并授予读取权限 |
| -s FILE | 检查FILE是否存在并且其大小大于零(表示它不为空) |
| -w FILE | 检查FILE是否存在并授予写权限 |
| -x FILE | 检查FILE是否存在并授予执行权限 |
2. case语句
Bash case语句是具有许多ELIF元素的IF-THEN-ELSE的最简单形式。使用case语句使bash脚本更具可读性,并且更易于维护。它通常用于简化具有多种不同选择的复杂条件。case语句的语法如下:
case expression in pattern_1) statements ;; pattern_2) statements ;; pattern_3|pattern_4|pattern_5) statements ;; pattern-n) statements ;; *) statements ;;
esac
# 包含语句的模式称为子句,并且必须以双分号(;;)终止
# 星号(*)用作定义默认情况的最终模式。当用作最后一种情况时,它用作默认情况
首先,case语句扩展表达式并尝试与每个包含的模式匹配。找到匹配项后,将执行所有链接的语句,直到双分号(;;)为止。在第一个匹配项之后,case以最后执行的语句的退出状态终止。
如果没有匹配的模式,则case的退出状态为零。否则,返回状态是已执行语句的退出状态。
如果使用默认的星号(*)模式,则在没有匹配模式的情况下将执行它。
3. for循环
bash shell脚本也支持for循环以执行重复性任务。它有助于在字符串中的一系列单词或数组中的元素上迭代一组特定的语句。例如,可以多次运行UNIX命令(或任务),也可以仅使用for循环读取和处理命令列表。
可以通过两种方式在bash脚本上应用for循环。一种方法是for-in,另一种方法是C语言语法。for循环的语法:
# 方法1,list可以包含数字或字符串等,以空格分隔
for variable in list
do
commands
done
# 方法2
for (( expression1; expression2; expression3 ))
do
commands
done
当bash的三个表达式中没有“开始,条件和增量”循环时,它将变为无限循环。要终止Bash中的无限循环,可以按Ctrl + C。
4. while循环
while循环可以定义为控制流语句,只要所应用的条件为真,该语句就允许重复执行给定的命令集。例如,可以运行多次echo命令,也可以仅逐行读取文本文件,然后使用Bash中的while循环处理结果。while循环格式:
while [ expressions ];
do
commands;
multiple commands;
done
# expressions可以是单条件或多条件
5. until循环
until循环用于根据表达式的布尔结果重复执行一组命令。仅在表达式的值为真之前执行命令集。因此当表达式的计算结果为false时,将迭代执行一组命令。当表达式首次为真时,循环终止。until循环与while循环相似,但是概念相反。until循环的语法格式:
until [ expressions ];
do
command1
command2
. . .
. . .
commandN
done
6. break和continue
可以在循环中使用break语句来终止循环。可以在循环中使用continue语句来跳过特定条件下的特定语句。它告诉Bash停止执行循环的特定迭代并处理下一个迭代。

相关文章:
BASH shell脚本篇2——条件命令
这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if语句用于在顺序执行语句的流程中执行条…...
【图论C++】Floyd算法(多源最短路径长 及 完整路径)
>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记ÿ…...
小谈设计模式(11)—模板方法模式
小谈设计模式(11)—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类(Abstract Class)具体子类(Concrete Class)抽象方法(Abstract Method)具体方法(C…...
C#程序中很多ntdll.dll、clr.dll的线程
如下图 需要“右键工程——调试——取消勾选‘启用本地代码调试’”即可。...
低代码工作流程管理系统:提升企业运营效率的利器
业务运营状况是否良好,除了人员需要配合以外,真正发挥作用的是背后的工作流程。将重复的工作进行自动化处理,确保这些流程最终指向同一个目标、实现一致的运营结果。而设计和实施不佳的工作流程则产生相反的效果——导致处理时间延长、运营成…...
HIVE SQL regexp_extract和regexp_replace配合使用正则提取多个符合条件的值
《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。 如何使用regexp_extract®exp_replace函数将以上文本中所有书籍名称都提取出来? select substr(regexp_replace(regexp_extract(regexp_…...
debian 安装matlab2022b报错解决方法与问题解决思路
报错 terminate called after throwing an instance of ‘std::runtime_error’ 在安装目录执行 ./bin/glnxa64/MATLABWindow通过执行以上命令发现是和libharfbuzz库有关。 该库在调用freetype库时,有方法找不到。 偿试remove freetype库,发现该库有大…...
Jenkins集成AppScan实现
一、Jenkins上安装插件 在Jenkins里安装以下插件 ibm-security-appscanstandard-scanner 二、打开AppScan 1、配置需要扫描的地址 配置需要扫描的地址 2、记录好要扫描的URL登录序列 记录好要扫描的URL登录序列 3、导出要扫描的URL登录序列设置 导出要扫描的URL登录序列设置 三…...
10.1 File类
前言: java.io包中的File类是唯一一个可以代表磁盘文件的对象,它定义了一些用于操作文件的方法。通过调用File类提供的各种方法,可以创建、删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间&…...
[论文笔记]UNILM
引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…...
LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略
LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略 导读:2023年9月25日,Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节,主要核心要点总结如下: >> 数据处…...
国庆作业2
select实现服务器并发 代码: #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[]) {//创建流式套接字…...
fork仓库的代码如何同步主仓库代码
1.背景 我fork了一份 jekyll-theme-chirpy 仓库的代码(基于 jekyll 的自建博客仓库,可以免服务器),我需要在上面更新我的博客文章,但是我又想一直同步 jekyll-theme-chirpy 仓库的新功能,这样我可以更新自己的博客功能。所以我就…...
【Axure】元件库和母版、常见的原型规范、静态原型页面制作
添加现有元件库 点击元件库——载入 当然也可以创建元件库,自己画自己保存 建立京东秒杀母版 静态原型页面的制作 框架 选择以iphone8的界面大小为例,顶部状态栏高度为20 左侧类似于标尺,因为图标、文字离最左侧的间距是不一样的 信…...
在设备树中描述中断
参考文档: 内核 Documentation\devicetree\bindings\interrupt-controller\interrupts.txt 在设备树中,中断控制器节点中必须有一个属性: interrupt-controller,表明它是“中断控制器”。 还必须有一个属性: #interru…...
ccf_csp第一题汇总
ccf_csp第一题汇总 printf()输出格式大全(附 - 示例代码)现值计算AcWing 4699. 如此编码AcWing 4509. 归一化处理(小数位数根号函数)AcWing 4454. 未初始化警告AcWing 4280. 序列查询AcWing 4006. 数组推导(小陷阱)AcWing 3292. 称检测点查询AcWing 3287…...
uniapp 实现下拉筛选框 二次开发定制
前言 最近又收到了一个需求,需要在uniapp 小程序上做一个下拉筛选框,然后找了一下插件市场,确实有找到,但不过他不支持搜索,于是乎,我就自动动手,进行了二开定制,站在巨人的肩膀上&…...
实现单行/多行文本溢出
在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要我们把溢出的文本显示成省略号。 一. 单行文本溢出 即文本在一行内显示,超出…...
Spring Boot中的Binder类
介绍 Spring Boot中的Binder类是一个用于绑定属性的工具类。它可以将配置文件中的属性值绑定到Java对象中,从而方便地进行配置管理。 简单示例 import org.springframework.boot.context.properties.bind.Binder; import org.springframework.core.env.Environmen…...
leetcode之打家劫舍
leetcode 198 打家劫舍 leetcode 213 打家劫舍 II leetcode 337. 打家劫舍 III 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
