2014-09-05 141 views
0
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秒。我也想通过比较时间戳来检查文件是否被改变,但我不确定如何做到这一点..只是想提到,这是第一次尝试用这种语言进行编程。如何检查文件是否被创建/删除/更改(Bash)

我得到现在唯一的错误是:

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

@edit:固定notFinished有的间距

+1

在您的条件下,在每个'['和']'周围使用空格。 '如果[$ var -eq 2]'错误,它必须是'if [$ var -eq 2]'等等。 – fedorqui 2014-09-05 09:48:41

+0

@fedorqui ok修正了这个问题,但在第14行有了2个新错误,20 – Patidati 2014-09-05 09:57:03

+0

请更新您的问题,并附上当前代码以及第14行和第20行的指示(我不会计算它们:D) – fedorqui 2014-09-05 10:00:45

回答

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?有趣的问题和答案(链接到我更喜欢的答案),以便哟可以看出U布尔checkings应该这样做(这适用于if也给while):

if [ "$bool" = true ]; then 

另外,请注意我引用变量。这是一个很好的习惯,当变量没有设置时,可以避免你有时会因为奇怪的行为而变得疯狂。

+1

谢谢:)!这非常有帮助,谢谢你的语法提示;) – Patidati 2014-09-05 10:51:07