当前位置:首页>Linux>Linux结构化命令(二)——test命令

Linux结构化命令(二)——test命令

  • 2026-10-08 18:26:13
Linux结构化命令(二)——test命令
在if-then条件语句中,仅能通过if后的条件命令是否成功执行,即通过判断退出状态码来确定then后面的命令是否要执行,但是如果在shell脚本中需要用到退出状态码之外的条件,例如两个变量值比较大小或者相等的条件,这时需要借助test命令测试不同条件,若所列条件成立,则test命令就会退出并返回退出状态码0,进而执行then后面的语句。
01
test命令用法
基础语法格式如下:
test condition
其中condition是test命令测试的一系列参数和值,test命令结合if-then语句使用时,语法如下:
if test conditionthen     commandsfi
上述语句中,test会测试其后的条件,如果条件成立,则test命令退出并返回退出状态码0,紧接着执行then部分的语句。
注:在bash shell中有另外一种方法用于条件测试,不采用test命令而采用方括号定义,如下所示:
if [ condition ]then    commandsfi
其中,方括号中指定测试条件,且第一个方括号后和第二个方括号前必须留有空格。
02
test命令测试条件分类
(1)数值比较
测试两个数值时常见的条件参数如下:
  • n1 -eq n1    检查n1是否等于n2
  • n1 -ge n1    检查n1是否大于等于n2
  • n1 -gt n1    检查n1是否大于n2
  • n1 -eq n1    检查n1是否等于n2
  • n1 -le n1    检查n1是否小于等于n2
  • n1 -lt n1    检查n1是否小于n2
  • n1 -ne n1    检查n1是否不等于n2
(2)字符串比较
条件测试还可以用于比较字符串值,如下是常见的字符串比较功能:
  • str1=str2   检查是否相同
  • str1!=str2  检查是否不同
  • str1
  • str1>str2   检查str1是否大于str2
  • -n str1     检查str1的长度是否不为0
  • -z str1     检查str1的长度是否为0
重点:上述字符串比较重,大于号和小于号必须转义,否则shell会将其视为重定向符。
注:大于和小于判断逻辑与sort命令逻辑不同:test比较时使用的是每个字符的unicode编码值;sort命令按字母顺序排序,使用的是系统的语言环境设置中定义的排序顺序,对于英语,语言环境设置指定了在排序顺序中小写字母出现在大写字母之前。
test命令和测试表达式使用标准的数学比较符号来表示字符串比较,而用文本代码来表示数值比较。
如果判断字符串长度是否为0时,一个字符串变量未定义,则它的长度可视为0。
注意:空变量和未初始化的变量会对shell脚本测试造成灾难性的影响,在将其用于数值或字符串比较之前先通过-n或-z来测试一下变量是否为空。
(3)文件比较
shell编程中使用较多的测试Linux文件系统中文件和目录的状态,如下所示:
用于比较文件和目录的状态:
  • -d file       检查file文件是否存在且为目录
  • -e file       检查file对象是否存在(可测试文件或目录)
  • -f file       检查file文件是否存在且为文件
  • -r file       检查file文件是否存在且为可读
  • -s file       检查file文件是否存在且非空
  • -w file       检查file文件是否存在且可写
  • -x file       检查file文件是否存在且可执行
  • -O file       检查file文件是否存在且属当前用户所有
  • -G file       检查file文件是否存在且默认组与当前用户相同
  • file1 -nt file2 检查file1是否比file2新
  • file1 -ot file2 检查file1是否比file2旧
以上测试条件可用于在shell脚本中检查文件系统中的文件。

最新文章

随机文章