当前位置: 首页 > news >正文

test命令与参数

在Linux中,test命令是“条件测试工具”,用于判断文件属性、字符串关系、数值大小等,返回值为‘0’(表示测试结果为“真”)或非‘0’(表示“假”),常与‘if’、‘while’等流程控制语句配合使用。

一、文件属性判断参数(最常用)

用于检查文件 / 目录的存在性、类型、权限、大小等,语法为 test [参数] 路径 或 [ 参数 路径 ][ 是 test 的别名,前后需加空格)。

参数功能描述
-e 路径检查路径是否存在(文件、目录、链接等均可)
-f 路径检查路径是否为普通文件(排除目录、设备文件、链接等)
-d 路径检查路径是否为目录
-r 路径检查当前用户对路径是否有读权限
-w 路径检查当前用户对路径是否有写权限
-x 路径检查当前用户对路径是否有执行权限(对目录是 “进入权限”)
-s 路径检查文件是否存在且非空(大小 > 0 字节)
-L 路径检查路径是否为符号链接(软链接,不跟随链接指向的原始文件)
-h 路径与 -L 等价,检查是否为符号链接
-b 路径检查路径是否为块设备文件(如硬盘、U 盘)
-c 路径检查路径是否为字符设备文件(如键盘、终端)
-p 路径检查路径是否为管道文件(用于进程间通信)
-S 路径检查路径是否为套接字文件(如网络通信的 socket 文件)
-nt 路径1 路径2检查路径 1 的修改时间是否比路径 2 更新(Newer Than)
-ot 路径1 路径2检查路径 1 的修改时间是否比路径 2 更旧(Older Than)
-ef 路径1 路径2检查路径 1 和路径 2 是否为同一文件(如硬链接、同一设备的相同 inode)

示例

# 检查 /etc/profile 是否为存在的普通文件且有读权限
if [ -f /etc/profile -a -r /etc/profile ]; thenecho "文件存在且可读取"
fi# 检查 link.txt 是否为符号链接
if [ -L link.txt ]; thenecho "link.txt 是软链接"
fi

二、数值比较参数

仅支持整数比较(不支持浮点数),语法为 test 数值1 [参数] 数值2 或 [ 数值1 参数 数值2 ]

参数功能描述说明(bash 中 [[ ]] 可替代为符号)
-eq数值 1 等于 数值 2等价于 ==(仅 [[ ]] 中可用)
-ne数值 1 不等于 数值 2等价于 !=(仅 [[ ]] 中可用)
-gt数值 1 大于 数值 2等价于 >(仅 [[ ]] 中可用)
-lt数值 1 小于 数值 2等价于 <(仅 [[ ]] 中可用)
-ge数值 1 大于等于 数值 2等价于 >=(仅 [[ ]] 中可用)
-le数值 1 小于等于 数值 2等价于 <=(仅 [[ ]] 中可用)

⚠️ 注意:不可直接用 =/> 等符号在 [ ] 中比较数值(会被当作字符串比较),需用上述参数。

示例

# 比较变量 count 是否大于 10
count=15
if [ $count -gt 10 ]; thenecho "count 超过 10"
fi# bash 扩展写法(用 [[ ]] 和 >)
if [[ $count > 10 ]]; thenecho "count 超过 10"
fi

三、字符串比较参数

用于判断字符串的空值、相等性、排序(按 ASCII 码),语法为 test "字符串1" [参数] "字符串2"(建议加引号,避免空格解析错误)。

参数功能描述
= 或 ==字符串 1 等于 字符串 2(= 是标准写法,== 优先在 [[ ]] 中使用)
!=字符串 1 不等于 字符串 2
-z 字符串检查字符串是否为空值(长度为 0)
-n 字符串检查字符串是否非空(长度 > 0,字符串必须加引号,避免空变量误判)
>字符串 1 按ASCII 码排序大于字符串 2(仅 [[ ]] 或 test 中可用)
<字符串 1 按ASCII 码排序小于字符串 2(仅 [[ ]] 或 test 中可用)

⚠️ 关键:[ -z $var ] 是危险写法(若 var 未定义,会解析为 [ -z ],结果为 “真”),必须写成 [ -z "$var" ]

示例

# 检查用户名是否为 "root"
user=$(whoami)
if [ "$user" = "root" ]; thenecho "当前是管理员用户"
fi# 检查输入是否为空
read input
if [ -z "$input" ]; thenecho "输入不能为空"
fi# 按 ASCII 码比较(A < a,数字 < 字母)
if [[ "Apple" < "banana" ]]; thenecho "Apple 的 ASCII 排序在 banana 之前"
fi

四、逻辑组合参数

用于组合多个条件(与 / 或 / 非),实现复杂判断,分为标准写法(兼容所有 shell)和bash 扩展写法(仅 [[ ]] 支持)。

