shell脚本中的 test 和 [ ] 测试命令

在编写shell脚本中,经常会做一些测试,比如: 文件是否存在、2个整数或字符串是否相等,这时候就会使用test命令或者是[ ],test命令是可以被[]替代,总结一下其用法:

在使用[ ]语法时,注意以下:

在[ ]中 最好以空格分割
在[ ]中 最好以双引号括起来、
在[ ]中 最好都以单或双引号括起来

文件判断相关

关于某个文件名的“文件类型”判断,如test -e filename 表示存在否

-e该文件名是否存在(常用)
-f该文件名存在且为文件(file)
-d该文件名存在且为一个目录
-b该文件名存在且为一个block device设备
-c该文件名且为一个character device设备
-S该文件名存在且为一个socket文件
-p该文件名存在且为一个FIFO(pipe)文件
-L该文件名存在且为一个链接文件
-e该文件名是否存在(常用)
文件权限相关

关于文件的权限检测,如test -r filename 表示可读否(但root 权限常有例外)

-r检测该文件名是否存在且具有 “可读” 权限
-w检测该文件名是否存在且具有 “可写” 权限
-x检测该文件名是否存在且具有 “可执行” 权限
-u检测该文件名是否存在且具有 “SUID” 属性
-g检测该文件名是否存在且具有 “SGID” 属性
-k检测该文件名是否存在且具有 “Sticky bit” 属性
-s检测该文件名是否存在且具有为 “非空白文件”
文件之间的比较

如: test file1 -nt file2

-nt判断 file1 是否比file2新
-ot判断 file1 是否比file2旧
-ef判断 file1 与 file2是否为同一个文件,可以用在判断hard link的判定上.
整数之间的判定

关于2个整数之间的判定例如 test n1 -eq n2

-eq2个数值相等
-ne2个数值不相等
-gtn1 大于 n2
-ltn1 小于 n2
-gen1 大于等于n2
-len1 小于等于 n2
判定字符串的数据
test -z string判定字符串是否为0,如果stirng为空字符串,则为true
test -n string判断字符是否为0,若string为空字符串,则为false,-n 可以省略
test str1 = str2判定 str1是否等于str2 若相等,则回传true
test str1 != str2判定 str1 是否不等于 str2 若相等,则回传false
多重条件判定

例如:test -f filename -a -x filename

-a2个条件同时成立
-o任何一个条件成立
!

标签:shell, test, test命令, 测试文件

添加新评论