我如何告诉bash脚本从顶部重新开始?

时间:2014-12-01 00:10:44

标签: linux bash repeat

例如,在下面的脚本startover从顶部开始:

##########################################################################
## CHECK TIME
##########################################################################
time=$(date +%k%M)

if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
fi
##########################################################################
## CHECK TIME
##########################################################################
startover

另外请记住exit 0应该能够停止脚本。

5 个答案:

答案 0 :(得分:6)

将它放入while循环中。我还建议你添加一个" sleep"这样你就不会像现在这样快速地使你的机器CPU:

while true; do
    ##########################################################################
    ## CHECK TIME
    ##########################################################################
    time=$(date +%k%M)

    if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]]; then
        echo "Not a good time to transcode video!" && exit 0
    else
        echo "Excellent time to transcode video!" && echo "Lets get started!"
    fi
    ##########################################################################
    ## CHECK TIME
    ##########################################################################
    for i in {1..5}; do
        echo $i
        sleep 1
    done
done

答案 1 :(得分:5)

你可以"递归"使用以下行:

exec bash "$0" "$@"

由于$0是当前脚本的路径,因此该行启动脚本而不创建新进程,这意味着您不必担心机器上的进程表溢出过多的重启。

答案 2 :(得分:2)

在脚本开头不要使用WHOP,因为下面的条件将退出脚本并打破循环。

echo "Not a good time to transcode video!" && exit 0

您可以尝试捕获退出信号,以便在脚本退出时重新启动

##########################################################################
## CHECK TIME
############bash##############################################################
trap '<path to script> ' EXIT
time=$(date +%k%M)

if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
sleep 1;
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
sleep 1;
fi
##########################################################################
## CHECK TIME
##########################################################################
echo 1
echo 2
echo 3
echo 4
echo 5
startover

注意:我添加1秒的睡眠时间,因为这样可以让您有时间查看消息。捕获退出信号并重新运行脚本就像一个while循环。我也假设这些代码在脚本中。

答案 3 :(得分:1)

如何将整个脚本封装在while循环中?例如,

while :
do
    script
done

您可能想要添加条件以摆脱循环。

答案 4 :(得分:1)

这不是一个好习惯,而是你要求的。

将它放在脚本的末尾。 "$( cd "$( dirname "$0" )" && pwd )/$(basename $0)"