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

13.bash shell中的if-then语句

文章目录

  • shell中的流控制if语句
    • if语句
      • if-then语句
      • if-then-else 语句
    • test命令
    • 数值比较
    • 字符串比较
    • 文件比较
    • `case`语句


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


shell中的流控制if语句

简单的脚本可以只包含顺序执行的命令,但结构化命令允许根据条件改变程序执行的顺序。

if语句

if-then语句

if-then语句格式如下:

if command
thencommands
fi

在其他编程语言中, if 语句之后的对象是一个等式,这个等式的求值结果为 TRUEFALSEbash shellif 语句会运行 if 后面的那个命令。如果该命令的退出状态码是0,位于 then 部分的命令就会被执行。

#!/bin/bash
if pwd
thenecho "pwd worked"
fi

输出:

# rob@xx-rob:~$ ./test1
/home/rob
pwd worked

if-then-else 语句

格式:

if command
thencommands
elsecommands
fi

示例:

v=bin
if grep $v pwd
thenecho "pwd worked"
elseecho "cannot find $v"
fi

结果:

rob@xx-rob:~$ ./test1
# grep: pwd: 没有那个文件或目录
# cannot find bin

if还可以嵌套多层:

if command1
then
command set 1
elif command2
then
command set 2
elif command3
then
command set 3
elif command4
then
command set 4
fi

test命令

bash shell if语句的条件是command,如果要使用常规的数值/字符串比较条件,需要使用test命令。

使用test命令的if-then-fi语句:

if test condition
then
commands
fi

如果不写 test 命令的condition部分,它会以非零的退出状态码退出,并执行 else语句块。

加入条件时,test 命令会测试该条件。

bash shelltest命令的另外一种写法是使用[ condition ] 中括号,第一个方括号之后和第二个方括号之前必须加上一个空格,
否则就会报错。

if中条件判断的几个条件:

  • 判断变量是否有值if test ${variable}
  • 数值比较
  • 字符串比较
  • 文件比较

数值比较

test命令的数值比较功能:

比较描述
n1 -eq n2检查 n1 是否与 n2 相等
n1 -ge n2检查 n1 是否大于或等于 n2
n1 -gt n2检查 n1 是否大于 n2
n1 -le n2检查 n1 是否小于或等于 n2
n1 -lt n2检查 n1 是否小于 n2
n1 -ne n2检查 n1 是否不等于 n2
#!/bin/bash
if test 100 -le 145; thenecho "100 is smaller than 145"
fiv=12
if [ $v -eq 12 ];thenecho "value is 12"
fi

bash shell只能处理整数,不能使用浮点数作为判断条件。

字符串比较

bash shell条件测试还允许比较字符串值,比较字符串比较烦琐。

比较描述
str1 = str2检查 str1 是否和 str2 相同
str1 != str2检查 str1 是否和 str2 不同
str1 < str2检查 str1 是否比 str2 小
str1 > str2检查 str1 是否比 str2 大
-n str1检查 str1 的长度是否非0
-z str1检查 str1 的长度是否为0

bash sehll中比较运算符需要使用转义,否则会被当成重定向运算符。


s1="val"
s2="thi"# 升成`thi`的文件
if [ $s1 > $s2 ];
thenecho "new file $v2 has been created."
fiif [ $s1 \> $s2 ];
thenecho "$s1 is greater than $s2."
fi

比较测试中使用的是标准的ASCII顺序,根据每个字符的ASCII数值来决定排序结果。在比较测试中,大写字母被认为是小于小写字母的。

文件比较

测试Linux文件系统上文件和目录的状态。

命令描述
-d file检查 file 是否存在并是一个目录
-e file检查 file 是否存在
-f file检查 file 是否存在并是一个文件
-r file检查 file 是否存在并可读
-s file检查 file 是否存在并非空
-w file检查 file 是否存在并可写
-x file检查 file 是否存在并可执行
-O file检查 file 是否存在并属当前用户所有
-G file检查 file 是否存在并且默认组与当前用户相同
file1 -nt file2检查 file1 是否比 file2 新
file1 -ot file2检查 file1 是否比 file2 旧

if-then 语句允许你使用布尔逻辑来组合测试,有两种布尔运算符可用:

  • [ condition1 ] && [ condition2 ]
  • [ condition1 ] || [ condition2 ]

case语句

在尝试计算一个变量的值,在一组可能的值中寻找特定值,可能不得不写出很长的 if-then-else语句。case
令会采用列表格式来检查单个变量的多个值。

case variable inpattern1 | pattern2) commands1;;pattern3) commands2;;*) default commands;;
esac

一个例子:

c=1
case $c in
1 | 2) echo "1";;
3) echo "23";;
esac



欢迎访问个人网络日志🌹🌹知行空间🌹🌹


相关文章:

