Linux下的Shell编程(欧拉篇三)test方括号命令的使用方法之比较两个文件的节点是否相同或者新旧
比较两个文件的节点或者新旧
一、相同节点文件判定表达式:[ FILE1 -ef FILE2 ]
- 表达式说明:FILE1 和 FILE2 具有相同的设备和索引节点号,表达式返回值 true
实例:判断链接文件是否指向同一个节点
#!/bin/bash
if [ "$1" -ef "$2" ]
then
echo "文件 $1 和 文件 $2 指向同一个节点。"
else
echo "文件 $1 与 文件 $2 没有指向同一个节点。"
fi
[root@localhost ~]$ls | grep vartest03.sh
vartest03.sh
[root@localhost ~]$ln vartest03.sh abc.sh
[root@localhost ~/test]$ls -l | grep -E "abc.sh|vartest03.sh"
-rwsr-sr-x. 2 root root 232 3月 8 23:59 abc.sh
-rwsr-sr-x. 2 root root 232 3月 8 23:59 vartest03.sh
[root@localhost ~/test]$./vartest21.sh abc.sh vartest03.sh
文件 abc.sh 和 文件 vartest03.sh 指向同一个节点。
[root@localhost ~/test]$
[root@localhost ~/test]$./vartest21.sh abc.sh vartest04.sh
文件 abc.sh 与 文件 vartest04.sh 没有指向同一个节点。
[root@localhost ~/test]$
二、最新文件判定表达式:[ FILE1 -nt FILE2 ]
- 表达式说明:FILE1 比 FILE2 更新(修改日期),表达式返回值true
实例:判定文件1比文件2新
[root@localhost ~]$cat vartest05.sh
if [ "$1" -nt "$2" ]
then
echo "文件 $1 比 文件 $2 新。"
elif [ "$2" -nt "$1" ]
then
echo "文件 $2 比 文件 $1 新。"
else
echo "文件 $1 与 文件 $2 无法进行比较。"
fi
[root@localhost ~]$ls -l | grep -E "vartest03.sh|vattest03-1.sh"
-rwxr-xr-x. 2 root root 232 3月 8 23:59 vartest03.sh
-rwxr-xr-x. 1 root root 232 3月 29 20:12 vattest03-1.sh
[root@localhost ~]$./vartest05.sh vartest03.sh vattest03-1.sh
文件 vattest03-1.sh 比 文件 vartest03.sh 新。
[root@localhost ~]$
三、旧文件判定表达式:[ FILE1 -ot FILE2 ]
- 表达式说明:FILE1 比 FILE2 旧(修改日期),表达式返回值 true
实例:判定文件1比文件2旧。
// 这个参数与 -nt 正好相反
[root@localhost ~]$cat vartest07.sh
if [ "$1" -ot "$2" ]
then
echo "文件 $1 比 文件 $2 旧。"
elif [ "$2" -ot "$1" ]
then
echo "文件 $2 比 文件 $1 旧。"
else
echo "文件 $1 与 文件 $2 无法进行比较。"
fi
[root@localhost ~]$ls -l | grep -E "vartest03.sh|vattest03-1.sh"
-rwxr-xr-x. 2 root root 232 3月 8 23:59 vartest03.sh
-rwxr-xr-x. 1 root root 232 3月 29 20:12 vattest03-1.sh
[root@localhost ~]$./vartest07.sh vartest03.sh vattest03-1.sh
文件 vartest03.sh 比 文件 vattest03-1.sh 旧。
[root@localhost ~]$