【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://xiahunao.cn/news/3227319.html

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

相关文章

【Android】基于 LocationManager 原生实现定位打卡

目录 前言一、实现效果二、定位原理三、具体实现1. 获取权限2. 页面绘制3. 获取经纬度4. 方法调用5. 坐标转换6. 距离计算7. 完整代码 前言 最近公司有个新需求,想要用定位进行考勤打卡,在距离打卡地一定范围内才可以进行打卡。本文将借鉴 RxTool 的 Rx…

buuctf面具下的flag

细节: 这道题可能因为是vmdk的原因 导致在window上 7z无法得到全部的信息 所以最后解压要在linux系统上 解密网站 Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org] 这道题010打开,可以发现里面隐藏了很多 binwalk解压 两个文件 vmdk可以直接 用7z解压 7z x flag.…

常用网络概念

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …

20240711 每日AI必读资讯

🎨Runway Gen-3 Alpha 详细使用教程以及提示词指南大全 - 7月9日,著名生成式AI平台Runway在官网公布了,最新发布的文生视频模型Gen-3 Alpha的文本提示教程。 - 从技术层面来说,输入的文本提示会被转换成“向量”,这些…

怎么提高音频声音大小?提高音频声音大小的四种方法

怎么提高音频声音大小?在音频处理和编辑中,增加声音的音量是一个常见的需求,尤其是在确保音频清晰度和听觉效果的同时。调整音频的音量不仅仅是简单地提高音频的响度,它也涉及到如何保持音质的高标准,确保没有失真或削…

如何写好品牌宣传稿提升品牌曝光?看这篇文章就够了

在这个信息爆炸的时代,一句精炼而富有力量的宣传语,足以让品牌在万千竞争者中脱颖而出。撰写一篇成功的品牌宣传稿,不仅是对文字艺术的驾驭,也是对品牌灵魂的深刻洞察与精准传达,更是连接品牌与消费者情感与认知的桥梁…

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式?当需要将aac格式音频转换为MP3格式时,有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式,几乎所有设备和平台都能播放MP3文件,包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…

实习记录3

1.Mybaits懒加载 MyBatis 延迟加载(懒加载)一篇入门-腾讯云开发者社区-腾讯云 (tencent.com) 2.高级映射 106-高级映射之多对一映射第一种方式_哔哩哔哩_bilibili 3.TableId(type IdType.INPUT) Mybatis-plus 主键生成策略_mybatis-plus 自增主键等于…

使用PEFT库进行ChatGLM3-6B模型的QLORA高效微调

PEFT库进行ChatGLM3-6B模型QLORA高效微调 QLORA微调ChatGLM3-6B模型安装相关库使用ChatGLM3-6B模型GPU显存占用准备数据集加载数据集数据处理数据集处理加载量化模型-4bit预处理量化模型配置LoRA适配器训练超参数配置开始训练保存LoRA模型模型推理合并模型使用微调后的模型 QLO…

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

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

Everything搜索无法搜索到桌面的文件(无法检索C盘 或 特定路径的文件)

现象描述 在Everything搜索框中输入桌面已存在的文件或随便已知位置的文件,无法找到。 搜索时检索结果中明显缺少部分磁盘位置的,例如无法检索C盘,任意关键字搜索时结果中没有位于C盘的,无论怎样都搜不到C盘文件。 解决方法 在…

读论文《Unpaired Unsupervised CT Metal ArtifactReduction》

论文题目:非配对无监督CT金属伪影还原 项目地址:GitHub - ChenBoYam/Metal-Artifact-Reduction: Eliminate metal artifacts from CT images Semi-supervised learning 重点应该就是怎么实现无监督吧 先看论文,再看代码 摘要:…

海南云亿商务咨询有限公司抖音电商服务领军者

在当今这个数字化高速发展的时代,抖音电商已经成为了一种不可忽视的新型商业模式。作为行业的佼佼者,海南云亿商务咨询有限公司凭借其专业团队和卓越的服务能力,为众多商家提供了一站式的抖音电商解决方案,助力商家在竞争激烈的市…

springboot“小鱼在乎”日程计划系统-计算机毕业设计源码51307

摘要 本文介绍了一种基于微信小程序和Spring Boot后端服务的“小鱼在乎”日程计划系统。该系统结合了前端微信小程序的便捷交互与后端Spring Boot框架的稳健性能,为用户提供了一款功能全面、体验出色的日程管理工具。 “小鱼在乎”日程计划系统涵盖了多种功能&#…

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看! 关键词:2024深圳eVTOL展 动力电池 高能量密度电池 高性能电池材料 作为2024深圳eVTOL展重要组成部分,2024深圳eVTOL动力电池展将于9月23-25日在深圳坪山燕子湖国际会…

硅谷甄选二(登录)

一、登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><!-- Layout 布局 --><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs"2…

7月10日学习打卡,环形链表+栈OJ

前言 大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有…

【多GPU训练方法】

一、数据并行 这是最常用的方法。整个模型复制到每个GPU上。训练数据被均匀分割&#xff0c;每个GPU处理一部分数据。所有GPU上的梯度被收集并求平均。通常使用NCCL&#xff08;NVIDIA Collective Communications Library&#xff09;等通信库实现。参数更新 使用同步后的梯度…

Socks5代理为什么比HTTP代理快?

在数字化日益深入的时代&#xff0c;网络安全和隐私保护成为了公众关注的焦点。为了应对网络威胁&#xff0c;保护个人隐私和数据安全&#xff0c;代理技术应运而生。在众多代理协议中&#xff0c;SOCKS5代理和HTTP代理是两种较为常见的选择。然而&#xff0c;为何SOCKS5代理在…

浪潮天启防火墙TQ2000远程配置方法SSL-xxx、L2xx 配置方法

前言 本次设置只针对配置VXX&#xff0c;其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行Vxx配置。 其他配置可参考&#xff1a;浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号&#xff0…