6 Shell脚本的条件测试与比较

已知:$?执行命令后 返回0 表示真 返回1 表示假

6.1.1条件测试 常用的语法

条件表达式语法 说明

1 test <测试表示式> test命令与后面表达式最少一个空格 等同于2

2 \<测试表示式\> \[\]边界与内容左右2边最少一个空格 推荐使用

3 \[ \<测试表示式\> ] \[]边界与内容左右2边最少一个空格 扩展的test命令

4 ((<测试表示式>)) (())2端不需要有空格 常用于计算

注意事项

在双中括号\[]中可以使用通配符 && || > < 不能用于\[\]中

\[\]可以使用-a -o -gt -lt

对于整数的关系运算 也可以使用shell的算术运算符(())

6.1.2 test条件测试的简单语法及示例

语法: test -参数 <条件表达式>

-f 普通文件

-z 测试字符串为零 表达式成立 非零 不成立

test -f file && echo true || echo false

test的-f参数用于测试文件是否为普通文件 test命令若执行成功(假) 则执行&&后面的命令

而||后面的命令式test执行失败(假)的后执行的命令

解析:如果test文件存在 则输出true 不存在输出false

也可以只用上面一半逻辑(仅有一个&&或||)

test -f /tmp/oldboy.txt && echo 1 #若表达式成功 则输出1

test -f /tmp/oldboy.txt || echo o #若表达式不成功 则输出0

补充:&&和||的两端可以有空格 也可以没空格

6.1.3 \[\]中括号条件测试语法及示例

语法: \<条件表达式\>

示例 -f /tmp/old.boy.txt && echo 1 || echo 0

-f 前后至少有一个空格 ]前后至少有一个空格 echo 后至少有一个空格

6.1.4\[]条件测试语法及示例

语法:\[ \<条件表达式\> ]

注意:双中括号的两端也要有空格

\[ -f /tmp/old.boy.txt ] && echo 1 || echo 0

完整的 \[\] \[]的用法可通过 man bash获取

6.2 文件测试表达式

6.2.1 文件测试表达式的用法

常用的文件测试操作符 全拼 说明(真则测试表达式成立)

-d 文件 directory 文件存在且为目录则为真

-f 文件 file 文件存在且为普通文件则为真

-e 文件 exist 文件存在则为真

-r文件 read 文件存在且可读则为真

-s文件 size 文件存在且文件大小不为0则为真

-w文件 write 文件存在且可写则为真

-L文件 link 文件存在且为链接文件则为真

-x文件 文件存在且可执行则为真

fl -nt f2 newer than 文件f1比文件f2新则为真 按文件修改时间来计算

f1 -ot f2 older thant 文件f1比文件f2老则为真 按文件修改时间来计算

root@localhost /# -w oldboy && echo 1 || echo 0

1

root@localhost /# ll | grep oldboy

-rw-r--r-- 1 root root 0 5月 8 01:16 oldboy

提示 测试文件的读写执行等属性 不光是根据文件属性rwx的表示来判断 还有看当前执行的测试用户是否真的可以按照对应的权限操作该文件

相关推荐
逸模2 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
sbjdhjd2 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
人间乄惊鸿客2 小时前
Linux所遇问题自记录
linux
AOwhisky3 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
Phantom Void3 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
司悠3 小时前
【解决在vscode里开服务器登录codeX后发消息会一直reconnecting】
服务器·ide·vscode
倔强的石头1063 小时前
Fooocus开源神器+cpolarAI让绘画告别服务器依赖
运维·服务器·cpolar
Ajie'Blog3 小时前
Copilot Agent Tasks API 开放:AI 编程开始进入后台任务时代
服务器·前端·javascript·人工智能·copilot·ai编程
wei_shuo3 小时前
服务器挂了等用户投诉才发现?我用Beszel搭了轻量监控系统,宕机第一时间通知我
运维·服务器
王码码20353 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web