前言
前几节我们学习了shell脚本变量的定义以及输入输出,这节我们来学习shell的条件测试。
什么是条件测试
所谓条件测试,即shell中用来判断是否满足某某条件的语句,例如某个文件是否存在?用户输入的数字是否大于等于某个值等,其主要作用是用来控制程序的执行流程。
条件测试分类
shell的条件测试主要包括文件状态测试、字符串比较、整数值比较以及逻辑测试几类。
文件状态测试
格式:[ 操作符 文件或目录 ]
注意:shell 条件测试中,测试的表达式内容与中括号([])左右两侧必须至少保持一个空格!
[ 空格 条件表达式 空格 ]
文件测试相关的操作符及其作用如下
| 操作符 | 作用 |
|---|---|
-d | 测试文件是否是目录 |
-e | 测试文件或目录是否存在 |
-f | 测试是否是文件 |
-r | 测试当前用户是否有读取权限 |
-w | 测试当前用户是否有写入权限 |
-x | 测试当前用户是否有执行权限 |
-L | 测试是否为符号链接文件 |
# 判断当前目录下的 file1文件是否是目录 ./ 表示当前目录
[ -d ./file1 ]
# 判断当前目录下的 file1 是否存在
[ -e ./file1 ]
# 判断 /usr/local/shell/file1 是否是一个文件
[ -f /usr/local/shell/file1 ]
# 判断当前用户对当前目录下 file1 文件是否有读的权限
[ -r ./file1 ]
# 判断当前用户对当前目录下 file1 文件是否有写的权限
[ -w ./file1 ]
# 判断当前用户对当前目录下 file1 文件是否有执行的权限
[ -x ./file1 ]
# 判断当前目录下 file1 文件是否为符号链接文件
[ -L ./file1 ]
可以结合逻辑运算在控制台直接测试条件表达式, [ -e /usr/local/code ] && echo "YES",如果前面的条件([ -e /usr/local/code ])成立,则执行后面的 echo "YES"。
字符串比较
格式:[ 字符串1 操作符 字符串2 ]
字符串的比较相对较为简单,主要包括判断两个字符串是否相等或不等以及判断某个字符串是否为空。
#!/bin/bash
# 字符串比较
str1="abc"
str2="abd"
str3="abc"
str4=""
# 比较 str1 、str2 两个字符串是否相等(内容一样)
[ $str1 = $str2 ] && echo "YES"
# 比较 str1 、str3 两个字符串是不是不一样(内容不一样)
[ $str1 = $str3 ] && echo "YES"
# 比较 str1 、str2 两个字符串是否相等(内容一样)
[ $str1 = $str3 ] && echo "YES"
# 判断 str4 的内容是否为空
[ -z $str4 ] && echo "YES"
整数值比较
格式:格式:[ 整数1 操作符 整数2 ]
常用的整数测试操作符及其对应关系如下:
| 整数操作符 | 作用 |
|---|---|
-eq | 等于(equal) |
-ne | 不等于(not equal) |
-gt | 大于(greater than) |
-lt | 小于(less than) |
-le | 小于等于(less than or equal) |
-ge | 大于等于(greater than or equal) |
# 判断 3 是否小于 5
[ 3 -lt 5 ] && echo "YES"
# 判断 3 是否大于 5
[ 3 -gt 5 ] && echo "YES"
# 判断 3 是否大于等于 5
[ 3 -ge 5 ] && echo "YES"
逻辑测试
逻辑测试的表达式较少即与 或 非,
| 符号 | 含义 | ||
|---|---|---|---|
-a 或 && | 两个条件都满足则成立 | ||
| `-o 或 | ` | 两个条件中有一个成立则成立 | |
! | 取反,即原来成立的条件取反为假(不成立),反之亦然 |
# 因为 3 小于 5 和 8 大于 6 都是成立的,所以最后能输出 "两个条件都成立"
[ 3 -lt 5 ] && [ 8 -gt 6 ] && echo "两个条件都成立"
# 因为 3 大于于 5 不成立, 所以最后不会输出 "两个条件都成立",&& 运算只有参与运算的条件有一个不成立,则最后结果就是不成立。
# eg:上小学的时候你数学成绩好,语文成绩不好这不叫学习好,这叫偏科,只有两样都好才叫学习好
[ 3 -gt 5 ] && [ 8 -gt 6 ] && echo "两个条件都成立"
# 或运算(||) 左边和右边有一个成立则结果就是成立
[ 3 -gt 5 ] || [ 8 -gt 6 ] && echo "成立"
重要的事情说 3 遍:
注意:shell 条件测试中,测试的表达式内容与中括号([])左右两侧必须至少保持一个空格! 注意:shell 条件测试中,测试的表达式内容与中括号([])左右两侧必须至少保持一个空格! 注意:shell 条件测试中,测试的表达式内容与中括号([])左右两侧必须至少保持一个空格!
今天的内容就到这里了,取反的案例会在以后流程控制中用到,祝各位晚安!
系列传送门如下:
Shell脚本基础从头开始(一)── 几个linux实操技巧
Shell脚本基础从头开始(九)── shell的循环语句控制