1)判断表达式
test 表达式1 –a 表达式2 两个表达式都为真
test 表达式1 –o 表达式2 两个表达式有一个为真
2)判断字符串
test File1 –ef File2 两个文件具有同样的设备号和i结点号
test File1 –nt File2 文件1比文件2 新
test File1 –ot File2 文件1比文件2 旧
test –g File 文件存在并且是设置了组ID
test –G File 文件存在并且属于有效组ID
test –h File 文件存在并且是一个符号链接(同-L)
test –k File 文件存在并且设置了sticky位
test –b File 文件存在并且是块设备文件
test –L File 文件存在并且是一个符号链接(同-h)
test –o File 文件存在并且属于有效用户ID
test –p File 文件存在并且是一个命名管道
test –r File 文件存在并且可读
test –s File 文件存在并且是一个套接字
test –t FD 文件描述符是在一个终端打开的
test –u File 文件存在并且设置了它的set-user-id位
test –w File 文件存在并且可写
test 表达式1 –a 表达式2 两个表达式都为真
test 表达式1 –o 表达式2 两个表达式有一个为真
2)判断字符串
–n s1 | 字符串s1的长度非零,表达式为真 |
–z s1 | 如果字符串s1的长度为零,表达式为真 |
s1= s2 | 如果s1和s2相等,表达式为真 |
s1 != s2 | 如果s1不等于s2,则表达式为真 |
3)判断整数
n1 -eq n2 | 当n1等于n2时候,表达式值为真 |
n1 -ne n2 | 当n1≠n2时候,表达式为真 |
n1 -gt n2 | 当n1 > n2时候,表达式为真 |
n1 -lt n2 | 当n1 < n2时候,表达式值为真 |
n1 -ge n2 | 当n1 ≥ n2时候,表达式值为真 |
n1 -le n2 | 当n1 ≤ n2时候,表达式为真 |
4)判断文件
-b file | 当file存在,且为块设备文件的时候,表达式为真。 |
-c file | 当file存在,且为字符设备文件时候,表达式为真 |
-r/w/x file | 当file存在,且为可读/可写/可执行文件时候,表达式为真 |
-s file | 当file存在,且文件长度大于零,表达式为真 |
-d file | 当file存在,且为目录文件时候,表达式为真 |
-f file | 当file存在,且为普通文件时候,表达式为真 |
-e file | 当file存在,表达式为真 |
test File1 –ef File2 两个文件具有同样的设备号和i结点号
test File1 –nt File2 文件1比文件2 新
test File1 –ot File2 文件1比文件2 旧
test –g File 文件存在并且是设置了组ID
test –G File 文件存在并且属于有效组ID
test –h File 文件存在并且是一个符号链接(同-L)
test –k File 文件存在并且设置了sticky位
test –b File 文件存在并且是块设备文件
test –L File 文件存在并且是一个符号链接(同-h)
test –o File 文件存在并且属于有效用户ID
test –p File 文件存在并且是一个命名管道
test –r File 文件存在并且可读
test –s File 文件存在并且是一个套接字
test –t FD 文件描述符是在一个终端打开的
test –u File 文件存在并且设置了它的set-user-id位
test –w File 文件存在并且可写
test –x File 文件存在并且可执行
以下是一个简单的test命令测试例子,用于高速用户该文件属于什么类型文件
#!/bin/bash
# shell测试命令: test 表达式
# 可以使用 [ 表达式 ]代替test命令,但是要注意在"["之后和"]"之前保留空格。
# 测试文件属性:
# -b file 如果为块文件,则表达式为真
# -c file 如果为字符设备,则表达式为真
# -r/w/x file 如果文件存在且为 可读/可写/执行 文件时候,表达式为真
# -s file 如果文件存在且为普通文件,并且长度大于零
# -d file 如果为目录,则表达式值为真
# -f file 如果文件为普通文件,则表达式为真
# -e file 如果文件存在,表达式为真
echo please input the filename:
read filename
if [ -e $filename ]; then
echo $filename exist
if [ -b $filename ]; then
echo This is block file
elif [ -c $filename ]; then
echo This is character file
elif [ -f $filename ]; then
echo This is a normal file
elif [ -d $filename ]; then
echo This is a dirctory file
fi
else
echo $filename not exist
fi