13.bash shell中的if-then语句

文章目录 shell中的流控制if语句if语句if-then语句if-then-else 语句 test命令数值比较字符串比较文件比较case语句 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; shell中的流控制if语句 简单的脚本可以只包含顺序执行的命令&#xff0…...

深入了解 Python 的 import 语句

在 Python 中&#xff0c;import 语句是一个关键的功能&#xff0c;用于在程序中引入模块和包。本文将深入讨论 import 语句的各种用法、注意事项以及一些高级技巧&#xff0c;以帮助你更好地理解和使用这一功能。 概念介绍 package 通常对应一个文件夹&#xff0c;下面可以有…...

接口测试 — 11.logging日志模块处理流程

1、概括理解 了解了四大组件的基本定义之后&#xff0c;我们通过图示的方式来理解下信息的传递过程&#xff1a; 也就是获取的日志信息&#xff0c;进入到Logger日志器中&#xff0c;传递给处理器确定要输出到哪里&#xff0c;然后进行过滤器筛选&#xff0c;通过后再按照定义…...

Hago 的 Spark on ACK 实践

作者&#xff1a;华相 Hago 于 2018 年 4 月上线&#xff0c;是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景&#xff0c;提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法&#xff0c;致力于为用户打造高效、多样、…...

mac传输文件到windows

前言 由于mac系统与windows系统文件格式不同&#xff0c;通过U盘进行文件拷贝时&#xff0c;导致无法拷贝。官方解决方案如下&#xff0c;但是描述的比较模糊。看我的操作步骤即可。 https://support.apple.com/zh-cn/guide/mac-help/mchlp1657/12.0/mac/12.6 前提条件 mac与…...

trtc-electron-sdk的demo中添加更新功能以及出现的报错问题

1、官网demo下载地址 点击下载 按照官网demo说明文档进行安装和运行 2、添加electron-updater npm install electron-updater根据项目需求安装对应的版本&#xff0c;建议使用5.2.1 3、创建一个handleUpdater.js文件&#xff0c;和package.json同级 // const { ipcMain } …...

什么是流量攻击? 流量攻击怎么处理?

由于DDoS攻击往往采取合法的数据请求技术&#xff0c;再加上傀儡机器&#xff0c;造成DDoS攻击成为最难防御的网络攻击之一。据美国最新的安全损失调查报告&#xff0c;DDoS攻击所造成的经济损失已经跃居第一。 传统的网络设备和周边安全技术&#xff0c;例如防火墙和IDSs(Intr…...

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS&#xff08;通用配置&#xff09;3.4.2 SCHEDULING&#xff0…...

5 分钟内搭建一个免费问答机器人:Milvus + LangChain

搭建一个好用、便宜又准确的问答机器人需要多长时间&#xff1f; 答案是 5 分钟。只需借助开源的 RAG 技术栈、LangChain 以及好用的向量数据库 Milvus。必须要强调的是&#xff0c;该问答机器人的成本很低&#xff0c;因为我们在召回、评估和开发迭代的过程中不需要调用大语言…...

WPF Border

在 WPF 中&#xff0c;Border 是一种常用的控件&#xff0c;用于给其他控件提供边框和背景效果。 要使用 Border 控件&#xff0c;您可以在 XAML 代码中添加以下代码&#xff1a; <Border BorderBrush"Black" BorderThickness"2" Background"Lig…...

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …...

STL--排序与检索

题目 现有N个大理石&#xff0c;每个大理石上写了一个非负整数。首先把各数从小到大排序&#xff0c;然后回答Q个问题。每个问题是否有一个大理石写着某个整数x,如果是&#xff0c;还要回答哪个大理石写着x。排序后的大理石从左到右编写为1-N。&#xff08;样例中&#xff0c;…...

大数据处理与分析-Spark

