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

news2024/11/14 22:06:38

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

基本上有两个选择,

  • 一个是通过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.coloradmin.cn/o/1914972.html

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

相关文章

SAP EWM display message对话框长度限制

1.问题 使用标准方法/scwm/cl_rf_dynpro_srvc=>display_message显示消息文本,由于消息文本过长而被截取,影响显示效果 2.解决 通过调试跟踪当前标准方法,发现屏幕显示长度为40,最多显示4行,且iv_msg_text把每一行显示字段用空格拼接起来,故以下代码需要把显示消息…

Unity 打包的安卓APK在模拟器运行一会卡死

Unity 安卓APK模拟器运行一会卡死 如题,unity在模拟器上运行安卓apk挂机一会就卡死,在真机上没问题。因为打包时勾选了这个帧率优化选项,2019.2之后的功能,最坑的时打包时默认勾选,所以使用这个版本打包时&#xff0c…

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

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

和鲸101计划夏令营火热进行中!北中医助阵医学数据探索

上周,和鲸社区 2024 夏令营已经正式开营! 从 2021 年开始,和鲸社区在每年暑假期间都会为大家提供集中化、系统化的数据科学相关的技能实践和培训,每年都有几千名同学借此机会积累宝贵的实战经验,丰富个人简历作品&…

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

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

Docker安装HomeAssistant

检查Docker服务是否正常运行,确保Docker正常运行。 systemctl status docker#输出---------------------- docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Activ…

mount卡住(失败)解决方案

mount -a卡主 第一步确保两边都打开了NFS服务!!!! 客户端执行mount -av 查看信息是拒绝服务 查看服务端:showmount -e 192.168.25.168 看提示信息处理,关闭两端的防火钱 遇到这个错误就是服务端不让客户端…

【音频特征提取】傅里叶变换算法源码学习记录

目录 背景快速理解FFT(快速傅里叶变换)IFFT(逆傅里叶变换)STFT(短时傅里叶变换) 代码实现FFT源代码IFFT源代码FFT、IFFT自己实验STFT源代码STFT自己实验 总结 背景 最近用到了相关操作提取音频信号特征&am…

stm32单片机的分类与命名

一、Stm32单片机的分类 二、Stm32单片机的命名 例如:STM32F103C8T6

android13 设置左右分屏修改为单屏幕,应用分屏改为单屏

1.前言 android13中,系统设置变成,左边是一级菜单,右侧是二级菜单, 这样跟我们以前android7/8/9的布局是不一样的,我们需要将它修改为一级菜单,点进去才是二级菜单这种。 效果如下 2.系统设置实现分析 它这里使用的是google新出的embedding activity, 相关的知识这里…

LLM应用:行业大模型

大语言模型正在朝着两个方向发展,一个是以ChatGPT为代表的通用大模型,另一个则是行业大模型(或称为“专业大模型”)。如果大模型的演化分为阴阳两面,通用大模型更像是阳面,受众更广、更to C端,以…

【库架一体立体库】与【传统立体库】对比

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 随着冷链物流行业的快速发展,对于冷藏设施的要求也在不断提高。库架一体式智能立体冷藏库以其高效、节能、智能化的特点,正逐渐成为行业发展的新趋势。 分享一…

前端JS特效第28集:JQuery电影选座插件

JQuery电影选座插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">&l…

有没有文字转语音的软件?轻松搞定文字转语音的工具

当文字跃然纸上&#xff0c;它们是静止的&#xff0c;沉默的。 但想象一下&#xff0c;如果这些文字能够被赋予声音&#xff0c;它们将如何生动地跳跃在我们的耳边&#xff1f;在这个充满无限可能的时代&#xff0c;文字转语音技术正将这种想象变为现实。它不仅让我们的阅读体…

外贸展示型网站设计

清洁能源风能设备wordpress外贸公司模板 风能设备wordpress外贸公司模板&#xff0c;做新能源网通设备的公司网站模板。 https://www.jianzhanpress.com/?p3606 钢材wordpress外贸公司模板 金属钢材wordpress外贸公司模板&#xff0c;做金属成品贸易公司的企业网站模板。 …

秒懂设计模式--学习笔记(9)【结构型-装饰器模式】

目录 8、装饰器模式8.1 装饰器模式&#xff08;Decorator&#xff09;8.2 装修&#xff08;举例&#xff09;8.3 化妆&#xff08;示例&#xff09;8.4 化妆品的多样化8.5 装饰器8.6 自由嵌套8.7 装饰器模式的各角色定义8.8 装饰器模式 8、装饰器模式 8.1 装饰器模式&#xff…

VBA即用型代码手册:根据预定义的文本条件删除行

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

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

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

私活必备框架!终于找到一个前后端都有的后台管理系统了~

大家好&#xff0c;我是「程序视点」爱分享的小二哥~ 今天介绍一个新的Vue后台管理框架&#xff0c;相比其他后台功能丰富管理系统&#xff0c;这个后台管理系统可以用干净简洁来形容——Nova-admin Nova-admin Nova-admin 是一个基于Vue3、Vite5等最新技术的后台管理平台。用…

【实战场景】@Transactional中使用for update的注意点

【实战场景】Transactional中使用for update的注意点 开篇词&#xff1a;干货篇&#xff1a;知识回顾注意点1.锁的范围和粒度&#xff1a;2.事务的隔离级别&#xff1a;3.死锁&#xff1a;4.性能影响&#xff1a;5.事务的边界&#xff1a;6.异常处理&#xff1a;7. 数据库和存储…