3. 逻辑运算

逻辑运算

逻辑运算又叫布尔运算,是一种基于布尔值(true或false)进行的运算,它们用于根据条件的逻辑关系来评估表达式。

逻辑运算有三种运算:

逻辑与运算

逻辑与运算是两个参与运算的布尔值都为真(true) 时结果才为真(true),否则结果为假(false)。

语法格式:

命令1 && 命令2

短路运算

短路运算是指一旦结果确定,将放弃后续的求值,直接返回结果。

Shell 中的逻辑与运算是短路运算,一旦 命令1 的结果为假值,则放弃 命令2 的执行,直接返回 假值。否则继续运行 命令2 并返回 命令2 的结果。

示例:

如果创建文件夹成功就复制文件,然后查看命令运行的返回结果。

weimingze@mzstudio:~$ mkdir /weimingze && cp /etc/passwd /weimingze  # cp 命令没有执行
mkdir: cannot create directory ‘/weimingze’: Permission denied
weimingze@mzstudio:~$ echo $?
1
weimingze@mzstudio:~$ mkdir ~/test && cp /etc/passwd ~/test  # cp 命令执行并复制的文件
weimingze@mzstudio:~$ echo $?
0
weimingze@mzstudio:~$ ls ~/test
passwd

逻辑或运算

逻辑或运算是两个参与运算的布尔值都为假(false) 时结果才为假(false),否则结果为真(true)。

语法格式:

命令1 || 命令2

Shell 中的逻辑或运算是短路运算,一旦 命令1 的结果为真值,则放弃 命令2 的执行,直接返回 真值。否则继续运行 命令2 并返回 命令2 的结果。

示例:

创建文件夹 /weimingze 如果不成功就在当前工作路径创建文件夹 weimingze,并返回命令执行的最终状态值

weimingze@mzstudio:~$ mkdir /weimingze || mkdir weimingze
mkdir: cannot create directory ‘/weimingze’: Permission denied
weimingze@mzstudio:~$ echo $?
0
weimingze@mzstudio:~$ ls
weimingze  下载  公共  图片  文档  桌面  模板  视频  音乐

前面的 mkdir /weimingze 命令失败,后面的 mkdir weimingze 命令执行了,否则就不会执行 mkdir weimingze 命令了。

逻辑非运算

逻辑非运算 是将执行的命令的结果取 逻辑非 操作(即变为变为)。

Shell 逻辑非 是通过 叹号(英文 !)命令实现的。

语法格式:

! 命令 ...

示例

如果当前不存在文件 mynote.txt 则创建此文件,并将 /etc/passwd 的最后两行写入该文件。并查看最终程序返回的结果($? 的值)。

weimingze@mzstudio:~/test$ ls
weimingze@mzstudio:~/test$ ! [ -f mynote.txt ] && tail -2 /etc/passwd > mynote.txt
weimingze@mzstudio:~/test$ echo $?
0
weimingze@mzstudio:~/test$ ls
mynote.txt
weimingze@mzstudio:~/test$ cat mynote.txt
weimingze:x:1000:1000:weimingze:/home/weimingze:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin

逻辑与、逻辑或、逻辑非混合运算

逻辑与、逻辑或和逻辑非运算可以任意组合。大致语法如下:

语法格式

命令1 && 命令 && 命令3 || 命令4 || ! 命令5 && ....

可以根据业务逻辑需要任意组合。

练习:

  1. 使用 test 命令结合逻辑运算符,判断如果当前文件夹下没有文件夹 myfolder 则调用 mkdir 命令创建这个文件夹。如果文件夹存在则不调用这个文件夹。