shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时,表示执行失败。

有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。
 
&&(命令执行控制)
 
语法格式如下:
 
    command1 && command2 [&& command3 ...]
 
1 命令之间使用 && 连接,实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
示例 1
malihou@ubuntu:~$ cp ~/Desktop/1.txt ~/1.txt && rm ~/Desktop/1.txt && echo "success"
 
示例 1 中的命令首先从 ~/Desktop 目录复制 1.txt 文件到 ~ 目录;执行成功后,使用 rm 删除源文件;如果删除成功则输出提示信息。
 
||(命令执行控制)
 
语法格式如下:
 
    command1 || command2 [|| command3 ...]
 
1 命令之间使用 || 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。
 
示例 2
malihou@ubuntu:~$ rm ~/Desktop/1.txt || echo "fail"
 
在示例 2 中,如果 ~/Desktop 目录下不存在文件 1.txt,将输出提示信息。
 
示例 3
malihou@ubuntu:~$ rm ~/Desktop/1.txt && echo "success" || echo "fail"
 
在示例 3 中,如果 ~/Desktop 目录下存在文件 1.txt,将输出 success 提示信息;否则输出 fail 提示信息。
 
shell 提供了两种方法(() 和 {})实现将几个命令合作一起执行,代替独立执行。这种方式并不能控制命令是否需要执行,仅是将多个单独的命令组合在一起执行,最终命令的返回值将由最后一条命令的返回值来决定。
 
() (命令组合)
 
语法格式如下:
 
    (command1;command2[;command3...])
 
1 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
2 () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
3 命令组合常和命令执行控制结合起来使用。
 
示例 4
malihou@ubuntu:~$ rm ~/Desktop/1.txt || (cd ~/Desktop/;ls -a;echo "fail")
 
在示例 4 中,如果目录 ~/Desktop 下不存在文件 1.txt,则执行命令组合。

转载于:https://blog.51cto.com/kusorz/1706605

Linux shell的和||相关推荐

  1. linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

    一.Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义说明 (1)$$ Shell本身的PID(ProcessID,即脚本运行的当前进程ID号) (2)$! Shell最后运行的后台Pr ...

  2. linux shell for 循环变量,shell for循环总结

    1 shell for循环语法 for 变量 in 列表 do command1 command2 ... commandN done 1.1 读取列表中的值 #!/bin/bash for test ...

  3. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  4. 执行远程linux命令,linux shell 远程执行命令

    经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦. 所有就想到编写一个脚本来部署不同的服务器 前提条件: 配置ssh免登陆 如果不会的请参加我的另外一篇文章 http://blog.csdn ...

  5. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  6. Linux Shell高级技巧(目录)

    为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找. Linux Shell高级技巧(一)  http://www.cnblogs.com/ ...

  7. Linux shell命令总结

    01 前言 Linux shell命令应该算是非常入门的东西,但是实际上在使用的时候,会遇到各种各样的问题,前几天我在我们的项目上需要做一个功能,根据进程名字杀死这个进程,下面是过程 1.我们正常需要 ...

  8. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

  9. linux的shell的功能,linux shell中${ }的一些特异功能

    linux shell中${ }的一些特异功能,这部分内容是shell中的比较经典的部分之一,建议认真学习,深刻体会. 假设我们定义一个变量为: file=/dir1/dir2/dir3/my.fil ...

  10. Linux shell 中的数组和关联数组

    写在前面的话 我用开始废柴了,这个又是写给我自己看的了. 普通数组 1.数组的定义 在Linux shell中定义一个普通的数组很简单,首先我们先给数组命名(当然要符合所有的命名规则咯).定义数组的一 ...

最新文章

  1. usaco Overfencing 穿越栅栏(BFS)
  2. 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件
  3. Ubuntu下安装node canvas
  4. JPA基础(八):分析JPA与持久化实现产品对接的源代码
  5. SVN -客户端URL地址修改命令
  6. tomcat mysql数据源_Tomcat mysql 配置数据源
  7. c 多文件全局变量_C语言开发单片机为啥都是全局变量形式?
  8. SVN钩子HOOK设置自动备份,服务本地可以看到所有更新内容。
  9. 粗谈MySQL事务的特性和隔离级别
  10. Lugre摩擦模型的Stribeck曲线仿真
  11. php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...
  12. Protobuf生成Go代码指南
  13. 关于垂直列行值转成水平行值及多列值转合并成单列值
  14. 28 Implement strStr() @Python
  15. JavaScript中的replace替换
  16. PostgreSQL 10.1 手册_部分 I. 教程
  17. God.org单域环境攻略(二)
  18. cad断点快捷键_CAD打断和打断于点怎么使用?CAD打断快捷键命令及操作方法
  19. win10查看计算机管理员,win10系统下怎么获取administrator管理员权限
  20. 大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

热门文章

  1. Android.mk文件的解析
  2. 小数位数_圆周率的小数位是否包含了所有的数字组合?
  3. python和perl哪个好_做为脚本语言来说perl和python那个更有优势?
  4. SCA (Service Component Architecture)
  5. J2EE与.NET技术架构的比较
  6. LIBCLNTSH.SO: WRONG ELF CLASS: ELFCLASS32错误一例
  7. 基于SPI的数据报过滤原理与实现
  8. 我的第一个JW项目——网上商城设计说明书(五)
  9. C语言拼接字符串 -- 使用strcat()函数
  10. 雷军反击董明珠:感觉董总好像认输了似的