shell-7-test命令/test表达式

简介:

为了测试shell脚本里的条件,通过test命令可以得到退出状态,
test 命令还有快捷方式'[..]',在前几节里都能看到他们的影子,test命令与[ ]作用完全一致,需要注意的是 
方括号与条件之间要用空格隔开 比如 [ .... ], [ expression ], [ -e /dev/null ],

` `这个参考这里

test 表达式
运算符       如果....则为真
#一元表达式,运算符后边只有一个参数
-b file     file为块设备
-c file     file为字符设备
-d file     file为目录
-e file     file存在
-f file     file为一般文件
-g file     file属性位set- group-id置1
-h file     file为符号链接(与-L 同)
-k file     file设置了粘滞位(sticky bit)
-L file     file为符号链接(与-h同)
-O file     file用户拥有该文件
-p file     file为命名管道
-r file     file(对用户)可读
-s file     file不是空的(长度大于0字节)
-S file     file存在且为套接字(socket)
-t fd       file描述符与终端相关联
-u file     file属性位set-user-id置1
-w file     file(对用户)可写
-x file     file(对用户)可执行
-n string   字符串是非null (长度大于0字节)
-z string   字符串为空(长度为0字节)

#二元表达式,运算符前后各有一个参数
----------------------------------------------------------
expr1 -a expr2  两个表达式皆为真(逻辑与)
expr1 -o expr2  两个表达式至少有一个为真(逻辑或)
----------------------------------------------------------
file1 -nt file2  第一个文件比第二个文件新(利用修改时间戳比较)
file1 -ot file2  第一个文件比第二个文件旧(利用修改时间 戳比较)
file1 -ef file2  两个文件由链接关联在一起(硬链接或符号链接)
----------------------------------------------------------
var1 = var2     第一个字符串与第二个字符串相同
var1 != var2    第一个字符串与第二个字符串不相同
----------------------------------------------------------
var1 -eq var2   第一个整数与第二个整数相等
var1 -ne var2   第一个整数不等于第二个整数
var1 -lt var2   第一个整数小于第二个整数
var1 -le var2   第一个整数小于或等于第二个整数量
var1 -gt var2   第一个整数大于第二个整数
var1 -ge var2   第一个整数大于或等于第二个整数


需要注意的是 test -a 和 -o (test运算符) 与 && 和 || (shell运算符) 它们的区别,比如

[root@master ~]# test -e /etc/passwd -a -r /etc/passwd;echo $?            #一个test命令,两种条件
0
[root@master ~]# test -e /etc/passwd && test -r /etc/passwd;echo $?       #两个命令,以快捷方式计算
0
[root@master ~]# test -e /etc/passwd && -r /etc/passwd                    #语法错误
-r:找不到命令

test命令 小技巧
1 所有shell变量都应该以引号括起来,这样即使shell变量展开后为null值,也不会出现问题!
2 比较字符串时,在字符串前置字母X比如 #a=he;test "X$a" = "Xhe";echo $? ,当然了前置字母可以是任意的



本文转自 dongnan 51CTO博客,原文链接: http://blog.51cto.com/dngood/617517

相关文章
|
5月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
257 1
|
6月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
8月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
230 20
|
8月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
278 12
|
10月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
1194 7
|
11月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
222 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
10月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
188 1
|
11月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
91 1
|
11月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
96 0
|
11月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
632 0