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

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 [-zn] string 判断string 是空还是非空

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

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

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

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

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

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

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


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

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

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

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

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

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

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

下面是一个脚本的例子:

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

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




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

上一篇:第4天 设置文件Setting Bundle


下一篇:linux下设置固定IP的方法