【shell漫步】3 条件分支结构

碎碎念

接上文的运算符的内容,这一章终于开始接触控制结构

【shell漫步】2 运算符-CSDN博客

分支结构的写法

当我们要对不同情况采取不同措施的时候就要用到分支结构

在shell中分支结构的写法如下

if [ 情况1 ]
then代码1
elif [ 情况2 ]
then代码2
elif [ 情况3 ]
then代码3
...以此类推
fi

接下来以收快递为例子来解释一下语法结构,假如我有一个邮政快递,我这样子告诉快递员:

如果我在家,则放我家门口,那么代码这样:(其中 if 后面跟着情况或者条件,then后面跟着在这种情况下对应的代码,在条件分支的最后一行一定要用 fi 作为结束的标志)

if 我在家
then放家门口
fi

但是我一想,如果我在上班的话怎么办,于是我又跟快递员补充一句:

如果我不在家,帮我送到我的公司来,从第二个条件开始就不写 if 而是 elif 作为开头

那么代码如下

if 我在家
then放家门口
elif 我不在家
then放公司
fi

如果有第三个条件,第四个条件,第五个条件....

他们的写法都是和第二个条件的写法一样

elif 条件 then 代码  就可以了

如果以上条件都不满足的话,默认就不执行任何操作,快递员将不会派送这个包裹,但是如果我们要指定默认操作的话,可以使用else

if 我在家
then放家门口
elif 我不在家
then放公司
else
then放快递点
fi

这就表明了,不管我前面指定了1种情形或者100种情形,只要不满足前面的任何一种情形的话,就帮我执行 else 这个分支的动作就行了

条件的写法

在shell中,条件的写法比较麻烦,有四种写法

[ 条件 ]      [[ 条件 ]]   ( 条件 )   (( 条件 ))

写法1  if [ 条件 ]

最基础的写法,可以在里面使用关系运算,布尔运算,字符串运算

除此之外算术运算符,逻辑运算符 以及高级用法都不行

但是在 if 和括号之间,括号和条件之间一定要有空格!否则会报错

如下,逻辑运算符  ||  就报错了 

写法2 if [[ 条件 ]]

和写法1相比,写法2可以支持 关系运算符,布尔运算符,逻辑运算符,正则表达式

可以看到逻辑运算符被正确识别了,而且还支持高级功能比如正则表达式,字符串匹配等,目前还没接触正则表达式也完全不用慌,正则表达式在不同的命令中使用不同的方式使用,遇到具体的命令的时候去查怎么使用就可以了(比如百度一下  grep  中怎么用正则表达式就可以了)现在重要的是理解写法2 可以使用高级功能,也就是说如果不确定使用哪一种写法的时候使用写法2更安全

正则表达式速攻1/2-CSDN博客

写法3  if ( 条件 )

小括号中的条件是一条命令,比如常见的 mkdir ,touch 等

每一个命令执行之后都会有两种结果,成功或者失败

只要成功的话都会返回一个 0 作为成功的信号

因此我们就可以根据  命令是否成功  这一标志作为条件

比如说: 如果touch命令执行成功的话,打印“命令执行成功”的信息

那么代码就是这样的

if ( touch newfile )
thenecho "命令执行成功"
elseecho "命令执行失败"
fi

写法4  if (( 条件 ))

写法2中哪怕支持了很多的运算符和高级的字符串匹配等功能,仍然还是没有处理计算的能力

如果一定要处理数学计算的话,就要使用双重小括号的写法,在双重小括号中可以使用熟悉的数学表达法,比如 ==    <    >    <=     >=     +      -      *      /  等

但是注意,双重小括号能够支持算术运算,反而不支持关系运算,这两个运算就跟老冤家一样(晕)

最后想总结一下四种条件的写法

算术运算关系运算字符串运算逻辑运算其他操作
[    ]
[[     ]]字符串匹配
(    )执行命令的结果
((    ))

并且布尔运算目前只有取反功能还在使用,取反功能是大家都支持的所以就不写了

