[转帖]整理收藏:shell中的test条件测试

整理,收藏,shell,test,条件,测试 · 浏览次数 : 0

小编点评

**逻辑判断语句示例** ```python import os # 文件存在检测 if os.path.isfile('/tmp/[root@blog ~]# echo $?0: # 文件存在,返回 0 return 0 # 文件不存在检测 else: return 1 # 文件权限检测 if os.path.access('/tmp/[root@blog ~]# file1', os.W_R): # 可读权限 return True elif os.path.access('/tmp/[root@blog ~]# file1', os.W_W): # 可写权限 return True elif os.path.access('/tmp/[root@blog ~]# file1', os.W_X): # 可执行权限 return True else: return False # 字符串比较 if test('hello', 'world'): # 字符串相等 return True else: return False # 文件数据比较 if os.path.isfile('/tmp/[root@blog ~]# file1') and os.path.isfile('/tmp/[root@blog ~]# file2'): # 文件1 和文件2是否存在 return True else: return False # 字符串为空检测 if not test('hello', ''): # 字符串为空 return True else: return False ``` **使用示例:** ```bash # 检查文件存在 if [[ -f "/tmp/[root@blog ~]# file1" ]]; then echo "文件存在" else echo "文件不存在" fi # 检查文件权限 if [[ -r "/tmp/[root@blog ~]# file1" ]]; then echo "文件具有可读权限" else echo "文件没有可读权限" fi # 检查字符串相等 if [[ "hello" == "hello" ]]; then echo "字符串相等" else echo "字符串不相等" fi # 检查两个文件数据是否相同 if [[ -e "/tmp/[root@blog ~]# file1" -a -e "/tmp/[root@blog ~]# file2" -e "/tmp/[root@blog ~]# file3" ]]; then echo "文件1 和文件2 等同" else echo "文件1 和文件2 不相同" fi # 检查字符串是否为空 if [[ -z "/tmp/[root@blog ~]# string1" ]]; then echo "字符串为空" else echo "字符串不为空" fi # 检查多重条件 if [[ -r "/tmp/[root@blog ~]# file1" -a -x "/tmp/[root@blog ~]# file2" ]]; then echo "文件1 和文件2 都有可读和可执行权限" else echo "文件1 或文件2 权限不匹配" fi ```

正文

https://zhuanlan.zhihu.com/p/504991399

 

shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。

1.对文件类型的检测

-e:判断文件/目录是否存在,存在为0(真),否则为非0(假)

简单演示,如果一个文件(目录)存在,返回0

[root@blog ~]# test -e /tmp/
[root@blog ~]# echo $?
0

如果一个文件(目录)不存在,返回非0,比如我这里返回为1,说明该文件(目录)不存在。

[root@blog ~]# test -e /aabbcc1232432432
[root@blog ~]# echo $?
1

补充前两个参数,可以更具体的判断文件或文件夹是否存在

-f:判断该【文件名】是否为文件
-d:判断该【文件名】是否为目录
-b:判断该【文件名】是否为block device
-c:判断该【文件名】是否为character device
-S:判断该【文件名】是否为socket device
-P:判断该【文件名】是否为FIFO(pipe)文件
-L:判断该【文件名】是否为连结档

2.对文件权限的侦测

如:test -r file1

比如判断一个文件是否具有可读、可写之类的检测方法:

-r:判断该【文件名】是否具有可读属性
-w:判断该【文件名】是否具有可写属性
-x:判断该【文件名】是否具有可执行属性
-u:判断该【文件名】是否具有suid属性
-g:判断该【文件名】是否具有sgid属性
-k:判断该【文件名】是否具有Sticky bit属性
-s:判断该【文件名】是否为非空白文件

3.两个文件之前的比较

如:test file1 -nt file2

比如判断两个文件之间的新旧关系,也可以使用test命令来实现。

-nt:(newer than)判断file1 是否比 file2 新
-ot:(older than)判断file1 是否比 file2 旧
-ef:判断file1和file2是否为同一文件,主要用于判断文件是否指向同一个inode

