shell script学习(三)判断式的使用:test命令以及[ ]

  • Post author:
  • Post category:其他


shell script中的判断式,顾名思义就是判断一个式子是否满足一定的条件。在script中有如下几种实现方式:



1、使用test命令

先举个简单的例子,比如说判断在当前目录下一个文件script1.sh是否存在,那么根据test使用的语法,可写成如下: test -e script1.sh 如果存在的话那么返回的值是1,于是我们结合 && 以及 || 逻辑运算可构造:



test -e script1.sh && echo “exist” || echo “Not exist”

如果存在的话,那么会继续进行&&后面的操作,输出”exist”。如果不存在,直接执行 || 后面的操作,输出“Not exist”。

顺便提一句,在script中 && 和 || 的用法和程序设计语言中的用法是相同的。

下面具体来看看test命令对应其它参数时的功能:



一、test  [-efdbcSPL] filename  用来判断一个文件是否存在,以及文件的类型

-f 判断是否是一个文件。


-d 判断是否是一个dictionaty .


-b (blocl device设备)


-c (character device 设备)

-S (Socket文件)


-P(FIFo/pipe文件)


-L(link file)



二、test  [-rwx]   filename



判断一个文件的执行权限, -r 判断是否是可读的。-w 判断是否是writable。-x 判断是否是 executable



三、test   file1  { [-nt] [-ot] [-ef] }  file2

用来判断这两个文件的新旧,其中 -ef用来判断是否是同一文件,或者是否链结到同一个文件。 -nt 是(newer than) 的缩写,所以我们只需要记住缩写就可以了。



四、 test  n1 { [-eq][-ne][-gt][-lt][-ge][-le] } n2

用来判断两个整数 n1 和 n2 之间的关系  注意 在这种情况下 n1 和 n2 是被作为整数来对待的。当然加双引号也是可以的。

test str1=str2 判断两个string是否相等

test str1!=str2 判断是否不等于



五、test [-zn] string 判断string 是空还是非空

test -z  string


用来判断字符串是否为空



六、 -a 是当两个条件都成立时才返回true.





-o 是任一个条件成立时返回 true.





! 当其中一个不成立时返回。

下面是一个例子来说明 test 的使用:这个脚本可以用来根据用户输入的文件名判断文件是否存在,以及是属于常规文件还是文档,还可以输出文档的类型。




2、下面来看看通过 “[ ]”怎样来进行判定

[ ] 和test有同样的功能,可以使程序简化,如:

[ “str1” == “str2” ] 可以判断这两个字符串是否相等。

[ -e filename ] 可以判断filename这个文件是否存在。



在使用[ ] 进行判定的时候有一个事项要注意的是,在括号两边以及符号两边均要有空格。下面来看一个例子:这个脚本可以根据用户的输入是 y|Y 或是 n/N 来做判断。




3、下面再来看看shell script 的默认变量 $0, $1, $…

这里讲的是在执行shell脚本的时候可以带上一些参数,而这些参数的个数,位数可以通过shell脚本的默认变量识别出来。

例如: sh sh01.sh A B C D 那么这里的 A B C D 就是四个c参数。



$0 = sh01.sh 代表的是执行的脚本文件名



$# 代表的是后面参数的个数,这里是4



$@ 代表的是这里所有的参数情况。这里是 A B C D

下面是一个脚本的例子:


其中shift命令可以造成参数的偏移。



版权声明:本文为u011321908原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。