test命令详解

test命令格式:

test condition

通常,在if-then-else语句中,用[]代替,即[ condition ]。注意:方括号两边都要用空格。

 

1、数值比较
===========================================================
比 较 描 述
-----------------------------------------------------------
n1 -eq n2 检查n1是否与n2相等 (equal)
n1 -ge n2 检查n1是否大于或等于n2 (greater and equal)
n1 -gt n2 检查n1是否大于n2 (greater than)
n1 -le n2 检查n1是否小于或等于n2 (less and equal)
n1 -lt n2 检查n1是否小于n2 (less than)
n1 -ne n2 检查n1是否不等于n2 (not equal)
===========================================================

例子:

#!/bin/bash 

val1=10 
val2=11

if [ $val1 -gt 5 ] 
then 
echo "The test value $val1 is greater than 5" 
fi

if [ $val1 -eq $val2 ] 
then 
echo "The vaules are equal" 
else 
echo "The values are different" 
fi

 

2、字符串比较
===========================================================
比 较 描 述
-----------------------------------------------------------
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
===========================================================

需要注意的是:

- 字符串比较大于小于号必须转义,即加反斜线。
- 字符串比较的顺序是按ASCII表的顺序的,大写字母比小写字母的值小。

文件比较
=======

这是shell编程中最强大的也是最常用到的比较。test命令允许你测试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旧
==================================================================

 

3、检查目录

-d测试会检查指定的文件名是否在系统上以目录形式存在。当写文件到某个目录之前,或者是将文件放置到某个目录位置之前时,这会非常有用。

#!/bin/bash 
if [ -d $HOME ] 
then 
echo "Your HOME directory exists" 
cd $HOME 
ls -a 
else 
echo "There is a problem with your HOME directory" 
fi

上面代码使用了-d测试条件来检查用户的$HOME目录是否存在。如果它存在的话,它将继续使用cd命令来切到$HOME目录并进行显示目录下的文件。

 

4、检查对象是否存在

-e比较允许你在脚本中使用对象前检查文件或目录对象是否存在:

#!/bin/bash 
# checking if a directory exists 
if [ -e $HOME ] 
then 
echo "OK on the directory, now to check the file" 
# checking if a file exists 
if [ -e $HOME/testing ] 
then 
# the file exists, append date to it 
echo "Appending date to existing file" 
date >> $HOME/testing 
else 
# the file does not exist, create a new file 
echo "Creating new file" 
echo > $HOME/testing 
fi 
else 
echo "Sorry, you do not have a HOME directory" 
fi

 

5、检查文件

-e比较适用于文件和目录。但要确定指定的对象是个文件,你必须用-f比较:

#!/bin/bash 
# check if a file 
if [ -e $HOME ] 
then 
echo "The object exists, is it a file?" 
if [ -f $HOME ] 
then 
echo "Yes, it is a file!" 
else 
echo "No, it is not a file!" 
if [ -f $HOME/.bash_history ] 
then 
echo "But this is a file!" 
fi 
fi 
else 
echo "Sorry, the object does not exist" 
fi

6、检查是否可读

在尝试从文件中读取数据之前,最好先测试一下是否能读文件。可以用-r测试。

7、检查空文件

用-s来检查文件是否为空,尤其是在你要删除文件时。当-s比较成功时要特别小心,它说明文件中有数据。

8、检查是否可写

-w比较用来判断你是否对文件有可写权限。

9、检查是否可执行

-x比较是一个简便的断判断你对某个特定文件是否有执行权限的方法。虽然可能大多数命令用不到它,但如果你要在shell中运行大量脚本,它可能很方便。

10、检查所属关系

-O比较允许你轻松地测试你是否是文件的属主。

11、检查默认属组关系

-G比较会检查文件的默认组,如果它匹配了用户的默认组,那就通过了。

转载于:https://www.cnblogs.com/craftor/p/3811648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`test` 命令也可以用方括号 `[ ]` 的形式来执行,这两种形式是等价的。`test` 命令用于测试文件、字符串和数值等各种条件,返回一个布尔值(0 表示 true,1 表示 false)。下面是 `test` 命令的一些常用选项和用法: 1. 检查文件 - `-e file`:如果文件存在,则返回 true - `-f file`:如果文件存在且是一个普通文件,则返回 true - `-d file`:如果文件存在且是一个目录,则返回 true - `-r file`:如果文件存在且可读,则返回 true - `-w file`:如果文件存在且可写,则返回 true - `-x file`:如果文件存在且可执行,则返回 true - `-s file`:如果文件存在且非空,则返回 true - `file1 -nt file2`:如果文件 `file1` 比文件 `file2` 新,则返回 true - `file1 -ot file2`:如果文件 `file1` 比文件 `file2` 旧,则返回 true 2. 检查字符串 - `-z string`:如果字符串为空,则返回 true - `-n string`:如果字符串非空,则返回 true - `string1 = string2`:如果字符串 `string1` 等于字符串 `string2`,则返回 true - `string1 != string2`:如果字符串 `string1` 不等于字符串 `string2`,则返回 true 3. 检查数值 - `num1 -eq num2`:如果数值 `num1` 等于数值 `num2`,则返回 true - `num1 -ne num2`:如果数值 `num1` 不等于数值 `num2`,则返回 true - `num1 -lt num2`:如果数值 `num1` 小于数值 `num2`,则返回 true - `num1 -le num2`:如果数值 `num1` 小于或等于数值 `num2`,则返回 true - `num1 -gt num2`:如果数值 `num1` 大于数值 `num2`,则返回 true - `num1 -ge num2`:如果数值 `num1` 大于或等于数值 `num2`,则返回 true 以上只是 `test` 命令的一些常见用法,还有很多其他的选项和用法,可以通过 `man test` 命令查看完整的帮助文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值