【Linux】命令执行的判断依据:;,,||

在某些情况下,很多命令我想要一次输入去执行,而不想要分次执行时,该如何是好?

基本上有两个选择,

  • 一个是通过shell脚本脚本去执行,
  • 一种则是通过下面的介绍来一次入多个命令。

1.cmd:cmd(不考虑命令相关性的连续命令执行)

在某些时候,我们希望可以一次执行多个命令,例如在关机的时候我希望可以先执行两次syn
同步写入磁盘后才shutdown计算机,那么可以怎么做?

这样做:

sync; sync; shutdown -h now

在命令与命令中间利用分号(;)来隔开,这样一来,分号前的命令执行完后就会立刻接着执行后面的命令。

        这真是方便,再来,换个角度来想,万一我想要在某个目录下面建立一个文件,也就是说,如果该目录存在的话,那我才建立这个文件;如果不存在,那就算了。

也就是说这两个命令彼此之间是有相关性的,前一个命令是否成功执行与后一个命令是否要执行有关,那就得动用到&&或||

2.$?(命令返回值)与&&或||

        如同上面谈到的,两个命令之间有依赖性,而这个依赖性主要判断的地方就在于前一个命令执行的结果是否正确。

我们曾介绍过命令返回值吧!

嘿嘿,没错,您真聪明,就是通过这个返回值。

【若前一个命令执行的结果为正确,在Linux下面会返回一个$?=0的值】

那么我们怎么通过这个返回值来判断后续的命令是否要执行?

这就得要借由【&&】及【||】的帮忙了。

注意,两个&之间是没有空格的,这个|则是[Shift]+[\]的按键结果。

命令执行情况说明
cmd1 && cmd2

1.若 cmd1执行完毕且正确执行($?=0),则开始执行cmd2

2.若cmd1 执行完毕且为错误($?≠0),则cmd2不执行

cmd1 || cmd2

1.若cmd1执行完毕且正确执行($?=0),则cmd2不执行

2.若cmd1执行完毕且为错误($?≠0),则开始执行cmd2

上述的cmd1及cmd2都是命令。

好了,回到我们刚刚假想的情况,就是想要:

  • (1)先判断一个目录是否存在;
  • (2)若存在才在该目录下面建立一个文件。

由于我们尚未介绍判断式(test)的使用.

在这里我们使用Is以及返回值来判断目录是否存在,让我们进行下面这个练习看看:

范例一:使用ls 查看目录/tmp/abc 是否存在,若存在则用touch建立/tmp/abo/hehe.



ls很干脆的说明找不到该目录,但并没有touch 的错误,

看到了吧?如果 /tmp/abc 不存在时,touch 就不会被执行,若/tmp/abc存在的话,那么touch就会开始执行,很不错吧!

不过,我们还得手动自行建立目录,伤脑筋,能不能自动判断,如果没有该目录就给予建立?

参考一下下面的例子:

范例二:测试/tmp/abc是否存在,若不存在则予以建立,若存在就不做任何事情。

 

结果出现了,有进行mkdir。

        如果你一再重复执行【Is /tmp/abc || mkdir /tmp/abc】也不会出现重复mkdir的错误,这是因为/tmp/abc已经存在,所以后续的mkdir就不会进行。这样理解了么?

        好了,让我们再次讨论一下,如果我想要建立/tmp/abc/hehe 这个文件,但我并不知道/tmp/abc是否存在,那该如何是好?试试看:

范例三:我不清楚/tmp/abc是否存在,但就是要建立/tmp/abc/hehe文件。

        上面这个范例三总是会尝试建立/tmp/abc/hehe,不论/tmp/abc 是否存在。

那么范例三应该如何解释?

由于Linux下面的命令都是由左往右执行,所以范例三有几种结果我们来分析一下:

  • 若 /tmp/abc 不存在所以返回$?≠0,则因为||遇到非为0的$?所以开始mkdir /tmp/abc,由于mkdir /tmp/abc会成功进行,所以返回$?=0,因为&&遇到$?=0故会执行touch /tmp/abc/hehe,最终hehe就被建立了;
  • 若/tmp/abc存在故返回$?=0,则因为||遇到0的$?不会进行,此时$?=0继续向后传,故因为&&遇到$?=0就开始建立/tmp/abc/hehe了,最终/tmp/abc/hehe 被建立。