顺便回忆一下之前的一个内容:在shell中 0 代表true,代表成功,1代表false,代表失败

所以 if ( 命令 )的写法中

一旦命令执行成功一定会返回0,而 if 判断 0 为真,所以执行下面的代码

ps  手头可以写代码的话可以尝试写一下 if 0   或者先设 a=0 然后写一下  if $a

按照上面说的,if 收到命令成功后返回的 0  值,就会判定为true,然后执行代码

既然如此,直接写 if 0 会不会也判定为true然后执行代码? 如果不能的话是为什么?

这也是个很有趣的解密游戏

祝大家玩得开心

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

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

相关文章

mysql四大引擎、账号管理以及建库

目录 一.数据库存储引擎1.1存储引擎的查看1.2InnoDB1.3MyISAM1.4 MEMORY1.5 Archive 二.数据库管理2.1元数据库分类2.2 操作2.3 MySQL库 三.数据表管理3.1三大范式3.2 整形3.3 实数3.4 字符串3.5 text&blob3.6 日期类型3.7 选中标识符 四.数据库账号管理4.1 查询用户4.2查看…

【论文阅读|冷冻电镜】DISCA: High-throughput cryo-ET structural pattern mining

论文题目 High-throughput cryo-ET structural pattern mining by unsupervised deep iterative subtomogram clustering 摘要 现有的结构排序算法的吞吐量低&#xff0c;或者由于依赖于可用模板和手动标签而固有地受到限制。本文提出了一种高吞吐量的、无需模板和标签的深度…

Kotlin协程学习之-01

由于协程需要支持挂起、恢复、因此对于挂起点的状态保存就显得机器关键。类似的&#xff0c;线程会因为CPU调度权的切换而被中断&#xff0c;它的中断状态会保存在调用栈当中&#xff0c;因而协程的实现也按照是否开辟相应的调用栈存在以下两种类型&#xff1a; 有栈协程&…

Zookeeper注册中心实战

Java学习手册面试指南&#xff1a;https://javaxiaobear.cn Spring Cloud Zookeeper通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法&#xff0c;为 Spring Boot 应用程序提供Apache Zookeeper集成。通过一些简单的注释&#xff0c;您可以快速启用和配置应用…

【RK3399 PCIE调试——硬件信息资源获取】

一、1、 硬件接口 二、2、 PCB原理图 三、 官网地址&#xff1a; https://t.rock-chips.com/portal.php 相关资料和固件烧写可参考资料下载菜单

WPF 使用矢量字体图标

矢量字体图标 在WPF项目中经常需要显示图标&#xff0c;但是项目改动后&#xff0c;有时候需要替换和修改图标&#xff0c;这样非常麻烦且消耗开发和美工的时间。为了快速开发项目&#xff0c;节省项目时间&#xff0c;使用图标矢量字体图标是一个非常不错的选择。 矢量字体图标…

github 好项目 之 reference

github项目地址 网页网址 点进去以后你可以看到很多关于技术前沿的东西的简单笔记&#xff0c;一些实践的代码&#xff0c;或者是一些快捷键的命令 我个人比较喜欢 latex 的数学公式笔记 以及关于 vim 的一些命令 还有我最喜欢的git命令

算法训练第六十天|84.柱状图中最大的矩形

84.柱状图中最大的矩形&#xff1a; 题目链接 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 : 输入&#xff1a;heights [2,1,5,6,2,3] 输出…

虾皮长尾词工具:如何使用关键词工具优化Shopee产品的长尾关键词

在Shopee&#xff08;虾皮&#xff09;平台上&#xff0c;卖家们都希望能够吸引更多的潜在买家&#xff0c;提高产品的曝光率和转化率。而要实现这一目标&#xff0c;了解和使用长尾关键词是非常重要的。本文将介绍长尾关键词的定义、重要性以及如何使用关键词工具来优化Shopee…

手势识别+人脸识别+姿态估计(关键点检测+教程+代码)