4.两个整数之间的判断

test n1 -eq n2

test还可用于两个整数之间的判断。

-eq:判断两数值相等(equal)
-ne:判断两数值不相等(noe equal)
-gt:n1 大于 n2(greater than)
-lt:n1 小于 n2(less than)
-ge:n1 大于等于 n2(greater than or equal)
-le:n1 小于等于 n2(less than or equal)

5.判断字符串的数据

test -z string 判定字符串是否为0?若为空字符串,则为true
test -n string 判定字符串是否为非0?若为空字符串,则为false
test str1 = str2 判定字符串 str1 是否等于 str2,若相等,则回传true
test str1 != str2 判定字符串 str1 是否不等于 str2,若相等,则回传false

6.多重条件判断

  • -a (and) 两种条件同时成立!
# file同时具有r和x的权限,才回传true
test -r file -a -x file
  • -o (or) 两状况任何一个成立!
# file具有r或x权限时,才回传true
test -r file -o -x file
  • ! 反相状态
# 当file不具有x时,回传true
test ! -x file

大家可以自行测试一下上面的命令,晚安!

与[转帖]整理收藏:shell中的test条件测试相似的内容:

[转帖]整理收藏:shell中的test条件测试

https://zhuanlan.zhihu.com/p/504991399 shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。 1.对文件类型的检测 -e:

[转帖]这些 Shell 分析服务器日志命令集锦,收藏好

自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量。看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! 1、查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2、查看某一个页面被访

[转帖]高性能网络 | 你所不知道的 TIME_WAIT 和 CLOSE_WAIT

高性能网络 | 你所不知道的 TIME_WAIT 和 CLOSE_WAIThttps://my.oschina.net/fdhay/blog/638631 本文是我将最近两篇文章,重新整理成一篇,方便收藏。如果你已经阅读过前两篇,并且已经做了收藏,可以重新收藏本文即可。 你有收藏和整理文章的习惯吗?

[转帖]【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列

【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列 作者:冰河 2022-11-04 四川 本文字数:13519 字 阅读完需:约 44 分钟 写在前面 最近,一直有小伙伴让我整理下关于 JVM 的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。 JDK 是

[转帖]linux内存分析工具pmap

👦博主介绍:程序员悟啦(乌拉~) ✍个人仓库:码云 🔊座右铭:“懒”对一个人的毁灭性有多大,早起的重要性就多大。 📚免责声明:文章由博主原创、部分文章整理于网络,仅供学习和知识分享 💬相遇是缘,既然来了就拎着小板凳🪑坐下来一起唠会儿👁‍🗨,如果在文中有所收获,请别忘了一键三连,动动你发

【转帖】JAVA GC日志分析

https://zhuanlan.zhihu.com/p/613592552 ​ 目录 1. GC分类 针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集(Partial GC):不是完整收集整

[转帖]Spring Cloud 整合 SkyWalking

https://www.jianshu.com/p/e81e35dc6406 Java Agent 服务器探针 探针,用来收集和发送数据到归集器。参考官网给出的帮助 Setup java agent,我们需要使用官方提供的探针为我们达到监控的目的,按照实际情况我们需要实现三种部署方式 IDEA 部署

[转帖]整理常用的 vim 命令

vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学者来说,看到这么多的命令容易打退堂鼓,想当初,自己刚接触vim的时候,由于不熟悉vim,每一个命令都

[转帖]nginx调优参数整理总结

nginx性能优化考虑点 当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨: 当前系统结构瓶颈了解业务模式性能与安全 当前系统结构瓶颈 首先需要了解的是当前系统瓶颈,用的是什么,跑的是什么业务。里面的服务是什么样子,每个服务最大支持

[转帖]5.Nginx常遇问题入坑出坑整理

https://cloud.tencent.com/developer/article/2129777?areaSource=105001.10&traceId=zTlrks12HlQGZpAUZE_y4 0x00 Nginx 安装与编译 1.在Ubuntu系统上进行Nginx源码编译安装时指定了–