【现学现忘&Shell编程】— 38.Shell中的条件判断(一
2020-10-26 本文已影响0人
繁华似锦Fighting
1、test 测试命令
(1)test命令介绍
在Shell中的test
测试命令,用于测试某种条件或某几种条件是否真实存在。
在Shell中的test
测试命令,是判断语句和循环语句中条件测试的工具。test
命令经常用于对判断语句进行测试,用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
(2)test命令使用方式
Shell中test
命令的用法有两种:
-
方式一:
test expression
当 test 判断 expression 成立时,返回值状态为 0,否则为非 0 值。
expression
为表达式。 -
方式二:
test
命令也可以简写为[ ]
这时的
test
命令格式为:[ expression ]
expression
为表达式。注意:
[]
和expression
之间的空格,这两个空格是必须的,否则会导致语法错误。[]
的写法更加简洁,比 test 使用频率高。
(3)示例
需求:判断一个文件是否存在
# 说明:
# -e 选项是test命令中判断文件是否存在的选项
# test命令用命令行的方式执行是没有返回显示的,
# 我们可以通过查看$?变量的方式,查看上一条命令是否正确执行。
# 返回值为0,表示上一条命令正确执行,
# 返回值为非0,表示上一条命令没有正确执行。
# 判断一个文件是否存在
# 方式一:
[root@localhost tmp]# test -e student.txt
# 结果为0,表示上一条命令正确执行,说明student.txt文件存在。
[root@localhost tmp]# echo $?
0
# 方式二:
[root@localhost tmp]# [ -e abc.txt ]
# 结果为非0,表示上一条命令没有正确执行,说明abc.txt文件不存在。
[root@localhost tmp]# echo $?
1
# 如果不想每次执行完test命令,还要查看$?变量,来确定命令是否正确实行,
# 可以使用如下编写方式:(方式一同理)
[root@localhost tmp]# [ -e abc.txt ] && echo yes || echo no
no
[root@localhost tmp]# [ -e student.txt ] && echo yes || echo no
yes
提示:在编写Shell程序时,一般都是使用第二种书写方式(没见过不一般的情况)。
2、按照文件类型进行判断
我们先来看看test可以进行哪些文件类型的判断:
测试选项 | 作用 |
---|---|
-b 文件 |
判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)。(少见) |
-c 文件 |
判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)。(少见) |
-d 文件 |
判断该文件是否存在,并且是否为目录文件(是目录为真)。(常见) |
-e 文件 |
判断该文件是否存在(存在为真)。(常见) |
-f 文件 |
判断该文件是否存在,并且是否为普通文件(是普通文件为真)。(常见) |
-L 文件 |
判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)。(常见) |
-p 文件 |
判断该文件是否存在,并且是否为管道文件(是管道文件为真)。(少见) |
-s 文件 |
判断该文件是否存在,并且是否为非空(非空为真)。 |
-S 文件 |
判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)。 |
示例:
Linux系统中tmp目录下的文件,情况如下:
[root@localhost tmp]# ll
总用量 12
-rw-r--r--. 1 root root 371 10月 16 13:28 student.txt
-rw-r--r--. 1 root root 318 10月 14 18:03 test2.txt
-rw-r--r--. 1 root root 69 10月 16 17:39 test.txt
练习:
# 1.判断student.txt文件是否为目录
[root@localhost tmp]# [ -d student.txt ] && echo yes || echo no
no
# 2.判断student.txt文件是否为普通文件
[root@localhost tmp]# [ -f student.txt ] && echo yes || echo no
yes
# 3.判断student.txt文件是中内容是否为空
[root@localhost tmp]# [ -s student.txt ] && echo yes || echo no
yes
# 我们创建一个空文件,在判断一次。
[root@localhost tmp]# touch abc
[root@localhost tmp]# [ -s abc ] && echo yes || echo no
no
# 注意:
# 用命令行执行命令的时候可以写相对路径,因为我在对应的文件夹当中。
# 而在编写Shell脚本的时候,文件名一定要加上绝对路径,要不然有可能找不到。