news 2026/9/4 3:06:16

【Shell】编程入门到精通保姆级教程:----test 命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Shell】编程入门到精通保姆级教程:----test 命令

一、【Shell】编程入门:test命令详解 📜

1.1、test命令简介

test命令是 Shell 内置的条件判断工具,用于评估表达式并返回布尔值(真/假),它通常与if语句结合使用,是 Shell 脚本中实现逻辑控制的基础。
Shell 中的test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

语法格式
test EXPRESSION

[ EXPRESSION ]# 注意方括号内必须有空格

1.2、文件测试操作 📁

test命令最常用于检查文件属性,以下是常用文件测试选项:

操作符描述示例
-e文件是否存在[ -e file.txt ]
-f是普通文件[ -f /path/to/file ]
-d是目录[ -d /path/to/dir ]
-r可读[ -r file.txt ]
-w可写[ -w file.txt ]
-x可执行[ -x script.sh ]
-s文件大小 >0[ -s logfile ]
-L是符号链接[ -L symlink ]

示例脚本:

#!/bin/bashfile="/etc/passwd"if[-e"$file"];thenecho"$file存在"if[-r"$file"];thenecho"并且可读"fielseecho"$file不存在"fi

输出结果为:
/etc/passwd 存在
并且可读

1.3、字符串比较 ✍️

test提供了多种字符串比较方式:

操作符描述示例
-z STRING字符串为空[ -z "$var" ]
-n STRING字符串非空[ -n "$var" ]
STRING1 = STRING2字符串相等[ "$var1" = "$var2" ]
STRING1 != STRING2字符串不等[ "$var1" != "$var2" ]

重要提示:字符串变量应该总是用双引号括起来,防止空变量导致语法错误。

示例:

#!/bin/bashread-p"输入用户名: "usernameif[-z"$username"];thenecho"错误:用户名不能为空"exit1elif["$username"="root"];thenecho"警告:不建议使用root账户"elseecho"欢迎,$username"fi

执行后,我们在终端输入 zhuzhu,输出结果类似如下:
输入用户名: zhuzhu
欢迎, zhuzhu

1.4、数值比较 🔢

对于数值比较,test使用不同的操作符:

操作符描述示例
-eq等于[ "$a" -eq "$b" ]
-ne不等于[ "$a" -ne "$b" ]
-gt大于[ "$a" -gt "$b" ]
-ge大于或等于[ "$a" -ge "$b" ]
-lt小于[ "$a" -lt "$b" ]
-le小于或等于[ "$a" -le "$b" ]

示例:

#!/bin/bashread-p"输入年龄: "ageif["$age"-lt0];thenecho"年龄不能为负数"elif["$age"-lt18];thenecho"未成年人"elif["$age"-ge18]&&["$age"-lt60];thenecho"成年人"elseecho"老年人"fi

执行后,我们在终端输入 12,输出结果类似如下:
输入年龄: 12
未成年人

1.5、逻辑操作符 🧩

test支持逻辑组合:

操作符描述示例
!逻辑非[ ! -f "$file" ]
-a逻辑与[ "$a" -eq 1 -a "$b" -eq 2 ]
-o逻辑或[ "$a" -eq 1 -o "$b" -eq 2 ]

现代推荐写法:使用&&||替代-a-o,更符合 POSIX 标准:

["$a"-eq1]&&["$b"-eq2]# 与["$a"-eq1]||["$b"-eq2]# 或

1.6、高级用法:[[ ]](( ))

Bash 提供了更强大的测试语法:
双括号[[ ]]

  • 支持模式匹配:[[ "$var" == *.txt ]]
  • 支持正则表达式:[[ "$var" =~ ^[0-9]+$ ]]
  • 更安全的字符串处理

算术比较(( ))

  • 专为数值比较设计:(( a > b ))
  • 支持更复杂的算术表达式

示例:

if[["$file"==*.log]];thenecho"这是日志文件"fiif(($count>10));thenecho"数量超过10"fi

二、test命令实际应用示例 💡

2.1、检查服务是否运行

#!/bin/bashservice="nginx"ifsystemctl is-active--quiet"$service";thenecho"$service正在运行"elseecho"$service未运行"# 可以添加启动服务的命令fi

2.2、备份文件检查

#!/bin/bashbackup_file="/backups/data_$(date+%Y%m%d).tar.gz"if[!-f"$backup_file"];thenecho"错误:备份文件$backup_file不存在"exit1elif[!-s"$backup_file"];thenecho"警告:备份文件为空"elseecho"备份验证成功"fi

三、常见错误与调试技巧 🛠️

3.1、高频错误点

  • 缺少空格:[ "$a"="$b" ]是错误的,正确是[ "$a" = "$b" ]
  • 未引用的变量:[ -f $file ]应该为[ -f "$file" ]
  • 混淆字符串和数值比较:使用=比较字符串,-eq比较数值

3.2、调试技巧

在脚本开头添加set -x开启调试模式,或使用echo打印测试表达式:

echo"测试表达式: [$a-eq$b]"["$a"-eq"$b"]&&echo"成立"||echo"不成立"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 3:06:11

【Shell】编程入门到精通保姆级教程:----流程控制

一、【Shell】编程入门&#xff1a;流程控制 &#x1f4dc; 1.1、Shell流程控制特点 和 Java、PHP 等语言不一样&#xff0c;sh 的流程控制不可为空&#xff0c;如(以下为 PHP 流程控制写法)&#xff1a; <?php if (isset($_GET["q"])) { search(q); } el…

作者头像 李华
网站建设 2026/9/4 3:03:25

I2C与SPI信号解码实战:用逻辑分析仪定位通信故障

在嵌入式开发、驱动调试、传感器接入和 PCB 验证过程中&#xff0c;I2C 与 SPI 是出现频率最高的两种板级通信协议。很多工程师都有过类似经历&#xff1a;代码逻辑看着没问题&#xff0c;上电后设备就是不工作&#xff1b;用示波器抓波形&#xff0c;满屏信号却不知道如何下手…

作者头像 李华
网站建设 2026/9/4 3:03:15

MobileViT在人脸表情识别中的轻量化落地实践

简介&#xff1a;本资源是一套面向深度学习初学者与计算机视觉实践者的完整人脸表情识别迁移学习方案&#xff0c;基于PyTorch框架实现MobileViT的xxs、xs、s三个轻量级版本&#xff0c;解决小样本场景下表情分类模型的快速构建与部署问题。压缩包共2000个文件&#xff0c;含19…

作者头像 李华
网站建设 2026/9/4 3:02:47

AI时代的内容风控:从规则到“以模治模”的系统架构设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 3:01:36

YOLOv8 GUI部署工具:一站式实现目标检测、分割、姿态估计与追踪

简介&#xff1a;这是一套面向计算机视觉初学者与工程部署人员的YOLOv8多任务一体化实践资源&#xff0c;聚焦目标检测、实例分割、姿态估计与目标追踪四大核心任务&#xff0c;提供从模型调用、推理可视化到GUI交互部署的完整闭环方案。资源共132个文件&#xff0c;涵盖55个Py…

作者头像 李华
网站建设 2026/9/4 3:01:30

PHP问答系统源码解析:从部署到二次开发全流程指南

简介&#xff1a;这是一套面向Web开发学习者与中小型项目开发者的一站式PHP问答平台实战源码&#xff0c;适用于社区问答、在线教育、技术支持等场景的技术落地与二次开发。资源基于PHP构建&#xff0c;完整实现MVC架构、用户认证、搜索过滤、安全防护及SEO优化等核心功能&…

作者头像 李华