查看原文
其他

Shell基础(8)-逻辑运算、条件判断1

Cloud研习社 Cloud研习社 2023-06-06


每周二、四、六定期更新!



逻辑运算只有两个结果:


  • true, false

这是逻辑运算的结果,true用数字表示是1,false用数字表示是0


逻辑运算


  • 与:&

与运算,用符号“&”表示。
1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0


即:与运算中,只要有一个为假,则结论一定为假

  • 或:|

或运算用符号“|”表示。

1 | 1 = 1

1 |
 0 = 1

0 | 1 = 1

0 |
 0 = 0


即:或运算中,只要有一个为真,则结论一定为真
  • 非: !

非运算,用符号“!”表示。
!1 = 0 即: !true=false,不是真的,那我们就知道是假的
!0 = 1 即: !false=true,不是假的,那我们就知道是真的
  • 异或:^

异或运算,用符号"^"表示。
异或运算的两个值,相同为假,相异为真。即:
0 ^ 0 = 0

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1


异或运算的实例演示:
# 定义两个变量,交换两个变量的值
[root@studyclub ~]# x=8; y=16
[root@studyclub ~]# temp=$x; x=$y; y=$temp; echo x=$x,y=$y # 常规做法:这里借助了中间变量
x=16,y=8

# 下面我们用异或完成这个操作(异或操作可以根据任意两个数算出第三个数,就像加数、被加数、和,知道任意两个就可以算出第三个数)
[root@studyclub ~]# x=8; y=16
[root@studyclub ~]# x=$[x^y]; y=$[x^y]; x=$[x^y]; echo x=$x,y=$y
x=16,y=8


  • 逻辑运算的短路性:

    注意:我们把逻辑运算符号左边的条件称为第一个条件,逻辑运算右边的条件称为第二个条件。

    • 短路“与”

      第一个条件为假,结果一定为假,无需看第二个条件

      第一个条件为真,那么必须再看第二个条件,才能确定最终结果的真假

    • 短路“或”

      第一个条件为真,结果一定为真

      第一个条件为假,那么必须要看第二个条件,才能确定最终结果的真假


条件判断


条件判断的内容较多,今天我们先讲一部分。
上面我们学习了逻辑运算,那么在shell脚本中如何进行真假的判断呢?这就是我们本节要讲解的条件判断。
对条件的判断需要有专门的条件判断语句:


test expression
[ expression ]
[[ expression ]]


上面三种形式都可以实现对语句真假的判断,请注意:expression和中括号[]之间必须要有空格。
test命令和中括号“[]”是一样的。help帮助信息里的解释是test命令和中括号“[]”是同义词。双中括号“[[]]”的用法比较特殊,我们后面再讲。

变量测试

-v VAR 变量VAR是否定义。例如变量NAME是否定义:

[ -v NAME ]


实例:

# 设置一个变量并验证-v选项
[root@studyclub jason]# NAME=Jason
[root@studyclub jason]# test -v NAME
[root@studyclub jason]# echo $? # 说明test命令执行是成功(true 0)
0

# 取消设置上面的变量并验证
[root@studyclub jason]# unset NAME
[root@studyclub jason]# test -v NAME
[root@studyclub jason]# echo $? # 这个时候NAME变量不存在了,故test会返回错误(false 1)
1

# 我们换种形式再试一下
[root@studyclub jason]# NAME=Jason
[root@studyclub jason]# [ -v NAME ]
[root@studyclub jason]# echo $?
0

数字的比较

数字的比较就是比较大小:

格式为:数字1  operation  数字2,

operation如下:

-eq 等于,即英文equal
-ne 不等于,即英文not-equal
-lt 小于,即英文less-than
-le 小于等于,即英文less-than-or-equal
-gt 大于,即英文greater-than
-ge 大于等于,即英文greater-than-or-equal


我们通过实例来看看:
[root@studyclub jason]# [ 2 -eq 3 ]
[root@studyclub jason]# echo $? # 2等于3吗,2确实不等于3,这个是真的返回false(1)
1
[root@studyclub jason]# [ 2 -eq 2 ]
[root@studyclub jason]# echo $? # 2等于2吗,2确实等于2,返回true(0)
0
[root@studyclub jason]# [ 8 -lt 9 ]
[root@studyclub jason]# echo $? # 8小于9吗,8确实小于9,返回true(0)
0
[root@studyclub jason]# [ 8 -lt 7 ]
[root@studyclub jason]# echo $? # 8小于7吗,8实际上大于7,返回false(1)
1


所以,对于数字比较,如果数字1 能够equal, not-equal, less-than, less-than-or-equal, greater-than, or greater-than-or-equal数字2,那么这个判断的结果就是true(0),否则就是false(1)。作业:请自行练习其余的判断符号。
手应知:

    尝鲜Rocky Linux

《Linux基础及进阶》:

    051 - Shell基础(3)-环境变量    052 - Shell基础(4)-变量的有效范围、位置变量    053 - Shell基础(5)-退出状态码    054 - Shell基础(6)-set命令实现脚本安全    055 - Shell基础(7)-算术运算


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存