Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何让bash脚本从头开始?_Linux_Bash_Repeat - Fatal编程技术网

Linux 如何让bash脚本从头开始?

Linux 如何让bash脚本从头开始?,linux,bash,repeat,Linux,Bash,Repeat,例如,在下面的脚本中,startover从顶部开始: ########################################################################## ## CHECK TIME ########################################################################## time=$(date +%k%M) if [[ "$time" -ge 1800 ]] && [[

例如,在下面的脚本中,
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

还要记住退出0应该能够停止脚本。

将其放入while循环。我还建议您添加一个“睡眠”,这样您就不会以最快的速度运行计算机的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

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

while :
do
    script
done

您可能需要添加一个条件来打破循环。

这不是一个好的做法,而是您要求的

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

把这个放在脚本的末尾<代码>“$(cd“$(dirname“$0”)”&&pwd)/$(basename$0)”

请勿在脚本开始时使用WHILE循环,因为以下条件将退出脚本并中断循环

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
##########################################################################
##检查时间
############猛击##############################################################
陷阱“”退出
时间=$(日期+%k%M)
如果[[“$time”-ge 1800]]&&[“$time”-le 2200]];然后
echo“不是对视频进行转码的好时机!”&退出0
睡眠1;
其他的
echo“视频转码的最佳时机!”&&echo“让我们开始吧!”
睡眠1;
fi
##########################################################################
##检查时间
##########################################################################
回声1
回声2
回声3
回声4
回声5
startover
注意:我添加了1秒的睡眠时间,因为这将给您查看消息的时间。捕获退出信号并重新运行脚本就像一个while循环。我还假设这些代码在脚本中。

您可以使用以下行“递归”:

exec bash "$0" "$@"

由于
$0
是当前脚本的路径,因此这一行在不创建新进程的情况下启动脚本,这意味着您不必担心过多的重新启动会溢出计算机上的进程表。

/test.sh:第17行:/Users/username/Documents./test.sh:没有这样的文件或目录。忘记在$0上使用basename命令。现在应该可以工作了。如果不使用
exec
将旧实例替换为现有的新实例,那么这样做的过程链就会不断延长。而
dirname
/
basename
大惊小怪,而不仅仅是
exec“$BASH_SOURCE”“$@”
,给David Custer增加了什么价值呢?如果使用从脚本顶部开始的while do循环。如果脚本达到以下条件,脚本将退出:echo“不是转换视频的好时机!”&&退出0'从而打破循环并退出脚本谢谢您的帮助!我应该说得更具体些,那是我的错。我已经更新了问题。可能会通过
“$@”
,这样我们就不会丢失参数