test operators
常用测试操作符
-z | zero | 检查字符串是否为空(字符串长度为 0) |
---|
-e | exist | 检查普通文件是否存在 |
-f | file | 检查是否为普通文件(不是目录或设备文件) |
-d | directory | 检查是否为目录 |
-n | non-empty | 检查字符串是否非空 |
测试选项 | 含义 |
---|
-z | 检查字符串是否为空 |
-n | 检查字符串是否非空 |
-e | 检查文件是否存在 |
-f | 检查是否为普通文件 |
-d | 检查是否为目录 |
-r | 检查文件是否可读 |
-w | 检查文件是否可写 |
-x | 检查文件是否可执行 |
-L | 检查是否为符号链接 |
-s | 检查文件是否非空 |
-O | 检查文件是否属于当前用户 |
-G | 检查文件是否属于当前用户组 |
-b | 检查是否为块设备文件 |
-c | 检查是否为字符设备文件 |
-p | 检查是否为命名管道 |
-S | 检查是否为套接字 |
-eq | 检查两个整数是否相等 |
-ne | 检查两个整数是否不相等 |
-gt | 检查第一个整数是否大于第二个 |
-lt | 检查第一个整数是否小于第二个 |
-ge | 检查第一个整数是否大于等于第二个 |
-le | 检查第一个整数是否小于等于第二个 |
1. 字符串相关测试
if [ -z "$var" ]; then
echo "字符串为空"
fi
if [ -n "$var" ]; then
echo "字符串非空"
fi
string1 = string2
:检查两个字符串是否相等。
if [ "$var1" = "$var2" ]; then
echo "两个字符串相等"
fi
string1 != string2
:检查两个字符串是否不相等。
if [ "$var1" != "$var2" ]; then
echo "两个字符串不相等"
fi
2. 文件相关测试
-e
:检查文件是否存在(任何类型的文件,包括目录、符号链接等)。
if [ -e "/path/to/file" ]; then
echo "文件存在"
fi
-f
:检查是否为普通文件(不是目录、设备文件等)。
if [ -f "/path/to/file" ]; then
echo "这是一个普通文件"
fi
if [ -d "/path/to/directory" ]; then
echo "这是一个目录"
fi
if [ -r "/path/to/file" ]; then
echo "文件可读"
fi
if [ -w "/path/to/file" ]; then
echo "文件可写"
fi
if [ -x "/path/to/file" ]; then
echo "文件可执行"
fi
if [ -L "/path/to/link" ]; then
echo "这是一个符号链接"
fi
-s
:检查文件是否非空(文件大小大于 0 字节)。
if [ -s "/path/to/file" ]; then
echo "文件非空"
fi
if [ -O "/path/to/file" ]; then
echo "文件属于当前用户"
fi
if [ -G "/path/to/file" ]; then
echo "文件属于当前用户组"
fi
3. 数字比较
int1 -eq int2
:检查两个整数是否相等。
if [ "$var1" -eq "$var2" ]; then
echo "两个整数相等"
fi
int1 -ne int2
:检查两个整数是否不相等。
if [ "$var1" -ne "$var2" ]; then
echo "两个整数不相等"
fi
int1 -gt int2
:检查第一个整数是否大于第二个。
if [ "$var1" -gt "$var2" ]; then
echo "第一个整数大于第二个"
fi
int1 -lt int2
:检查第一个整数是否小于第二个。
if [ "$var1" -lt "$var2" ]; then
echo "第一个整数小于第二个"
fi
int1 -ge int2
:检查第一个整数是否大于或等于第二个。
if [ "$var1" -ge "$var2" ]; then
echo "第一个整数大于或等于第二个"
fi
int1 -le int2
:检查第一个整数是否小于或等于第二个。
if [ "$var1" -le "$var2" ]; then
echo "第一个整数小于或等于第二个"
fi
4. 逻辑操作符
-a
:与(and)逻辑操作符。用于测试多个条件是否都为真。
if [ -e "/path/to/file" -a -r "/path/to/file" ]; then
echo "文件存在且可读"
fi
-o
:或(or)逻辑操作符。用于测试任意一个条件是否为真。
if [ -e "/path/to/file" -o -d "/path/to/directory" ]; then
echo "文件存在或目录存在"
fi
!
:非(not)逻辑操作符。用于测试条件是否为假。
if [ ! -e "/path/to/file" ]; then
echo "文件不存在"
fi
5. 特殊文件测试
-b
:检查文件是否是块设备文件(block device)。
if [ -b "/dev/sda1" ]; then
echo "这是一个块设备文件"
fi
-c
:检查文件是否是字符设备文件(character device)。
if [ -c "/dev/ttyS0" ]; then
echo "这是一个字符设备文件"
fi
-p
:检查文件是否是命名管道(FIFO)(pipeline)。
if [ -p "/path/to/fifo" ]; then
echo "这是一个命名管道"
fi
if [ -S "/path/to/socket" ]; then
echo "这是一个套接字文件"
fi