Shell的条件表达式知识初步介绍实践

本文详细介绍了Linux中常用的文件测试操作符,包括-f、-d、-s等,并通过实例展示了如何使用这些操作符来判断文件类型、权限及时间属性。适合初学者快速掌握文件测试的基础知识。

常见的文件测试操作符:

-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博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1964128如需转载请自行联系原作者

sandshell
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值