常见的文件测试操作符:
-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查询。
文件测试表达式举例:
普通文件测试表达式举例:
测试普通文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[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 0
1 测试是否为目录 [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 |
1
2
3
|
[root@linux-node1 ~] # mkdir oldgirl
[root@linux-node1 ~] # [ -f oldgirl ]&&echo 1||echo 0
0 |
1
2
|
[root@linux-node1 ~] # [ -e oldgirl ]&&echo 1||echo 0
1 |
测试目录:
1
2
|
[root@linux-node1 ~] # [ -d oldgirl ]&&echo 1||echo 0
1 |
定义变量测试:变量最好加双引号,要不有时候不准确。
1
2
3
4
5
6
7
8
|
[root@linux-node1 ~] # file1=/etc/services
[root@linux-node1 ~] # file2=/etc/rc.local
[root@linux-node1 ~] # [ -f $file1 ]&&echo 1||echo 0
1 [root@linux-node1 ~] # [ -d $file1 ]&&echo 1||echo 0
0 [root@linux-node1 ~] # [ -d "$file1" ]&&echo 1||echo 0
0 |
传参测试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[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 3
1 1 1 [root@linux-node1 ~] # cat t11.sh
[ $1 - eq 3 ]||{
echo 1
echo 1
echo 1
} [root@linux-node1 ~] # sh t11.sh 1
1 1 1 [root@linux-node1 ~] # sh t11.sh 12
1 1 1 [root@linux-node1 ~] # sh t11.sh 3
|
sandshell