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 && ....
可以根据业务逻辑需要任意组合。
练习:
- 使用 test 命令结合逻辑运算符,判断如果当前文件夹下没有文件夹
myfolder则调用mkdir命令创建这个文件夹。如果文件夹存在则不调用这个文件夹。