如何检查文件是否被创建/删除/更改(Bash)

时间:2014-09-05 09:47:26

标签: bash if-statement while-loop unix-timestamp

declare -i fil="$1"
declare -t tid="$2"
notFinished=true
finnes=false

if [ -f $fil ];
then
finnes = true
fi

while $notFinished;
do

if [ -f $fil && ! $finnes ];          (14)
then
echo "Filen: $fil ble opprettet."
finished=true
fi

if [ ! -f $fil && $finnes ];         (20)
then
echo "Filen: $fil ble slettet."
finished=true
fi

sleep $tid
done

我正在尝试检查名称为$ fil的文件是否在脚本生命周期内创建或删除,只检查每个$ tid秒。我还想通过比较时间戳来检查文件是否被更改,但我不确定如何做到这一点..只是想提一下,这是第一次尝试用这种语言编程。

我现在唯一的错误是:

  /home/user/bin/filkontroll.sh: line 14: [: missing `] '
  /home/user/bin/filkontroll.sh: line 20: [: missing `] '

@edit:修复了notFinished和一些间距

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

#!/bin/bash

declare -i fil="$1"
declare -t tid="$2"
notFinished=true
finnes=false

if [ -f "$fil" ]; then
   finnes=true
fi

while [ "$notFinished" = true ];
do
    if [ -f "$fil" ] && [ ! "$finnes" = true ]; then
       echo "Filen: $fil ble opprettet."
       finished=true
    fi

    if [ ! -f "$fil" ] && [ "$finnes" = true ]; then
       echo "Filen: $fil ble slettet."
       finished=true
    fi

    sleep $tid
done

请注意,您应该阅读How to declare and use boolean variables in shell script?有趣的问题和答案(链接到我更喜欢的答案),这样您就可以看到布尔检查应该这样做(这适用于if但也适用于whileif [ "$bool" = true ]; then ):

{{1}}

另外,请注意我引用了变量。这是一个很好的做法,可以避免在未设置变量时有时会出现奇怪的行为。

答案 1 :(得分:0)

me@box:/tmp $ if [ a ] ; then echo foo; fi
foo
me@box:/tmp $ if [ b ] ; then echo foo; fi
foo
me@box:/tmp $ if [ a && b ] ; then echo foo; fi
bash: [: missing `]'
me@box:/tmp $ if [ a ] && [ b ] ; then echo foo; fi
foo
me@box:/tmp $ if [[ a && b ]] ; then echo foo; fi
foo