日期:2014-05-16  浏览次数:20731 次

linux test命令学习

test命令用于检查文件类型以及比较。

# type test
test is a shell builtin
# which test
/usr/bin/test
#

1. 使用test命令进行文件类型检查
(1). 测试文件是否存在,
sh-# cat /tmp/file
cat: /tmp/file: No such file or directory
sh-# test -e /tmp/file
sh-# echo $?
1
sh-#

sh-# touch /tmp/file
sh-#
sh-# test -e /tmp/file
sh-# echo $?
0
sh-#

(2). 测试档案是否为文件,
sh-# test -f /tmp/file
sh-# echo $?
0
sh-#

sh-# mkdir /tmp/directory
sh-# test -f /tmp/directory/
sh-# echo $?
1
sh-#

(3). 测试档案是否为目录,
sh-# test -d /tmp/directory/
sh-# echo $?
0
sh-#

sh-# test -f /tmp/file
sh-# echo $?
1
sh-#

(4). 测试档案是否为块设备文件或字符设备文件,
sh-# test -b /dev/sda1
sh-# echo $?
0
sh-#

sh-# test -c /dev/null
sh-# echo $?
0
sh-#

socket,fifo/pipe,link都有用同样的方法去检查。

2. 使用test命令进行文件权限检查
sh-# test -r /tmp/file
sh-# echo $?
0
sh-#
sh-# test -w /tmp/file
sh-# echo $?
0
sh-#
sh-# test -x /tmp/file
sh-# echo $?
1
sh-#

sh-# test -s /tmp/file
sh-# echo $?
1
sh-#
sh-# echo "oo" > /tmp/file
sh-#
sh-# test -s /tmp/file
sh-# echo $?
0
sh-#

sh-# test -u /tmp/file
sh-# echo $?
1
sh-#
sh-# test -g /tmp/file
sh-# echo $?
1
sh-#
sh-# test -k /tmp/file
sh-# echo $?
1
sh-#

3. 比较两个文件,
sh-# test /tmp/file -nt /bin/cp
sh-#
sh-# echo $?
0
sh-#
# test /tmp/file -ot /tmp/file2
# echo $?
0
#

下面这个是测试这两个文件是否是同一个文件,而不是文件内容是否相同,
# test /tmp/file -ef /tmp/file2
# echo $?
1
#

而这里所谓的是否为同一个文件的依据是,是否是使用同一个inode,
所以这个通常用来测试两个文件之间是否有hard link的关系。
# ln /tmp/file /tmp/file_hard_link
# test /tmp/file -ef /tmp/file_hard_link
# echo $?
0
#
# test /tmp/file -ef /tmp/file
# echo $?
0
#

3. 整数大小的比较,
# test 100 -eq 10
# echo $?
1
#
# test 100 -eq 100
# echo $?
0
#
# set var1
# set var2
# var1=100
# var2=10
# test $var1 -eq $var2
# echo $?
1
#
# test $var1 -ne $var2
# echo $?
0
#
# test $var1 -gt $var2
# echo $?
0
#
# test $var1 -lt $var2
# echo $?
1
#
# test $var1 -ge $var2
# echo $?
0
#
# test $var1 -le $var2
# echo $?
1
#

4. 字符串比较,
# set str1
# test -z $str
# echo $?
0
#
# str1="string"
# test -z $str1
# echo $?
1
#
# test -n $str1
# echo $?
0
#
set str2
str2="str2"
# test str1 = str2
# echo $?
1
#
# test str1 != str2
# echo $?
0
#

5. test命令用于多重条件判断,
# test $str1 != $str2 -a $var1 -eq $var2
# echo $?
1
#
# test $str1 != $str2 -o $var1 -eq $var2
# echo $?
0
#

从test命令的用法可以看到,test命令就是条件测试,它就类似于:
if (condition is true)
{
    return 0;
}
else
{
    return 1;
}

所以,我们也就可以通过命令执行的返回码来确认结果了。