常见的文件测试操作符:

-f 文件,英文file:文件存在且为普通文件则真,即测试表达式成立

-d 文件,英文directory:文件存在且为目录文件则真,即测试表达式成立

-s 文件,英文size:文件存在且文件大小不为0则真,即测试表达式成立。

-e文件,英文exist:文件存在则真,即测试表达式成立。只要有文件就行,要区别-f

-r 文件,英文read:文件存在且可读则真,即测试表达式成立。

-w文件,英文write:文件存在且可写则真,即测试表达式成立。

-x文件,英文executable:文件存在且可执行则真,即测试表达式成立。

-L文件,英文link:文件存在且为链接文件则真,即测试表达式成立。

f1 -nt f2 ,英文newer than:文件f1比f2新则真,即测试表达式成立。根据文件修改时间计算

f1 -ot f2,英文older than:文件f1比f2旧则真,即测试表达式成立。根据文件修改时间计算

特别说明,这些操作符对于[[]]、[]、test几乎是通用的,更多的操作符请man test查询。

文件测试表达式举例:

普通文件测试表达式举例:

测试普通文件:

[root@linux-node1 ~]# touch oldboy[root@linux-node1 ~]# ll oldboy-rw-r--r-- 1 root root 0 Sep 10 16:00 oldboy测试是否为文件[root@linux-node1 ~]# [ -f oldboy ]&&echo 1||echo 01测试是否为目录[root@linux-node1 ~]# [ -d oldboy ]&&echo 1||echo 0  0测试可读[root@linux-node1 ~]# [ -r oldboy ]&&echo 1||echo 0 1测试可写[root@linux-node1 ~]# [ -w oldboy ]&&echo 1||echo 0 1测试可执行[root@linux-node1 ~]# [ -e oldboy ]&&echo 1||echo 0 1
[root@linux-node1 ~]# mkdir oldgirl[root@linux-node1 ~]# [ -f oldgirl ]&&echo 1||echo 00
[root@linux-node1 ~]# [ -e oldgirl ]&&echo 1||echo 01

测试目录:

[root@linux-node1 ~]# [ -d oldgirl ]&&echo 1||echo 0 1

定义变量测试:变量最好加双引号,要不有时候不准确。

[root@linux-node1 ~]# file1=/etc/services[root@linux-node1 ~]# file2=/etc/rc.local[root@linux-node1 ~]# [ -f $file1 ]&&echo 1||echo 01[root@linux-node1 ~]# [ -d $file1 ]&&echo 1||echo 0 0[root@linux-node1 ~]# [ -d "$file1" ]&&echo 1||echo 00

传参测试:

[root@linux-node1 ~]# cat t11.sh [ $1 -eq 3 ]&&{  echo 1  echo 1  echo 1}[root@linux-node1 ~]# sh t11.sh 1[root@linux-node1 ~]# sh t11.sh t11.sh: line 1: [: -eq: unary operator expected[root@linux-node1 ~]# sh t11.sh 2[root@linux-node1 ~]# sh t11.sh 3111[root@linux-node1 ~]# cat t11.sh [ $1 -eq 3 ]||{  echo 1  echo 1  echo 1}[root@linux-node1 ~]# sh t11.sh 1111[root@linux-node1 ~]# sh t11.sh 12111[root@linux-node1 ~]# sh t11.sh 3