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 的使用:这个脚本可以用来根据用户输入的文件名判断文件是否存在,以及是属于常规文件还是文档,还可以输出文档的类型。
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命令可以造成参数的偏移。