逻辑关系标准写法(test/[ ]bash 扩展写法([[ ]]说明
逻辑与-a(参数) 或 \&&(转义)&&所有条件为真,结果才为真
逻辑或-o(参数) 或 ||(转义)``任意条件为真,结果为真
逻辑非! 条件! 条件反转条件结果(真→假,假→真)

示例

# 标准写法:逻辑与(-a)+ 逻辑非(!)
file="/tmp/log.txt"
if [ ! -f "$file" -a ! -d "$file" ]; thenecho "路径 $file 既不是文件也不是目录"
fi# bash 扩展写法:逻辑或(||)+ 短路逻辑
age=22
if [[ $age -ge 18 || $age -le 6 ]]; thenecho "年龄符合特殊条件"  # 满足一个条件即可,无需判断另一个
fi

五、核心语法与注意事项

  1. 两种等价语法

    • 标准:test 条件 → 例:test -f file.txt
    • 精简:[ 条件 ] → 例:[ -f file.txt ][ 后和 ] 前必须加空格)
    • 扩展:[[ 条件 ]](bash 专属,支持 &&/||/ 模式匹配,无需转义)
  2. 退出状态码

    • 执行 test 后,用 echo $? 查看结果:0 表示 “真”,1 表示 “假”。
    • 示例:[ -e /etc/passwd ]; echo $? → 输出 0(文件存在)。
  3. 常见误区

    • 变量不加引号:[ $name = "Alice" ] 若 name 含空格(如 Bob Smith),会拆分为多个参数,导致语法错误,需写成 [ "$name" = "Alice" ]
    • 浮点数比较:test 不支持,需用 bc 工具(如 echo "3.14 > 2.71" | bc,输出 1 为真)。
    • 符号链接判断:-f/-d 会跟随链接,若需判断链接本身,需用 -L

通过上述参数,test 可覆盖 Linux 中绝大多数条件判断场景,是编写 shell 脚本(如自动化部署、日志分析)的核心工具,掌握其参数用法是实现脚本逻辑的基础。


文章转载自:

http://zywvUcFz.wdgsp.cn
http://ga9SRvno.wdgsp.cn
http://CQzd92Bm.wdgsp.cn
http://LthapbND.wdgsp.cn
http://GDtTk5Fo.wdgsp.cn
http://WpttIrZk.wdgsp.cn
http://U8SkfBKQ.wdgsp.cn
http://HnRXbn3Z.wdgsp.cn
http://xqQw6Z5V.wdgsp.cn
http://dWtJGMRq.wdgsp.cn
http://DAfVWgAr.wdgsp.cn
http://k1TQer5k.wdgsp.cn
http://zoLpkMC7.wdgsp.cn
http://JZv2CW6V.wdgsp.cn
http://VtI4eE6Y.wdgsp.cn
http://bR3DwsFd.wdgsp.cn
http://xPylLN5E.wdgsp.cn
http://p1ViEKYm.wdgsp.cn
http://OgpA6o4O.wdgsp.cn
http://uQ9Y4jTm.wdgsp.cn
http://Peb4yDXB.wdgsp.cn
http://m84ORtpo.wdgsp.cn
http://NZIL7HZq.wdgsp.cn
http://Ou3BVW3g.wdgsp.cn
http://2GCJ1wPe.wdgsp.cn
http://9Rg6eMu1.wdgsp.cn
http://m15QA3Ac.wdgsp.cn
http://fhwnGZFp.wdgsp.cn
http://cEra5AJF.wdgsp.cn
http://XYp31IKM.wdgsp.cn
http://www.dtcms.com/a/366044.html

相关文章:

  • Python基础(⑧APScheduler任务调度框架)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • git之分支
  • 如何创建交换空间
  • 【音视频】视频秒播优化实践
  • 无穿戴动捕如何深度结合AI数据分析,实现精准动作评估?
  • 代码随想录刷题Day48
  • Linux 字符设备驱动框架学习记录(三)
  • 数学建模-非线性规划(NLP)
  • STM32HAL 快速入门(十七):UART 硬件结构 —— 从寄存器到数据收发流程
  • DOM常见的操作有哪些?
  • Day34 UDP套接字编程 可靠文件传输与实时双向聊天系统
  • 信号调制与解调 matlab仿真
  • 异常处理机制与debug
  • 复写零(双指针)
  • 单片机day2
  • 配置时钟分频与倍频
  • 解构复杂财务逆向业务:如何优雅地生成与管理负数单?
  • Python基础(⑥属性装饰器)
  • 你只需输入一句话,MoneyPrinterTurbo直接给你输出一个视频
  • 普通人如何用 AI 提效?5 个低门槛工具 + 3 类场景案例,让 AI 成为日常助手
  • phpstorm 操作git 另外的操作在 我的收藏
  • c#编写的应用程序调用不在同一文件夹下的DLL
  • Java继承
  • c++ zint二维码、条形码开发库
  • c++多线程(1)------创建和管理线程td::thread
  • Python数据分析与处理(二):将数据写回.mat文件的不同方法【超详细】
  • AI+法律:用ERNIE-Bot解析合同条款,识别风险点
  • 进程管理和IPC
  • 常用假设检验方法及 Python 实现