整个过程跟c语言的&&和||是不是特别像啊

3.例题

以 Is 测试/tmplvbirding 是否存在,若存在则显示“exist";若不存在,则显示“not exist"。

答:这又牵涉到逻辑判断的问题,如果存在就显示某个数据,若不存在就显示其他数据,那我可以这样做:

ls /tmp/vbirding  && echo "exist" || echo "not exist"

意思是说,当Is/tmp/vbirding 执行后,若正确,就执行echo "exist”,若有问题,就执行echo"not  exist",

那如果写成如下的状况会出现什么?

ls /tmp/vbirding || echo "not exist" && echo "exist"

这其实是有问题的,为什么呢?

我们知道命令是一个一个往后执行,因此在上面的例子当中,如果/tmp/vbirding不存在时,它会进行如下操作:

  • 1.若Is /tmp/vbirding不存在,因此返回一个非0的数值;
  • 2.接下来经过 ||的判断,发现前一个命令返回非0的数值,因此,程序开始执行 echo"not exist"
  • 而echo"not exist"程序肯定可以执行成功,因此会返回一个0值给后面的命令;
  • 3.经过&8的判断,咦,是0,所以就开始执行echo "exist";

所以,嘿嘿,第二个例子里面竟然会同时出现not exist与exist,真神奇。

        经过这个例题的练习,你应该会了解,由于命令是一个接着一个去执行的,因此,如果真要使用判断,那么这个&&与||的顺序就不能搞错。

一般来说,假设判断式有三个,也就是:

command1 && command2 || command3

而且顺序通常不会变,因为一般来说,command2与command3会使用肯定可以执行成功的命令
因此,根据上面例题的逻辑分析,您就会晓得为何要如此使用,这很有用的,而且考试也很常考。
 

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

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

相关文章

【RHCE】基于用户认证和TLS加密的HTTP服务(HTTPS)

目录 一、创建用户账号 二、TLS加密 三、配置http服务子配置文件 四、创建访问http服务的文件夹以及输入重定向到文件 五、配置Linux本地仓库以及Windows下的本地仓库 六、基础操作 七、测试 一、创建用户账号 用户认证 # 创建两个账户 [rootlocalhost ~]# htpasswd -…

前端面试39(关于git)

针对前端开发者的Git面试题可以覆盖Git的基础概念、常用命令、工作流程、团队协作、以及解决冲突等方面。以下是一些具体的Git面试 Git基础知识 什么是Git? Git是一个分布式版本控制系统,用于跟踪计算机文件的更改,并协调多个人共同在一个项…

