Bash的&&,||逻辑运算

Bash的&&,||逻辑运算

bash里的true和false并不是我们通常所认为的0和1。 true和false是shell的内置命令,返回逻辑值。

$?是一个特殊的变量,存放有上一个程序的结束状态。 在shell里面,把0作为程序是否成功结束的标志。

例如:

$ true
$ echo
$?
0
$ false
$ echo
$?
1

有时候,下一条命令依赖前一条命令是否执行成功。
如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。
shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

cmd1 && cmd2

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

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

cmd1 || cmd2

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

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

其实就是课堂上说的短路运算:
与运算,第一个为0,结果必定为0;第一个为1,第二个必须要参与运算; 或运算,第一个为1,结果必定为1;第一个为0,第二个必须要参与运算

验证回传值:

#!/bin/bash
true&&true; echo $?
true&&false; echo $?
false&&true; echo $?
false&&false; echo $?
true||true; echo $?
true||false; echo $?
false||true; echo $?
false||false; echo $?

[blog@localhost ~]$ sh test.sh

0
1
1
1
0
0
0
1

常用的条件判断式

command1 && command2 || command3

如果command1成功运行,回传$0,运行command2,||得到回传值$0,command3不会运行;
如果command1运行失败,command1 && command2 回传$1,||得到回传值$1,command3运行成功。

原创文章,作者:Net18_木水,如若转载,请注明出处:http://www.178linux.com/14476

(3)
Net18_木水Net18_木水
上一篇 2016-04-11 11:44
下一篇 2016-04-11 11:44

相关推荐

  • 推荐-自动化运维之puppet小试牛刀

     一、puppet介绍       puppet是IT基础设施自动化管理工具,“她”能够帮助系统管理员管理基础设施的整个生命周期:供应(provisioning、配置(configuration)、联动(orchestration)及报告(reporting)。    …

    Linux干货 2016-04-05
  • Shell脚本编程中作业

    一、作业: 1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start, stop, restart, status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一…

    Linux干货 2016-08-24
  • linux文件系统及文件操作

    1、Linux文件系统:    文件和目录被组织成一个单根倒置树结构,从根目录”/”开始。    文件系统分层结构LSB (Linux Standard Base)如下: 2、主要目录: /boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader) /etc:配置文件 /home:用户的…

    2017-07-23
  • DNS实验

      建立DNS服务器(正向解析) linux没有缓存 windows有dns缓存 权威结果,非权威结果 无论是正向解析数据库还是反向解析数据中  写管理员邮件地址或完整域名(FQDN)都要再后面加上点。否则系统会自动不上区域名称。 实验环境先清理防火墙规则,关闭防火墙. centos7 systemctl disabl…

    Linux干货 2016-11-01
  • 推荐-Nginx专题: upstream模块和缓存的简单使用

    Nginx专题: upstream模块和缓存的简单使用 nginx 负载均衡 Nginx专题: upstream模块和缓存的简单使用 前言: 实验拓扑 实验环境 Nginx_Upstream模块介绍 upstream使用方法 upstream使用示例 Nginx_Cache介绍 缓存静态资源 总结 前言: 本文接着上篇Nginx专题: 从编译安装到…

    Linux干货 2016-04-07
  • 第十周:Linux系统启动流程及shell脚本练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 一张图足以说明一切: 2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;   (1) 为硬盘新建两个主分区;并为其安装grub;   (2) 为硬盘的第一个主分区提供内核和ramdisk文件;为第二个分区提供rootfs;   (3)…

    Linux干货 2016-11-30