离开while循环以在linux环境中的BASH脚本中执行下一个命令

时间:2017-09-14 15:19:36

标签: bash shell if-statement do-while

我希望你们都做得很好!我试图每隔一段时间轮询一次目录,直到数据完成进入目录,当它完成时我想在linux环境中使用bash脚本在目录上执行我的下一个任务。我无法访问inotify-tools。我测试此过程的方法是在一个shell命令行中键入以下内容:

while true; do touch /home/tmp/fun_temp/nothing.txt; sleep 10; rm -rf /home/tmp/fun_temp/nothing.txt; done

这会在名为nothing.txt的临时目录中创建一个文件,然后睡眠10秒然后将其删除,然后再次执行,直到我告诉它停止。我的bash脚本以20秒的间隔监视目录,然后在20秒将目录信息写入名为old_stat.txt的文件中。然后又过了20秒,它将new_stat与旧的stat进行比较,如果它们相等,它应该退出循环并执行命令的下一部分,如果它们不等于继续轮询。这是我的bash脚本:

#!/bin/bash
DIR_TO_CHECK='/home/tmp/fun_temp/'
OLD_STAT_FILE='/home/sleep_files/old_stat.txt'

if [ -e $OLD_STAT_FILE ]; then
    OLD_STAT=`cat $OLD_STAT_FILE`
else
    OLD_STAT="nothing"
fi

NEW_STAT=`stat -t $DIR_TO_CHECK`

while true; do
    if [ "$OLD_STAT" != "$NEW_STAT" ]; then
        echo 'Directory is still updating.'
        sleep 20
        echo $NEW_STAT > $OLD_STAT_FILE
        echo 'Checking again.'
    elif [ "$OLD_STAT" == "$NEW_STAT" ]; then
        echo 'Directory is done updating. Move on.'
        exit 0
    fi
done

我目前正在使用exit 0作为检查。我通过在命令行中运行上面的while循环测试bash脚本,然后在另一个shell中运行这个bash脚本,然后我给它一分钟以确保目录已更改,然后我在命令中终止while循环line并让bash脚本运行另一分钟,但它永远不会更改为第二个条件并离开循环,除非我杀死脚本并再次运行它。任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这种脚本变体:

#!/bin/bash
DIR_TO_CHECK='/home/tmp/fun_temp/'
OLD_STAT="initial"

while true; do
    NEW_STAT=`stat -t $DIR_TO_CHECK`
    if [ "$OLD_STAT" != "$NEW_STAT" ]; then
        echo 'Directory is still updating.'
        sleep 20
        OLD_STAT=$NEW_STAT
        echo 'Checking again.'
    elif [ "$OLD_STAT" == "$NEW_STAT" ]; then
        echo 'Directory is done updating. Move on.'
        exit 0
    fi
done