在bash中,条件表达式(Conditionalexpressions)用于一些判断。比如判断文件是否存在,字符串是否相等,比较值的大小等等。查看manbash的CONDITIONALEXPRESSIONS部分,对条件表达式的解释如下:以下一元或二元初选。当与[[一起使用时,<和>运算符使用当前语言环境按字典顺序排序。测试命令使用ASCII排序进行排序。即[[复合命令、test内置命令、[内置命令使用条件表达式来判断文件属性、进行字符串比较、进行算术比较。在CONDITIONALEXPRESSIONS部分,列出了很多条件表达式,常用的条件表达式介绍如下。判断文件属性的条件表达式判断文件属性的条件表达式如下表所示。条件表达式含义-afile如果file文件存在则返回true,否则返回false-dfile如果file文件存在且是目录则返回true,否则返回false-efile与-afile含义相同,如果文件存在file如果存在,返回true-ffile如果文件file存在,并且是文本文件,返回true,否则返回false-sfile如果文件file存在,并且文件大小大于0,返回true,否则返回false-Nfile如果文件file存在,并且读取后被修改,返回true,否则返回falseotfile2如果file1的修改时间早于file2,或者file2存在但file1不存在,返回true如果给定的文件名本身有空格,必须用引号括起来,否则会出现意想不到的结果。注意:在bash中,true对应的值为0,false对应的值为1。这些条件表达式的例子如下:$test-atestfile;echo$?0$测试-d测试文件;echo$?1$测试-e测试文件;echo$?0$测试-f测试文件;echo$?0$测试-s测试文件;echo$?0$测试-N测试文件;echo$?0$test测试文件-ntretestfile;echo$?0$test测试文件-otretestfile;回声$?1这里使用test命令进行测试,该命令会返回条件表达式的返回值,然后使用echo$?打印上一条命令的返回值,可以看到返回结果。可以看到,test-atestfile命令返回0,即true,testfile文件存在。test-dtestfile命令返回false,testfile文件不是目录。test-etestfile命令同样判断文件是否存在,返回true。test-ftestfile命令返回true,testfile文件为文本文件。test-stestfile命令返回true,testfile文件大小大于0,即不为空。可以使用-s文件条件表达式判断文件内容是否为空。test-Ntestfile命令返回true,表示自上次读取testfile后,该文件又被修改过。您可以使用-N文件条件表达式来确定文件是否已更改。比如要实现一个版本管理系统,如果要查看仓库中的文件是否有变化,可以这样简单的判断。testtestfile-ntretestfile命令返回true,testfile文件的修改时间比retestfile文件更新。可以通过file1-ntfile2判断不同目录下的文件是否有更新。比如在实际工作中,项目代码是由多人共同维护和开发的。我们可能只修改其中的几个文件并在本地备份。那么我们就可以通过这个条件表达式来判断项目代码文件是否比本地备份文件新。如果是,请备份。如果在项目代码中加入了新的文件,也可以判断为本地没有备份该文件。testtestfile-otretestfile命令返回false,testfile比retestfile更早被修改。可以通过file1-otfile2来判断不同目录下的文件是否有更新。具体使用场景类似于file1-ntfile2。判断字符串的条件表达式判断字符串的条件表达式如下表所示。条件表达式含义-zstring如果字符串的长度为0,则返回true,否则返回false-nstring如果字符串的长度不为0,则返回true,否则返回falsestring的含义与-nstring,如果string长度不为0,返回truestring1=string2如果给定的两个字符串相等,返回true,否则返回falsestring1==string2如果给定的两个字符串相等,返回true,否则返回falsestring1!=string2如果给定两个字符串不相等,返回真,否则返回假string1