C++ | Leetcode C++题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack { public:queue<int> q;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {int n q.size();q.push(x);for (int i 0; i < n; i) {q.push(q.front());…

【雷达原理】数字波束形成(DBF)

目录 一、数字波束形成1.1 DBF原理1.2 工程应用实现方式1.2.1 预先存储权矢量1.2.2 利用DFT/FFT实现DBF 二、DBF应用2.1 通道间相干积累2.2 测量目标角度 三、MATLAB代码 一、数字波束形成 数字波束形成&#xff08;Digital Beam Forming&#xff0c;DBF) 技术&#xff0c;是针…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的浪潮&#xff0c;正以前所未有的速度重塑着我们的世界。在众多AI应用领域中&#xff0c;目标检测以其独特的魅力和广泛的应用前景&#xff0c;成为了连接现实与智能世界的桥梁。本文旨在…

2024最新国际版抖音TikTok安装教程,免root免拔卡安卓+iOS,附全套安装工具!

我是阿星&#xff0c;今天给大家带来是2024年最新TikTok国际版抖音的下载和安装教程&#xff0c;而且还是免root免拔卡的那种&#xff0c;安卓和iOS都能用哦&#xff01;由于某些原因&#xff0c;国内用户并不能使用TikTok。今天阿星就教一下大家怎么安装TikTok。 TikTok在全球…

杜比全景声——空间音频技术

什么是杜比&#xff1f;是否是标清、高清、超清之上的更清晰的格式&#xff1f;杜比全景声 和传统多声道立体声的差别&#xff1f;杜比全景声音频的渲染方式&#xff1f;车载平台上杜比技术的应用&#xff1f; 杜比技术的起源 杜比实验室&#xff08;Dolby Laboratories&…

使用linux的mail命令发送html格式的邮件

1、关闭本机的sendmail服务或者postfix服务 #执行下面的命令&#xff0c;各位大侠都对号入座吧 #sendmial service sendmail stop chkconfig sendmail off #postfix service postfix stop chkconfig postfix off#再狠一点就直接卸载吧.. yum remove sendmail yum remove postf…

neo4j 图数据库:Cypher 查询语言、医学知识图谱

neo4j 图数据库&#xff1a;Cypher 查询语言、医学知识图谱 Cypher 查询语言创建数据查询数据查询并返回所有节点查询并返回所有带有特定标签的节点查询特定属性的节点及其所有关系和关系的另一端节点查询从名为“小明”的节点到名为“小红”的节点的路径 更新数据更新一个节点…

Golang | Leetcode Golang题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; func summaryRanges(nums []int) (ans []string) {for i, n : 0, len(nums); i < n; {left : ifor i; i < n && nums[i-1]1 nums[i]; i {}s : strconv.Itoa(nums[left])if left < i-1 {s "->" strconv.It…

「媒体邀约」上海请媒体的费用

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 上海无疑是最具活动的城市之一&#xff0c;各种大大小小的论坛、发布会、展览展会应接不暇&#xff0c;那么在上海做活动想邀请媒体进行宣传报道&#xff0c;需要多少费用呢&#xff1a;…

阅读笔记——《Fuzz4All: Universal Fuzzing with Large Language Models》

【参考文献】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…

U-net和U²-Net网络详解

目录 U-Net: Convolutional Networks for Biomedical Image Segmentation摘要U-net网络结构pixel-wise loss weight U-Net: Going Deeper with Nested U-Structure for Salient Object Detection摘要网络结构详解整体结构RSU-n结构RSU-4F结构saliency map fusion module -- 显著…

线性代数|机器学习-P22逐步最小化一个函数

文章目录 1. 概述2. 泰勒公式3. 雅可比矩阵4. 经典牛顿法4.1 经典牛顿法理论4.2 牛顿迭代法解求方程根4.3 牛顿迭代法解求方程根 Python 5. 梯度下降和经典牛顿法5.1 线搜索方法5.2 经典牛顿法 6. 凸优化问题6.1 约束问题6.1 凸集组合 Mit麻省理工教授视频如下&#xff1a;逐步…

科普文:Java对象在堆中的内存结构

概叙 今天来讲些抽象的东西 -- 对象头&#xff0c;因为我在学习的过程中发现很多地方都关联到了对象头的知识点&#xff0c;例如JDK中的 synchronized锁优化 和 JVM 中对象年龄升级等等。 对象内存构成# Java 中通过 new 关键字创建一个类的实例对象&#xff0c;对象存于内存的…

从零开始学习嵌入式----C语言框架梳理与后期规划

目录 一、环境搭建. 二、见解 三、C语言框架梳理 四、嵌入式学习规划流程图&#xff08;学习顺序可能有变&#xff09; 一、环境搭建. C语言是一门编程语言&#xff0c;在学习的时候要准备好环境。我个人比较喜欢用VS,具体怎么安装请百度。学习C语言的时候&#xff0c;切忌…

使用来此加密申请多域名SSL证书

在数字化时代的浪潮中&#xff0c;网站的安全性已成为企业和个人不可或缺的一部分。特别是在数据传输和用户隐私保护方面&#xff0c;SSL证书的作用愈发显著。 申请多域名SSL证书步骤 1、登录来此加密网站&#xff0c;输入域名&#xff0c;可以勾选泛域名和包含根域。 2、选择…

Apache Hadoop之历史服务器日志聚集配置

上篇介绍了Apache Hadoop的分布式集群环境搭建&#xff0c;并测试了MapReduce分布式计算案例。但集群历史做了哪些任务&#xff0c;任务执行日志等信息还需要配置历史服务器和日志聚集才能更好的查看。 配置历史服务器 在Yarn中运行的任务产生的日志数据不能查看&#xff0c;…

一套基于 Ant Design 和 Blazor 的开源企业级组件库

前言 今天大姚给大家分享一套基于Ant Design和Blazor的开源&#xff08;MIT License&#xff09;、免费的企业级组件库&#xff08;喜欢Ant Design风格的同学推荐使用&#xff09;&#xff1a;Ant Design Blazor。 项目特性 提炼自企业级中后台产品的交互语言和视觉风格。 开…

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…