Shell脚本编程基础之shell脚本逻辑运算 逻辑运算

  • 逻辑运算又称布尔运算。布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。

  • 真、假、与、或、非。

  • 最常见到的逻辑运算就是循环的处理,用来判断是否该离开循环或继续执行循环内的指令。

ture,false

## 二进制
1 ture
0 false

与 &

和0与结果为0,和1与保留原值

## 二进制的世界里只有1和0
0&0=0
1&0=0
0&1=0
1&1=1

或 |

与1或结果为1,与0或保留原值

0 | 0 =0
1 | 0 =1
0 | 1 =1
1 | 1 =1

非 !

取反,真取反为假,假取反为真

!0 =1
!1 =0

异或 ^

相同为假,不同为真

0^0=0
1^0=1
0^1=1
1^1=0

异或的一个性质:

假如
a^b=c

则
a^c=b
c^b=a

$? 返回值是十进制的0或者1,不是逻辑判断的二进制的0或者1

  • 利用异或的特性实现变量值的互换

## 传统利用第三个变量tmp做中间人,进行互换
[03:38:07 root@C8-3-55 ~]#x=10;y=20;tmp=$x;x=$y;y=$tmp;echo x=$x y=$y
x=20 y=10
## 利用异或运算

[03:40:35 root@C8-3-55 ~]#x=10;y=20;x=$[x^y];y=$[x^y];x=$[x^y];echo x=$x y=$y
x=20 y=10

## 第一步将x^y的值赋给x

[03:41:05 root@C8-3-55 ~]#x=10;y=20;x=$[x^y];echo x=$x
x=30
## 第二步,此时x的值为30,再将[x^y]的值赋给y,y的值就被换成原始的x的值

[03:42:43 root@C8-3-55 ~]#x=10;y=20;x=$[x^y];y=$[x^y];echo x=$x y=$y
x=30 y=10

## 第三步,此时x的值为30,y的值为10,再将[x^y]的值赋给x,x的值就被换成原始y的值

[03:47:04 root@C8-3-55 ~]#x=10;y=20;x=$[x^y];y=$[x^y];x=$[x^y];echo x=$x y=$y  x=20 y=10

## 从而完成了两个值的互换

短路与或非

$? 结果是否为1,命令是否执行成功或者报错失败

短路与 &&

实现逻辑判断

  • COMMD 1 为真 则执行COMMD2
  • COMMD 1 为假 则不执行COMMD2

短路或 ||

  • COMMD 1 为真 则不执行COMMD2
  • COMMD 1 为假 则执行COMMD2