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
下一篇 2016-04-11

相关推荐

  • Shell编程之select循环&函数详解

    一、select循环        功能:主要用于创建菜单,菜单按数字顺序排列。并将PS3变量的值用作用户输入提示。用户的选择被保存在内置变量REPLY中。也可以和case语句结合,在select循环中对用户的输入作出判断并处理。      &nbs…

    Linux干货 2016-08-21
  • 数组和变量之间的关系及如何灵活运用数组

    什么是数组?数组:存储多个元素的连续的内存空间,相当于多个变量的集合什么是变量? 变量即是存储单个元素的内存空间 如果整个数组只有一个名字;数组名是数组的标识;也是数组所指向的存储多个元素的连续的内存空间开始地址的标识;数组索引定义从 0 开始(第一个数组元素);到 N 结束引用某个数组元素时,数组名+【索引】格式:${ARRAY_NAM…

    Linux干货 2017-05-22
  • Mariadb之SELECT语法练习

    一 、导入hellodb.sql生成数据库后实现以下操作     # mysql -uroot -h172.16.23.23 -pcento.123 < hellodb.sql     mysql>&nbsp…

    Linux干货 2014-08-25
  • 常用的MySQL数据库备份

    常用的MySQL数据库备份方式 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可…

    2015-06-13
  • 马哥教育网络班21期-第五周课程练习

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep -E "^[[::space]]\+.*" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;…

    Linux干货 2016-08-08
  • HA Cluster—Keepalived

    HA Cluster 集群类型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP 系统可用性的公式:A=MTBF/(MTBF+MTTR) 系统故障: 硬件故障:设计缺陷、wear out、自然灾害 软件故障:设计缺陷 提升系统高用性的解决方案之降低MTTR: 解决方案:冗余(redundant) acti…

    Linux干货 2017-10-30