【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.xdnf.cn/news/1477247.html

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

相关文章

如何将heic格式转换jpg?四种将heic转换成jpg的方法!

如何将heic格式转换jpg?在现今的数字图像处理领域,Heic格式作为一种被吹捧的创新型图像格式,以其先进的压缩技术,迅速减小了图片文件的大小,然而,尽管其有许多优点,实际使用中Heic格式却带来了一…

【7月长沙】2024年土木、水利与智能建造国际会议(CHEIC 2024)

在21世纪的今天,随着科技的迅猛发展,土木工程、水利工程与智能建造领域正迎来前所未有的变革。为了汇集全球范围内的智慧,推动这一领域的进步与发展,土木、水利工程与智能建造国际会议(CHEIC 2024)应运而生…

PP网/尼龙网检测方案居然如此高效?

硅胶套是一种由硅胶材料制成的套管,通常用于保护、密封或绝缘电子元件、电线、电缆等。硅胶具有优异的耐高温、耐低温、耐化学腐蚀和绝缘性能,因此硅胶套常被用于需要抗高温、耐磨、耐腐蚀的环境中。硅胶套的柔软性和良好的弹性使其适合于包裹各种形状的…

知识图谱入门笔记

自学参考: 视频:斯坦福CS520 | 知识图谱 最全知识图谱综述 详解知识图谱的构建全流程 知识图谱构建(概念,工具,实例调研) 一、基本概念 知识图谱(Knowledge graph):由结…

【珠宝古玩字画店】游戏 链游 软件

#软件开发#链游#古玩字画 本文为大家带来的是关于买卖古董的游戏有哪些相关游戏介绍,对于古董,相信大家都不陌生,在游戏里玩家可以去进行古董的买卖这类游戏相信大家都不了解,那么接下来小编就带大家聊聊有哪些好玩的古董买卖手游…

PHP 安装Memcached 扩展 PHP使用Memcache

memcache扩展下载 访问官网&#xff1a;https://pecl.php.net/package/memcache&#xff0c;下载合适的memcache版本的安装包&#xff0c;注意要与php版本相匹配。 1、查看运行环境php版本,可以运行以下代码 <?php phpinfo(); ?>2、查看版本信息以及是否支持多线程…

【YOLOv5/v7改进系列】改进池化层为RFB

一、导言 论文 "Receptive Field Block Net for Accurate and Fast Object Detection" 中提出的 RFB (Receptive Field Block) 模块旨在模仿人类视觉系统中的感受野结构&#xff0c;以增强深度学习模型对不同尺度和位置的目标检测能力。下面总结了RFB模块的主要优点…

谷歌个人开发者账号14天封测审核通过技巧,你还不知道吗?

众所周知&#xff0c;目前在Google play应用商店上架应用已经不是那么容易了&#xff0c;谷歌各种政策的更新以及审核系统的升级&#xff0c;给开发者们带来了不少挑战。 尤其针对个人开发者账号需要20人连续14天的封测的要求&#xff0c;周期长&#xff0c;且随着政策执行力度…

用微信服务号支付门诊缴费

时间上午10刚过&#xff0c;医院里计价收费处排起了长龙&#xff0c;放眼望去&#xff0c;左边的窗口六条队。右边在原来发药的位置也开辟了收费窗口&#xff0c;数了一下有四条队。一共十条排队付费的长龙&#xff0c;每一条队伍的人数不下20人&#xff0c;也即超过200人在排队…

【计算机网络03】不花钱怎么搭建一个网络实验室

使用GNS3和虚拟机搭建网络实验室 1、安装抓包工具分析数据包2、定义和使用抓包筛选器3、安装和配置GNS34、配置路由器和VPCS5、使用WireShark捕获GNS3网络数据包6、VMware创建虚拟机7、使用思科PacketTracer 1、安装抓包工具分析数据包 官网安装wireshark&#xff1a;https://…

【idea 修改VM配置,无法启动;必杀技】

idea 修改VM配置&#xff0c;无法启动&#xff1b;必杀技 报错信息 error launching idea failed to created JVM 解决方案 不要管你安装的环境在哪&#xff0c;使用了什么破解插件。统统不管用。直接找到C:\Users\YOURWORLD\AppData\Roaming\JetBrains下的idea中的idea64…

Linux中的管道符‘|‘以及SQL(DQL,DCL)

ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a; 对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -…

HTTP协议分析/burp/goby/xray

一、HTTP简介 HTTP(超文本传输协议)是今天所有web应用程序使用的通信协议。最初&#xff0c;HTTP只是一个为获取基于文本的静态资源而开发的简单协议&#xff0c;后来人们以名种形式扩展和利用它.使其能够支持如今常见的复杂分布式应用程序。HTTP使用一种用于消息的模型:客户端…

CephFS文件系统存储服务

目录 1.创建 CephFS 文件系统 MDS 接口 服务端操作 1.1 在管理节点创建 mds 服务 1.2 创建存储池&#xff0c;启用 ceph 文件系统 1.3 查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目前的工作的是node02上的mds服务 1.4 创建用户 客户端操作 1.5…

十一、C++11常用新特性—委托构造函数和继承构造函数

1.委托构造函数 委托构造函数是c11引用的一个特性&#xff0c;它允许一个构造函数委托其部分或全部的初始化工作给同一个类中的另一个构造函数。这种方式可以减少重复的初始化代码&#xff0c;提高代码的可维护性和清晰度。 从上述的图中可以看出&#xff0c;该类的构造函数有…

MySQL DDL

数据库 1 创建数据库 CREATE DATABASE 数据库名 CREATE DATABASE IF NOT EXISTS 数据库名;&#xff08;判断是否存在) CREATE DATABASE 数据库名 CHARACTER SET 字符 2 查看数据库 SHOW DATABASES; 查看某个数据库的信息 SHOW CAEATE DATABASE 数据库名 3 修改数据库 …

nginx安装配置视频频服务器-windows

编译安装nginx 1、安装perl 安装地址: https://strawberryperl.com&#xff0c;选择msi安装程序即可 2、安装sed for windows 下载地址&#xff1a;https://sourceforge.net/projects/gnuwin32/files/sed/&#xff0c;执行安装程序结束后&#xff0c;将安装包bin目录配置到…

Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具

目录 保持连接 访问控制 只允许指定ip访问 拒绝指定主机其他正常访问 用户授权 日志格式 日志分割 操作步骤 使用第三方工具cronolog分割日志 AWStats日志分析 操作步骤 访问AwStats分析系统 保持连接 Apache通过设置配置文件httpd-default.conf中相关的连接保持参…

【前端】面试八股文——meta标签

【前端】面试八股文——meta标签 在HTML文档中&#xff0c;meta标签是一个关键但常被忽视的元素。它位于文档的<head>部分&#xff0c;用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;。这些元数据不会直接显示在页面上&#xff0c;但对搜索引擎优化&…

10 - matlab m_map地学绘图工具基础函数 - 绘制多边形区域、流线图、散点图和添加注释的有关函数

10 - matlab m_map地学绘图工具基础函数 - 绘制多边形区域、流线图、散点图和添加注释的有关函数 0. 引言1. 关于m_patch2. 关于m_streamline3. 关于m_scatter4. 关于m_annotation5. 结语 0. 引言 本篇介绍下m_map中绘制多边形区域函数&#xff08;m_patch&#xff09;、绘制流…
最新文章