2014-09-05 125 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