test命令用于在shell编程中各种状态表达式,可以测试文件、目录、plain文本、可读文件等属性。用法如下:
- -b 文件:若文件存在且为块设备,则为真
- -c 文件:若文件存在且为字符设备,则为真
- -d 文件:若文件存在且为目录,则为真
- -e 文件:若文件存在,则为真
- -f 文件:若文件存在且为普通文件,则为真
- -g 文件:若文件存在且为set-group-id,则为真
- -k 文件:若文件包含”sticky”位(粘着位)设置,则为真
- -L 文件:若文件存在且为符号链接,则为真
- -p 文件:若文件存在且为已命名管道,则为真
- -r 文件:若文件存在且可读,则为真
- -s 文件:若文件存在且文件大小大于0,则为真
- -S 文件:若文件存在且为套接字,则为真
- -t [fd]: 若在终端打开fd,则为真;若省略fd,则默认为1(标准输出)
- -u 文件:若文件存在且包含set-user-id位设置,则为真
- -w 文件:若文件存在且可写,则为真
- -x 文件:若文件存在且可执行,则为真
- -0 文件:若文件存在且拥有有效用户ID,则为真
- -G 文件:若文件存在且拥有有效组ID,则为真
- 文件1 -nt 文件2:若文件1(以修改日期为准)比文件2晚,则为真
- 文件1 -ot 文件2:若文件1比文件2早,则为真
- 文件1 -ef 文件2:若文件1和文件2具有相同设备、索引节点编号,则为真
- -z 字符串:若字符串长度为0,则为真
- -n 字符串:若字符串长度不为0,则为真
- 字符串1=字符串2:丙字符串相同则为真
- 字符串1!=字符串2:丙字符串不同则为真
- ! 表达式:表达式为假,则为真
- 表达式1 -a 表达式2:表达式1和表达式2均为真,则为真
- 表达式1 -o 表达式2:两个表达式之一为真,则为真
- 参数1 OP 参数2:OP表示以下之一:-eg、-ne、-lt、-le、-gt或-ge。以上数值的每个二元运算符在参数1等于、不等于、小于、小于等于、大于、大于等于参数2时为真。
示例:
#!/bin/sh
if [-f file]
then
echo "file exists"
else
echo "file not found"
fi
if [-d file]
then
echo "file is a directory"
else
echo "file is not a directory"
fi
if [-s file]
then
echo "file is not of zero length"
else
echo "file size is zero length"
fi
if [-r file -a -w file]
then
echo "file is readable and writable"
else
echo "file is not readable/writable"
fi