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'从而打破循环并退出脚本谢谢您的帮助!我应该说得更具体些,那是我的错。我已经更新了问题。可能会通过“$@”
,这样我们就不会丢失参数