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. mysql与redis的区别与联系

    1.mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢. redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提 ...

  2. poj1611(并查集简单应用)

    题目链接:http://poj.org/problem?id=1611 思路: 显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等 ...

  3. 自对齐(self-aligned)

    C语言是自对齐的,32位以4字节对齐,64位以8字节对齐(1字节=8 bits) 自对齐的好处:在一条指令内完成数据的取或者存的操作,使得内存访问更快:否则,如果一个变量跨机器字存储,那么要做两次或更 ...

  4. 43. Multiply Strings (String)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  5. python之面向对象之继承

    #写一个类SchoolMember class SchoolMember(object): member_num = 0 def __init__(self,name,age,sex): self.n ...

  6. mysqlbateis generator 当遇到tinyint 生成转化bool 解决方法

    当遇到tyint 生成转化bool  类型问题很恶心,记录一下解决方法 一. TinyInt转换规则 JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况. ...

  7. session以及分布式服务器session共享

    一.session的本质 http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录 ...

  8. 利用委托机制处理.NET中的异常

    WinForm代码 private void button1_Click(object sender, EventArgs e) { try { Convert.ToInt32("abcd& ...

  9. 为什么二代测序的原始数据中会出现Read重复现象?

    为什么二代测序的原始数据中会出现Read重复现象? 要搞清楚这个read重复(duplicate)的问题,我想我们需要从NGS数据的产出过程说起,具体来说如下: 基因组DNA提取: DNA随机打断,最 ...

  10. 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新

    目的:vue-cli构建的vue单页面应用,某些特定的页面,实现前进刷新,后退不刷新,类似app般的用户体验.注: 此处的刷新特指当进入此页面时,触发ajax请求,向服务器获取数据.不刷新特指当进入此 ...