Linux 测试命令:Bash 中的比较

2023-10-12

The testLinux 中的命令是一个命令行实用程序,用于检查和评估条件。

它经常被用在bash 脚本测试文件属性,比较字符串和数字,并支持 AND、OR 和 NOT 运算的复杂逻辑评估。

 

 

语法和返回值

的语法test命令如下:


test expression
  

or


[ expression ]
  

返回值:

  • 0: 表述正确。
  • 1: 这个表述是错误的。
  • 2:测试命令发生错误,例如语法错误。

可以使用以下命令检查返回值$?多变的。


test 5 -eq 5
echo $?  

Output:


0  

此示例检查整数 5 是否等于 5。表达式为 true,因此返回值为 0。

这是一个选项列表test命令:

Option Description
-e Check if file exists
-d Check if file is a directory
-f Check if file is a regular file
-h or -L Check if file is a symbolic link
-r Check if file is readable
-w Check if file is writable
-x Check if file is executable
-s Check if file is empty
-nt

-ot

Compare file timestamps (newer than, older than)
-z Check if string is null
-n Check if string is not null
= Check if strings are equal
!= Check if strings are not equal
< Lexicographical comparison (less than)
 > Lexicographical comparison (greater than)
-eq Equal
-ne Not Equal
-gt Greater Than
-lt Less Than
-ge Greater Than or Equal
-le 5 Less Than or Equal
-a Logical AND
-o Logical OR
! Logical NOT

 

文件测试

文件测试是该工具的主要用途之一test命令。您可以使用特定运算符评估文件的各种属性和条件。

检查文件是否存在


test -e /path/to/file
echo $?  

Output:


0  

如果指定路径存在该文件,则返回值为 0。如果该文件不存在,则返回值为 1。

检查文件是否是目录

您可以使用-d检查路径是否指向目录的选项:


test -d /path/to/directory
echo $?
  

Output:


0
  

返回值 0 表示路径指向目录,返回值 1 表示否则。

检查文件是否为常规文件

Using -f选项与test命令,可以检查该文件是否是普通文件。


test -f /path/to/file
echo $?
  

Output:


0
  

返回值 0 表示该路径是常规文件,返回值 1 表示不是。

检查文件是否是符号链接

符号链接是其他文件的快捷方式或引用。

使用-h or -L选项与test命令,可以验证指定路径是否是符号链接。
命令:


test -L /path/to/symbolic_link
echo $?
  

Output:


0
  

返回值 0 确认它是符号链接,而返回值 1 表示它不是。

检查文件是否可读

使用-r选项与test命令,您可以检查当前用户是否可以读取特定文件。
命令:


test -r /path/to/file
echo $?
  

Output:


0
  

返回值0表示文件可读,返回值1表示不可读。

检查文件是否可写

当您需要对其进行更改时,了解文件是否可写至关重要。

The -w选项与test命令允许您确定当前用户是否具有特定文件的写权限。
命令:


test -w /path/to/file
echo $?
  

Output:


0
  

返回值 0 表示文件可写,返回值 1 表示文件不可写。

检查文件是否可执行

通过使用-x选项与test命令,您可以检查当前用户是否可以执行特定文件。


test -x /path/to/executable_file
echo $?
  

Output:


0
  

返回值 0 表示该文件可执行,而返回值 1 表示该文件不可执行。

检查文件是否为空

通过使用-s选项与test命令,可以判断指定文件是否为空。


test -s /path/to/file
echo $?
  

Output:


0
  

返回值 0 表示文件有一些内容,而返回值 1 表示文件为空。

比较文件时间戳

比较文件时间戳对于许多操作都很有用,例如备份或同步。

Using -nt and -ottest命令,您可以比较两个文件的时间戳。

-nt(较新)


test file1 -nt file2
echo $?
  

Output:


0
  

该命令检查是否file1file2。返回值 0 表示file1确实较新,而返回值 1 表示它不是较新。

