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

简介:

常见的文件测试操作符:

-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
相关文章
|
5月前
|
Unix Shell Linux
Shell实践
Shell实践
41 2
|
机器学习/深度学习 Shell 开发工具
Shell脚本编程实践——第1关:编写一个脚本,求斐波那契数列的前10项及总和
Shell脚本编程实践——第1关:编写一个脚本,求斐波那契数列的前10项及总和
1687 0
|
5月前
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
172 1
|
5月前
|
监控 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地定位和解决线上问题,提高系统的稳定性和性能。让我们一同进入这个学习过程吧!
74 0
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
|
4月前
|
Shell 开发者
Shell 函数深入解析与实践
了解 Shell 函数的基础,包括定义、参数传递及返回值。函数定义有多种语法,如 `function func() {...}` 或 `func() {...}`。参数通过 `$1`, `$2` 等访问,`$@` 代表所有参数。`return` 用于返回退出状态码(0-255),非数值数据需用 `echo`。正确获取函数返回值应立即检查 `$?`,例如:`result=$?`。实践中不断探索和学习!
32 1
|
5月前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
127 3
|
5月前
|
Shell Linux
【Linux】进程实践项目(更新中) — 自主shell编写
前几篇文章,我们学习进程的相关知识:进程概念,进程替换,进程控制。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来运用我们所学的相关知识。这个项目就是手搓一个shell模块,模拟实现Xshell中的命令行输入。
58 1
|
5月前
|
运维 Shell C语言
第三章 Shell表达式与运算符
第三章 Shell表达式与运算符
|
5月前
|
关系型数据库 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(文件处理指令-上)
在当今的数字化时代,Linux已成为服务器、云计算、物联网等众多领域的核心操作系统。对于技术从业者、开发者以及系统管理员来说,掌握Linux指令不仅是一项基本技能,更是打开专业领域大门的关键。
84 3
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(文件处理指令-上)
|
5月前
|
Shell Linux Windows
Linux【脚本 05】交互式shell脚本编写及问题处理([: ==: unary operator expected)[: ==: 期待一元表达式
Linux【脚本 05】交互式shell脚本编写及问题处理([: ==: unary operator expected)[: ==: 期待一元表达式
119 1