2014-11-03 112 views
0

我想检查一个文件(在本例中为/ var/log/messages)是否已经在循环中使用'stat'命令进行了更新。然而,代码永远不会退出循环,并因某种原因继续前进。检查一个文件是否已经更新

#!/bin/bash 
check='/var/log/messages' 

THEN="stat -c %z ${check}" 
NOW="stat -c %z ${check}" 

while [ $"NOW" == $"THEN" ] 
do 

    echo "$NOW" 
if [ $"NOW" != $"THEN" ]; then 
    echo "${check} has been updated." 

if 

done 

对此有何想法?有更简单的方法来查看/ var/log/messages是否已更改?

+0

看一看http://www.shellcheck.net/ – Cyrus 2014-11-03 19:26:01

+0

你还需要在'while'循环内更新'NOW'的值(至少)。对?祝你好运。 – shellter 2014-11-03 19:33:11

+0

另外,你应该在你的循环中使用'sleep'来延迟一段时间。 – 2014-11-03 23:30:57

回答

1

美元符号需要放在引号内。 $"..."是进行翻译的特殊引用机制,因此除非您使用的语言环境中的NOWTHEN转换为相同的字符串,否则该条件永远不会成立。

if [ "$NOW" == "$THEN" ]; then 
0

首先下面的版本至少执行stat命令加上面解释的所有更改。你将不得不考虑的一件事是在当时和现在几乎将始终是相同的,除非该消息是在不到它需要执行

#!/bin/bash 
check='/var/log/messages' 

THEN=`stat -c %z ${check}` 
NOW=`stat -c %z ${check}` 

if [ "$NOW" == "$THEN" ]; then 

    echo "$NOW" 
elif [ "$NOW" != "$THEN" ]; then 
    echo "$check has been updated." 
fi 
~ 

注意一个事实,即统计正在暂且更新执行。

相关问题