导论 (基于Hadoop的MapReduce的优缺点&#xff09; MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它将数据处理过程分为两个主要阶段&#xff1a;Map阶…...

虚拟机的下载、安装(模拟出服务器)

下载 vmware workstation&#xff08;收费的虚拟机&#xff09; 下载vbox 网址&#xff1a;Oracle VM VirtualBox&#xff08;免费的虚拟机&#xff09; 以下选择一个下载即可&#xff0c;建议下载vbox&#xff0c;因为是免费的。安装的时候默认下一步即可&#xff08;路径最好…...

K8S Pod Terminating/Unknown故障排查

一、pod异常出现现象 优雅终止周期(Graceful termination period): 当pod被删除时&#xff0c;会进入"Terminating"状态&#xff0c;等待容器优雅关闭。如果容器关闭所需时间超过默认期限(默认30秒)&#xff0c;则pod将保持在"Terminating"状态。 Finalize…...

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式&#xff08;可处理目标框和实例分割&#xff09;的代码&#xff0c;以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址&#xff0c;提供了源代码&#xff0c;以及相关使用方…...

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…...

MySQL中MVCC的流程

参考文章一 参考文章二 当谈到数据库的并发控制时&#xff0c;多版本并发控制&#xff08;MVCC&#xff09;是一个重要的概念。MVCC 是一种用于实现数据库事务隔离性的技术&#xff0c;常见于像 PostgreSQL 和 Oracle 这样的数据库系统中。 MVCC 的核心思想是为每个数据行维护…...

朴素贝叶斯法_naive_Bayes

朴素贝叶斯法&#xff08;naive Bayes&#xff09;是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征条件独立假设学习输入输出的联合概率分布&#xff1b;然后基于此模型&#xff0c;对给定的输入 x x x&#xff0c;利用贝叶斯定理…...

Windows下安装MongoDB实践总结

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi&#xff0c;zip是解压后自己配置&#xff0c;msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…...

如何快速集成Miniblink49:轻量级浏览器内核的终极指南

如何快速集成Miniblink49&#xff1a;轻量级浏览器内核的终极指南 【免费下载链接】miniblink49 a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核&#xff0c;用来取代wke和libcef 项目地址: https://gitcode.com/…...

TaotokenAPI密钥管理与访问控制功能的实际使用体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API 密钥管理与访问控制功能的实际使用体验 在团队协作开发中&#xff0c;如何安全、高效地管理大模型 API 的访问权限&a…...

高效构建面试题库系统:React+Node全栈技术实战指南

高效构建面试题库系统&#xff1a;ReactNode全栈技术实战指南 【免费下载链接】mianshiya-public 持续维护的企业面试题库网站&#xff0c;帮你拿到满意 offer&#xff01;⭐️ 2026年最新Java面试题、前端面试题、AI大模型面试题、AI Agent面试题、RAG面试题、C面试题、Go面试…...

从 SU01 到 SAP HANA,DBMS 用户管理里的 SSO 选项到底在管什么

项目里讨论 SSO 时,大家很容易把它想成一个单点登录按钮,好像在某处勾选一下,用户就能从 SAP GUI、Fiori、报表工具一路无感访问到数据库。到了 SAP NetWeaver AS 和 SAP HANA 组合的系统里,这个理解会带来不少误会。因为从 ABAP 侧维护 DBMS 用户的 SSO 选项,只是在用户主…...

从零到一搭建 AI Agent 财务分析系统

一、核心目标拆解(先对齐业务) 你的系统要支撑 4 类核心场景: 财务报告自动生成 + 智能解读 智能问答 + 异常预警 财务预测、预算编制、风险识别 对接业务部门,推动需求落地 基于这个目标,我给你定了 **「轻量化 MVP → 企业级生产」两阶段架构 **,兼顾快速出 Demo 和长…...

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

用Python正交设计高效优化多因素实验方案 在数据科学和工程实践中&#xff0c;我们经常面临需要同时优化多个参数的挑战。无论是机器学习模型的超参数调优&#xff0c;还是化工生产中的工艺条件优化&#xff0c;传统的一一尝试方法不仅耗时耗力&#xff0c;而且难以捕捉因素间的…...

5G NR物理层实战:从帧结构参数到TB块生成的完整计算解析

1. 5G NR物理层基础&#xff1a;为什么需要计算TB块&#xff1f; 在5G通信系统中&#xff0c;物理层就像快递公司的打包部门&#xff0c;负责把用户数据&#xff08;比如你刷的视频内容&#xff09;装进标准化的"包裹"里传输。这个"包裹"的专业名称就是传输…...

DeepSeek MMLU成绩暴涨11.2分的秘密武器:不是更大参数,而是这个被顶会论文雪藏2年的校准框架(附开源复现代码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek MMLU成绩暴涨11.2分的实证现象 近期&#xff0c;DeepSeek-R1 在大规模多任务语言理解&#xff08;MMLU&#xff09;基准测试中取得显著突破——其零样本准确率从 72.3% 提升至 83.5%&#xff…...

Spek音频频谱分析器:从声音可视化到音频质量检测的完整指南

Spek音频频谱分析器&#xff1a;从声音可视化到音频质量检测的完整指南 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek 当你打开一个音频文件&#xff0c;听到杂音或失真时&#xff0c;是否想过如何精确诊断问题所…...

深入AD9361:除了QPSK和FM,这颗射频芯片在Zynq平台上还能玩出什么花样?

深入AD9361&#xff1a;解锁Zynq平台上的射频创新潜能 当工程师们首次接触AD9361这颗射频芯片时&#xff0c;往往会被其标准应用场景如QPSK调制或FM收音所吸引。然而&#xff0c;这颗高度集成的RF收发器IC的真正价值&#xff0c;在于它为Zynq PSPL架构带来的无限可能性。本文将…...