写点什么

Shell test [] 命令:条件判断的艺术

作者:左诗右码
  • 2024-06-17
    上海
  • 本文字数:1220 字

    阅读完需:约 4 分钟

在编程世界里,shell 脚本是一种强大而又灵活的方式,用于处理文件、执行命令以及进行自动化操作。


今天,我们将深入探讨 Shell 脚本中的 test 命令,这是一种用来检测不同条件(如数值比较、字符串比较和文件存在性检测)是否成立的命令。

简介

test 命令用以判断一系列表达式是否成立,根据条件的成立与否,它会返回相应的退出状态码。一般来说,如果条件成立,退出状态码为 0;如果条件不成立,退出状态为非 0 值。


语法总览:


# 标准语法,判断 expression 成立时,退出状态为 0,否则为非 0 值test expression
# 简写形式,推荐使用,因为更加直观[ expression ]
复制代码

数值比较

首先,我们来看看如何使用 test 进行数值比较。

示例:判断两个数是否相等

#!/bin/bash# 读入两个数read a b
# 使用 test 命令判断是否相等if test $a -eq $b; then echo "相等"else echo "不相等"fi
复制代码

注意事项

  1. 使用 ==>< 这些符号时,它们只能用于字符串比较,不能用于数字。对于数值,应使用 -eq-gt-lt 这样的操作符。

  2. 尽管 Shell 支持 -gt-lt 之类的数值比较操作符,但不支持 >=<=

  3. 建议在使用变量时,尤其是在字符串比较中,将变量用双引号包围以防止空值或带有空格的值带来问题。

  4. 对于整型数值的比较,更推荐使用 (()) 来进行。

文件检测

test 命令还可以用于文件的检测,包括文件类型、权限和比较等。

文件类型判断

文件权限判断

文件比较

示例:检测文件是否存在并可写

#!/bin/bash
# 读入文件名和内容read filenameread content
# 检测文件是否可写且内容非空if test -w "$filename" && test -n "$content"; then echo "$content" > "$filename" echo "内容写入文件成功"else echo "内容写入失败"fi
复制代码

与数值比较相关的 test 选项

test 只能用来比较整数,小数相关的比较还是得用 bc 命令


与字符串判断相关的 test 选项

字符串判断

接下来,让我们学习如何利用 test 命令进行字符串相关的判断。

示例:检测两个字符串是否相等

#!/bin/bash
# 读入两个字符串read str1read str2
# 检测字符串是否为空# 防止 $str1 和 $str2 是空字符串时出现错误,因此需要用双引号括if [ -z "$str1" ] || [ -z "$str2" ]; then echo "字符串不能为空" exit 1elif [ "$str1" != "$str2" ]; then echo "两个字符串不相等" exit 2else echo "字符串相等"fi
复制代码

逻辑运算

最后,test 命令还支持逻辑运算,这包括 逻辑与逻辑或逻辑非


示例:利用逻辑或进行字符串空判断

#!/bin/bash
# 读入两个字符串read str1read str2
# 使用逻辑或检测字符串是否为空# 使用 -o 选项取代上面的 ||if [ -z "$str1" -o -z "$str2" ]; then echo "字符串不能为空" exit 1elif [ "$str1" != "$str2" ]; then echo "两个字符串不相等" exit 2else echo "字符串相等"fi
复制代码


通过上述介绍和示例,相信你已经对 test 命令有了更深入的了解。test 命令的灵活性使得它成为 Shell 脚本中不可或缺的工具,希望你能在实践中灵活运用它。

发布于: 刚刚阅读数: 3
用户头像

左诗右码

关注

全网同名,欢迎关注交流。 2018-11-22 加入

三观比五官更正,思想比套路更深。常用技术栈PHP、Go、Python,享受编程,平时爱好写点文章。V公主号:「左诗右码」,欢迎关注交流。

评论

发布
暂无评论
Shell test [] 命令:条件判断的艺术_Shell_左诗右码_InfoQ写作社区