-ot(早于)


test file1 -ot file2
echo $?
  

Output:


0
  

该命令检查是否file1file2。返回值 0 表示file1较旧,而返回值 1 表示较旧。

 

字符串测试

The test命令提供了用于比较或评估基于文本的值的各种选项。

检查字符串是否为空

通过使用-z选项,您可以检查特定字符串是否为空。


test -z ""
echo $?
  

Output:


0
  

返回值 0 表示字符串为空,返回值 1 表示字符串不为空。

检查字符串是否不为空

The -n选项与test命令允许您验证特定字符串是否不为空。


test -n "Hello"
echo $?
  

Output:


0
  

返回值 0 表示字符串不为 null,返回值 1 表示字符串为 null。

字符串比较

使用= and !=选项与test命令,您可以比较两个字符串是否相等或不相等。

=(等于)

Command:


test "string1" = "string1"
echo $?
  

Output:


0
  

返回值 0 表示字符串相等,返回值 1 表示字符串不相等。

!=(不等于)

Command:


test "string1" != "string2"
echo $?
  

Output:


0
  

这检查两个字符串是否不相等。返回值 0 表示字符串确实不相等,而返回值 1 表示字符串相等。

词典比较

词典比较用于根据字符串的字典顺序来比较字符串。

随着test命令,您可以使用以下命令进行这些比较< and >运营商。


test "apple" \< "banana"
echo $?
  

Output:


0
  

这会检查字符串“apple”按字典顺序是否位于“banana”之前。返回值 0 表示执行,返回值 1 表示不执行。

>(大于)


test "banana" \> "apple"
echo $?
  

Output:


0
  

这会检查字符串“banana”是否按字典顺序出现在“apple”之后。返回值 0 表示执行,返回值 1 表示不执行。

 

整数比较

The test命令提供了用于整数比较的各种选项。

Equal


test 5 -eq 5
echo $?
  

Output:


0
  

这检查两个整数是否相等。返回值 0 表示数字相等,返回值 1 表示数字不同。

不等于


test 5 -ne 10
echo $?
  

Output:


0
  

这检查两个整数是否不相等。返回值 0 表示数字确实不相等,而返回值 1 表示数字相等。

比...更棒


test 10 -gt 5
echo $?
  

Output:


0
  

这检查第一个整数是否大于第二个整数。返回值 0 表示第一个数字更大,而返回值 1 表示不是。

少于


test 5 -lt 10
echo $?
  

Output:


0
  

这检查第一个整数是否小于第二个整数。返回值 0 表示第一个数字较小,而返回值 1 则表示不是。

大于或等于


test 10 -ge 10
echo $?
  

Output:


0
  

这检查第一个整数是否大于或等于第二个整数。返回值 0 表示第一个数字大于或等于,而返回值 1 表示不是。

小于或等于

The -le选项允许您检查一个整数是否小于或等于另一个整数。


test 5 -le 5
echo $?
  

Output:


0
  

返回值 0 表示第一个数字确实小于或等于,而返回值 1 则表示不是。

 

复合测试

复合测试结合了多种测试条件,允许更复杂的逻辑。 AND、OR 和 NOT 等逻辑运算符可以与test用于此目的的命令。

逻辑与


test 5 -lt 10 -a 5 -gt 2
echo $?
  

Output:


0
  

这会检查 5 是否小于 10 并且大于 2。两个条件都必须为真。

返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。

逻辑或


test 5 -lt 3 -o 5 -gt 2
echo $?
  

Output:


0
  

这会检查 5 是否小于 3 或大于 2。至少有一个条件必须为真。

返回值 0 表示至少满足一个条件,而返回值 1 表示两个条件都不满足。

逻辑非


test ! 5 -lt 3
echo $?
  

Output:


0
  

它检查 5 是否不小于 3。返回值 0 表示满足 NOT 条件(5 不小于 3),而返回值 1 表示不满足。

 

