一、条件测试
1.test 命令
-
Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。
-
使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。
test 命令格式如下所示
test 条件表达式
或
[ 条件表达式 ] #括号与表达式之间需要至少一个空格进行分隔
或
[[ 条件表达式 ]]
两种方式作用完全相同,但通常后者形式更为常用,也更贴近编辑习惯。
2. 文件测试
- 文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
- 常用操作选项如下,使用时将测试对象放在操作选项之后即可
-d 测试是否为目录(Directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(Excute)
-b 测试是否为测试文件
-c 测试是否为字符设备文件
-s 测试存在且文件大小为空
-L 测试是否为链接文件
执行条件测试操作后,通过预定义变量 “$?” 可以获得测试命令的返回状态值,从而判断该条件是否成立
[root@localhost /home]#test -d /var/log/ && echo "是目录"
是目录 #输出"是目录"表示是目录
[root@localhost /home]#test -e /var/log/ && echo "存在"
存在
[root@localhost /home]#echo $? #查看命令的返回值
0 #返回0表示条件成立
[root@localhost /home]#[ -d /home/1.txt/ ]
[root@localhost /home]#echo $?
1 #返回1表示不成立
执行下面的操作可以判断 /opt/目录下是否存在名为 1.txt 的文件,如果不存在就创建一个 1.txt 的文件
[root@localhost /home]#[ ! -e /opt/1.txt ] && echo "yes" #“!”表示取反的意思
yes
[root@localhost /home]#ls /opt/
rh
[root@localhost /home]#[ ! -e /opt/1.txt ] && mkdir /opt/1.txt
[root@localhost /home]#ls /opt/
1.txt rh
3. 整数值比较
- 整数值比较是指根据给定的两个整数值来判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。
基本格式和常用选项如下:
[ 整数1 操作符 整数2 ]
-eq 第一个数等于(Equal)第二个数
-ne 第一个数不等于(Not Equal)第二个数
-gt 第一个数大于(Greater Than)第二个数
-lt 第一个数小于( Lesser Than)第二个数
-le 第一个数小于或等于(Lesser or Equal)第二个数
-ge 第一个数大于或等于(Greater or Equal)第二个数
案例
执行下面的操作可以判断当前的用户数量,当超过3个时输出 “用户过多 !”
[root@localhost /home]#who | wc -l
4
[root@localhost /home]#[ $(who | wc -l) -gt 3 ] && echo "用户过多!"
用户过多!
② 若要判断当前可用的空闲内存大小,当低于1800MB时输出具体数值,可以执行下面的操作
[root@localhost /home]#FreeCC=$(free -m |grep "Mem:" | awk '{print $6}')
[root@localhost /home]#echo $?
0
[root@localhost /home]#free -m
total used free shared buff/cache available
Mem: 3774 735 1347