Linux命令之测试条件表达式test

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令之测试条件表达式test相关的知识,希望对你有一定的参考价值。

概述

test 命令是 shell 环境中测试条件表达式的实用工具。

注:但实际上在 shell 编程中并未使用 test 命令,而通常使用 [ ] 简写形式进行替代。

语法

该命令的语法如下:

test 条件表达式

test 命令会根据条件表达式的结果返回真(0)或者返回假(1)。该命令常用于判断四类情况:

  • 表达式判断
  • 字符串比较
  • 数字比较
  • 文件比较

使用

表达式判断

表达式判断的基本语法如下:

# 表达式为真
if test 表达式

# 表达式为假
if test ! 表达式

# 两个表达式都为真才为真,使用 -a 选项连接(and)
test 表达式1 -a 表达式2    

# 两个表达式有一个为真就为真,使用 -o 选项连接(or)
test 表达式1 -o 表达式2

# 条件求反
test 表达式1 ! 表达式2       

示例如下:

判断字符串

字符串判断的基本语法如下:

# 字符串的长度是否不等于零
test -n 字符串

# 字符串的长度是否等于零
test -z 字符串

# 字符串是否相等
test 字符串1 = 字符串2

# 字符串是否不相等(注意空格)
test 字符串1 != 字符串2

示例如下:

判断整数

可以对两个整数的大小进行判断,基本语法如下:

# 判断两个整数是否相等
test 整数1 -eq 整数2 

# 判断整数1是否大于等于整数2
test 整数1 -ge 整数2

# 判断整数1是否大于整数2    
test 整数1 -gt 整数2

# 判断整数1是否小于等于整数2
test 整数1 -le 整数2

# 判断整数1是否小于整数2
test 整数1 -lt 整数2

# 判断整数1是否不等于整数2
test 整数1 -ne 整数2

示例如下:

判断文件

还有些对于文件判断的选项:

# 两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
test File1 –ef File2

# 判断文件1是否比文件2新    
test File1 –nt File2

# 判断文件1比是否文件2旧
test File1 –ot File2

# 文件是否块设备文件
test –b File  

# 文件并且是字符设备文件 
test –c File

# 文件并且是目录   
test –d File

# 文件是否存在 (常用)
test –e File

#文件是否为正规文件 (常用)   
test –f File

# 文件是否是设置了组id
test –g File

# 文件属于的有效组ID   
test –G File

# 文件是否是一个符号链接(同-L)
test –h File

# 文件是否设置了Sticky bit位
test –k File

# 文件存在并且是块设备文件
test –b File

# 文件是否是一个符号链接(同-h)   
test –L File

# 文件的属于有效用户ID
test –o File

# 文件是一个命名管道
test –p File

# 文件是否可读
test –r File

# 文件是否是非空白文件
test –s File

# 文件描述符是在一个终端打开的
test –t FD

# 文件存在并且设置了它的set-user-id位
test –u File

# 文件是否存在并可写
test –w File

# 文件属否存在并可执行
test –x File

示例如下:

Shell 中使用 test

在 shell 脚本中并不是直接使用 test 命令的,而是使用中括号 [ ] 。语法如下:

test 条件表达式
# 等价于,注意条件表达式左右两侧都必须要有空格
[ 条件表达式 ]

例如:

# 注意空格
test a == b
# 等价于
[ a == b ]

完整的 shell 脚本示例如下:

#! /bin/bash

read -p "请输入第一个数:" a
read -p "请输入第二个数:" b

echo "使用 test 语法比较:"
if test $a -gt $b; then
    echo "a>b"
elif test $a -lt $b; then
    echo "a<b"
else
    echo "a=b"
fi

echo "使用 [ ] 语法比较:"
if [ $a -gt $b ]; then
    echo "a>b"
elif [ $a -lt $b ]; then
    echo "a<b"
else
    echo "a=b"
fi

注:空格是必须的,不能省略,否则将会报错。

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于Linux命令之测试条件表达式test的主要内容,如果未能解决你的问题,请参考以下文章

一文彻底弄懂Linux-Shell编程

一文彻底弄懂Linux-Shell编程

linux 命令 —— test 测试条件表达式

Linux Shell编程之测试条件

shell脚本之条件语句 与 if 语句

Shell脚本之条件语句