shell的条件测试语句:test
2023-02-18 16:34:38 时间
条件测试:
判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成
测试结果:
-
若真,则状态码变量 $? 返回0
-
若假,则状态码变量 $? 返回1
条件测试命令:
test和[ ]
test和 `]`等价
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
[[ EXPRESSION ]] 相当于增强版的 [ ], 支持[]的用法,且支持扩展正则表达式和通配符
测试变量:
-v 判断 NAME 变量是否定义
-R 判断 NAME 变量是否定义并且是名称引用,bash 4.4新特性
[root@CentOS7 ~]# test -v NUM ; echo $?
0
[root@CentOS7 ~]# test -v xx ; echo $?
1
数值测试:
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-ge 是否大于等于
-lt 是否小于
-le 是否小于等于
[root@CentOS7 ~]# i=10;j=11
[root@CentOS7 ~]# test $i -eq $j ; echo $?
1
[root@CentOS7 ~]# test $i -ne $j ; echo $?
0
[root@CentOS7 ~]# test $i -lt $j ; echo $?
0
字符串测试
-z STRING 字符串是否为空,没定义或空为真,不空为假,
-n STRING 字符串是否不空,不空为真,空为假
STRING1 = STRING2 是否等于,注意 = 前后有空格
[[]] 用法:
[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意: 此表达式用于[[ ]]中;扩展的正则表达式
范例:使用 [[ ]] 判断文件后缀
#通配符
[root@centos8 ~]#FILE=test.log
[root@centos8 ~]#[[ "$FILE" == *.log ]]
[root@centos8 ~]#echo $?
0
#正则表达式
[root@centos8 ~]#FILE=test.log
[root@centos8 ~]#[[ "$FILE" =~ \.log$ ]]
[root@centos8 ~]#echo $?
0
文件测试;
-a FILE:同 -e
-e FILE: 文件存在性测试,存在为真,否则为假
-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-h FILE 或 -L FILE:存在且为符号链接文件
-p FILE:是否存在且为命名管道文件
-S FILE:是否存在且为套接字文件
例如:
[root@CentOS7 ~]# test -a /etc/fstab ; echo $?
0
[root@CentOS7 ~]# test -a /etc/fstabxx ; echo $?
1
文件权限测试:
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
-u FILE:是否存在且拥有suid权限
-g FILE:是否存在且拥有sgid权限
-k FILE:是否存在且拥有sticky权限
例如:
[root@CentOS7 ~]# test -w /etc/fstab ;echo $?
0
[root@CentOS7 ~]# test -k /etc/fstab ;echo $?
1
文件属性测试:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组
FILE1 -ef FILE2 #FILE1是否是FILE2的硬链接
FILE1 -nt FILE2 #FILE1是否新于FILE2(mtime)
FILE1 -ot FILE2 #FILE1是否旧于FILE2
相关文章
- [NetWork] 计算机网络基本概述
- 杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】
- AI编程登上Science封面:AlphaCode打竞赛,三分之二赛题一遍过,成绩超过一半程序员
- 说说真实Java项目的开发流程,以及面试前的项目准备说辞
- 案例 | 数字孪生5G智慧港口三维可视化系统
- 为什么很多候选人投出去的简历石沉大海(面向Java方向)
- 面试前如何准备数据库方面的说辞
- 全同胞家系如何计算遗传力及育种值
- Spring面试点汇总
- 遗传进展公式计算方法
- NCII试验 计算配合力和遗传力的方法
- 开局一张图 | 介绍PRS的计算步骤
- 如何使用plink进行二分类性状的GWAS分析并计算PRS得分
- 如何计算连续性状的PRS得分
- 【C语言经典面试题】这样的char * 定义怎么回事
- 如何计算配合力+方差组分+遗传力
- ESXI 通过 SSH 的方式进入物理接显示器的界面
- 苹果App Store 审核应用被拒 我所碰到的问题集合
- 微信小程序 修改/使用上一个页面的data数据及方法 getCurrentPages()获取页面栈的使用 常见页面展示
- MONGODB WiredTiger 页面大小与功能及 wiredTiger 版本与 MONGODB 的关系