手势识别和手势关键点检测是计算机视觉领域中的一个重要研究方向,涉及到从图像或视频中检测人手的位置和姿态信息,并推断出手势的意义。以下是一些可能用到的方法和技术: 手势识别 基于深度学习的手势识别 基于深度学习的手势识别是目前最流行的方法之一。它通常使用卷积神…

二刷Laravel 教程(构建页面)总结Ⅰ

L01 Laravel 教程 - Web 开发实战入门 ( Laravel 9.x ) 一、功能 1.会话控制&#xff08;登录、退出、记住我&#xff09; 2.用户功能&#xff08;注册、用户激活、密码重设、邮件发送、个人中心、用户列表、用户删除&#xff09; 3.静态页面&#xff08;首页、关于、帮助&am…

VMware 安装 macOS虚拟机(附工具包)

VMware 安装 macOS虚拟机&#xff0c;在Windows上体验苹果macOS系统&#xff01; 安装教程&#xff1a;VMware 安装 macOS虚拟机VMware Workstation Pro 是一款强大的虚拟机软件&#xff0c;可让您在 Windows 电脑上运行 macOS 系统。只需简单几步操作&#xff0c;即可轻松安装…

【docker】数据卷和数据卷容器

目录 一、如何管理docker容器中的数据&#xff1f; 二、数据卷 1、数据卷原理 2、数据卷的作用 3、数据卷案例 三、数据卷容器 1、数据卷容器作用 2、数据卷容器案例 四、容器互连&#xff08;centos镜像&#xff09; 一、如何管理docker容器中的数据&#xff1f; 二、…

C语言scanf()函数详解

目录 1. scanf&#xff08;&#xff09;函数简介 1.1 函数原型 1.2 头文件 1.3 返回值 1.4 参数 2.格式说明符 3.输入格式控制 关于‘ * ’的例子 关于width域宽的例子 关于length长度修饰符的说明 4. 其他常见问题说明 4.1 scanf&#xff08;&#xff09;函数连…

Diffusion扩散模型学习2:DDPM前向加噪过程torch实现

参考: https://arxiv.org/pdf/2006.11239.pdf ##论文 https://github.com/dtransposed/code_videos/blob/main/01_Diffusion_Models_Tutorial/Diffusion%20Model.ipynb ##code https://spaces.ac.cn/archives/9119 1、红色框: 前向过程论文公式推出可以从x0原图一步到最终噪声…

jetson AGC orin 配置pytorch和cuda使用、yolov8 TensorRt测试

文章目录 1、安装环境1.1、检查系统环境1.2、下载安装pytorch1.3、下载安装torchvision1.3、测试安装是否成功 2、yolov8测试2.1、官方python脚本测试2.2、tensorrt 模型转换2.3、tensorrt c 测试 1、安装环境 1.1、检查系统环境 检查系统环境、安装jetpack版本&#xff0c;执…

Linux操作系统基础(12):Linux的Shell解释器

1. Shell的介绍 在Linux中&#xff0c;Shell 是一种命令行解释器&#xff0c;它是用户与操作系统内核之间的接口&#xff0c;它负责解释用户输入的命令&#xff0c;并将其转换成系统调用或其他操作系统能够执行的指令。 Shell 提供了一种交互式的方式来与操作系统进行通信&am…

内核线程创建-kthread_create

文章参考Linux内核线程kernel thread详解 - 知乎 大概意思就是早期创建内核线程&#xff0c;是交由内核处理&#xff0c;由内核自己完成&#xff08;感觉好像也不太对呢&#xff09;&#xff0c;创建一个内核线程比较麻烦&#xff0c;会导致内核阻塞。因此就诞生了工作队列以及…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构&#xff0c;称为 Filesystem Hierarchy Standard&#xff08;文件系统层次结构标准&#xff09;&#xff0c;其定义了不同目录的用途和内容。 浅蓝色文字 /&#xff08;根目录&#xff09;&#xff1a; /根目录是整个文件系统的起点&…

力扣2807.在链表中插入最大公约数

思路&#xff1a;遍历链表&#xff0c;对于每一个结点求出它与下一个结点的最大公约数并插入到俩个结点之间 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}…