每30秒检查一次文件是否存在

时间:2014-04-24 21:13:44

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

为什么这不起作用?我需要每隔30秒检查一次文件是否存在。

STATUS=0
FILENAME="helloworld.file"
while [ $STATUS -eq "0" ] do
if [ -f $FILENAME ];
    then STATUS=1;
else
    sleep 30s;
fi

done

2 个答案:

答案 0 :(得分:1)

我不知道,让我们问shellcheck

In file line 3:
while [ $STATUS -eq "0" ] do
                          ^-- SC1010: Use semicolon or linefeed before 'do' (or quote to make it literal).

好的,那就让我们这样做:

STATUS=0
FILENAME="helloworld.file"
while [ $STATUS -eq "0" ]
do
if [ -f $FILENAME ];
    then STATUS=1;
else
    sleep 30s;
fi

done

答案 1 :(得分:1)

您忘记了; ==>

while [ "$STATUS" -eq "0" ]; do
if [ -f "$FILENAME" ]; then 
    STATUS=1
else
    sleep 30
fi

或者:

while [ "$STATUS" -eq "0" ] 
do
    if [ -f "$FILENAME" ]
    then 
        STATUS=1
    else
        sleep 30
    fi
done

此外,请不要忘记使用双引号保护变量或使用语法[[

Here is a reminder about the necessity (or not) to protect your variables with double quotes

您还可以简化代码:

while true; do
    [[ -f $FILENAME ]] && break
    sleep 30
done