带括号的分组测试

您可以使用括号对测试进行分组。它有助于控制复杂表达式中的求值顺序。


test \( 5 -lt 10 \) -a \( 5 -gt 2 \)
echo $?
  

Output:


0
  

这将检查 5 是否小于 10 且大于 2,条件使用括号进行分组。

括号确保首先评估各个比较,然后应用逻辑 AND。

返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。

 

使用 [ ] 作为替代

方括号[ ]可以与以下互换使用test命令。以下是如何使用以下方法重写(大于)[ ]:


[ $num1 -gt $num2 ]
echo $?  

您可以在 Bash 脚本中使用它,如下所示:


#!/bin/bash
num1=$1
num2=$2
if [ $num1 -gt $num2 ]; then
  echo "Number1 is greater than Number2."
else
  echo "Number1 is not greater than Number2."
fi
  

该脚本通过检查第一个数字是否大于第二个数字来完成与上一个示例相同的任务。

 

使用 [[ 表达式 ]] 进行扩展测试

The [[命令是一个扩展的测试命令,提供更多的功能,并且通常比test命令。

它对于模式匹配和更复杂的表达式特别有帮助。


[[ 5 -lt 10 && "apple" < "banana" ]]
echo $?
  

Output:


0
  

这会检查 5 是否小于 10 并且“apple”按字典顺序位于“banana”之前。

双方括号[[提供更灵活的方式来组合测试。

返回值 0 表示两个条件都满足,而返回值 1 表示至少一个条件不满足。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 测试命令:Bash 中的比较 的相关文章

  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime

随机推荐

  • 编写和测试 Python 函数:面试练习(概述)

    无论您是想在编码面试中取得好成绩 还是只是想提高您的开发技能 解决编码挑战可以帮助您成长为一名程序员 在这个真实的 Python 代码对话中 Philipp 向 Martin 提出挑战 要求他编写一个函数 将字符串中的每个字符加倍 通过他们
  • 引导 Django 项目

    有关本课程所涵盖概念的更多信息 您可以查看 如何设置 Django 项目 真正的Python文章 使用 Django 和 Python 构建个人日记 真正的Python文章 以下是本课程中使用的命令行片段 mkdir portfolio p
  • Python 石头剪刀布:命令行游戏(概述)

    游戏编程是学习如何编程的好方法 您可以使用许多在现实世界中看到的工具 此外您还可以玩游戏来测试您的结果 开始 Python 游戏编程之旅的理想游戏是剪刀石头布 在本课程中 您将学习如何 自己编写代码剪刀石头布游戏 接受用户输入input 使
  • 2021 年 4 月 21 日

    主持人大卫 阿莫斯回答会员的问题 在这次会议上 我们讨论了 Real Python 的新功能 在哪里可以找到要阅读的代码以提高您的 Python 技能 为什么 0xfor x in 1 2 3 回报 15 数据科学 Django 和 Fla
  • Python 中的 K 均值聚类:实用指南

    目录 What Is Clustering 聚类技术概述 分区聚类 层次聚类 基于密度的聚类 How to Perform K Means Clustering in Python 了解 K 均值算法 使用 Python 编写您的第一个 K
  • 在 Python 中使用 lru_cache 进行缓存

    有很多方法可以实现快速响应的应用程序 缓存是一种方法 如果使用得当 可以使事情变得更快 同时减少计算资源的负载 蟒蛇的功能工具模块附带 lru cache 装饰器 这使您能够使用以下命令缓存函数的结果最近最少使用 LRU 策略 这是一种简单
  • 拼写错误、缺失或误用 Python 关键字

    以下是有关 Python 关键字的更多信息的资源 Python 关键字 简介 真正的 Python 文章 Python 3 8 关键字 Python 文档
  • Python 标准 REPL:快速尝试代码和想法

    目录 Getting to Know the Python Standard REPL 什么是 Python 的交互式 Shell 或 REPL 为什么使用 Python REPL Starting and Ending REPL Inte
  • 使用 Fabric 和 Ansible 自动化 Django 部署

    目录 设置和配置 Fabric Setup 设置 SSH 密钥 强化用户密码 安装 Ansible 依赖项 将 SELinux 设置为宽容模式 升级服务器 完整性检查 Ansible Primer 剧本 示例手册 Playbook Setu
  • 第 27 集:准备面试 Python 练习题

    第 27 集 准备面试 Python 练习题 真正的 Python 播客 2020 年 9 月 18 日47m RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸件 投
  • Python 基础知识:函数和循环(摘要)

    在本视频课程中 您了解了两个最基本的概念 在编程中 函数和循环 首先 您学习了如何定义自己的自定义函数 你看到了 该函数由两部分组成 这函数签名 这开始于def关键字并包括函数名称和函数参数 这函数体 其中包含每当调用该函数时运行的代码 函
  • Python 的 urllib.request 用于 HTTP 请求

    目录 使用 urllib request 的基本 HTTP GET 请求 The Nuts and Bolts of HTTP Messages 了解什么是 HTTP 消息 了解 urllib request 如何表示 HTTP 消息 关闭
  • Django Ninja 的隐蔽 REST API(摘要)

    在本课程中 您已经了解了 Django Ninja REST API 库的所有内容 使用 Ninja 您可以 使用装饰器快速包装 Django 视图创建 REST API 端点 使用类型注释定义变量和参数 写Schema和ModelSche
  • Python 中的 Dijkstra 算法(查找最短路径)

    Dijkstra算法的工作原理是通过迭代找到节点的最短距离值 直到达到实际的最短距离 Dijkstra 算法的一个关键方面是它使用优先队列从尚未处理的节点集中选择具有最小暂定距离的顶点 当前节点被标记为已访问 并检查其所有邻居节点是否有更优
  • 使用 Pandas read_excel 读取 Excel 文件

    Pandas read excel是一个函数蟒蛇熊猫库允许我们在 Python 中读取 Excel 文件并将其转换为数据框 object read excel函数可以导入具有不同扩展名的Excel文件 例如 xls xlsx xlsm和 o
  • Pandas where() 方法:带条件过滤

    The where中的方法Pandas允许您根据条件过滤 DataFrame 或 Series 类似于 SQL 的 WHERE 子句 您是否曾经发现自己需要根据特定条件替换 DataFrame 中的某些值 或者可能想要屏蔽不符合某些条件的数
  • Linux find 命令:综合指南

    The findLinux 中的命令是一个功能强大的实用程序 用于根据您指定的条件搜索和定位文件和目录 它可以按名称 大小 类型 权限 日期和许多其他标准快速定位文件 目录 hide 1 基本语法 2 Finding Files by Na
  • 了解 Linux Sed 命令中的保持缓冲区

    保持缓冲区在sed允许您临时存储和检索输入行 将其视为辅助存储器 您可以在使用主模式空间时放置数据 当您需要一次执行涉及多行的操作时 保持缓冲区特别有用 保留缓冲区不是立即处理和打印每一行 而是让您保存一行 处理其他行 然后在需要时返回保存
  • Python zip 函数教程(简单示例)

    The zip function 是一个内置的 Python 函数 它接受两个或多个序列或集合 如列表或字符串 并创建一个并行聚合每个集合中的元素的迭代器 这种组合这些值的过程称为 压缩 它源于将两个单独的项目集合压缩在一起的想法 目录 h
  • Linux 测试命令:Bash 中的比较

    The testLinux 中的命令是一个命令行实用程序 用于检查和评估条件 它经常被用在bash 脚本测试文件属性 比较字符串和数字 并支持 AND OR 和 NOT 运算的复杂逻辑评估 目录 hide 1 语法和返回值 2 File T