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比较会检查文件的默认组,如果它匹配了用户的默认组,那就通过了。

test命令详解的更多相关文章

  1. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  2. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  3. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  4. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  5. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  6. android adb 命令详解

    ADB (Android Debug Bridge)  是android SDK中的工具,需要先配置环境变量才能使用.起调试桥的作用,可以管理安卓设备.(也叫debug工具) ---------查看设 ...

  7. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  8. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

  9. Ruby Gem命令详解

    转自:http://www.jianshu.com/p/728184da1699 Gem介绍: Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.o ...

  10. DOS命令详解

    DOS命令详解 命令 \? 可以进入命令帮助 1.md命令创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKD ...

随机推荐

  1. 一个团队和他们的调查表-----("调查表与调查结果分析"心得体会)

    注:这篇blog主要是描述六小灵童团队在从接到调查表任务到分析调查数据最后完成本次任务的过程,以及过程中的点滴和心德体会.---蔡何 1.制表历程 随着课程的推进,我们逐步进入了软件项目中比较重要的需 ...

  2. 反射, getClass(), 和something.class以及类型类(转)

    原文地址:http://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统 ...

  3. Jiu Yuan Wants to Eat(树链剖分+线段树延迟标记)

    Jiu Yuan Wants to Eat https://nanti.jisuanke.com/t/31714 You ye Jiu yuan is the daughter of the Grea ...

  4. 在c#中设置Excel格式

    生成excel的时候有时候需要设置单元格的一些属性,可以参考一下: range.NumberFormatLocal = "@"; //设置单元格格式为文本 ange.get_Ran ...

  5. kwic--Java统计单词个数并按照顺序输出

    2016-07-02(随笔写作时间) 写了好久的程序了为了避免以后用到.......... 是一个统计单词个数,并按照个数从大到小输出的.输入文件名OK 了 单词是按照首字母排序的,,,里面用到映射等 ...

  6. vc通过webbrowser操作ie元素

    1>需要引用 webbrowser2.h,mshtml.h //m_web绑定的webbrowser的变量 CComQIPtr<IHTMLDocument2,&IID_IHTMLD ...

  7. canvas标签的基本用法

    1.canvas和其他标签一样使用,但是IE8以下是不支持的,可以在canvas里面加一个span用来提示,例如: <canvas> <span>IE8不支持canvas< ...

  8. part1:15-安装Linux系统到开发板

    1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...

  9. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

    前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...

  10. 2018.10.02 bzoj4009: [HNOI2015]接水果(整体二分)

    传送门 整体二分好题. 考虑水果被盘子接住的条件. 不妨设水果表示的路径为(x1,y1)(x_1,y_1)(x1​,y1​),盘子表示的为(x2,y2)(x_2,y_2)(x2​,y2​) 不妨设df ...