首先,我是shell脚本的初学者。我做的这段代码不能工作。
我想重复一个代码30秒,但它不起作用。它一直在无限期地运行我的逻辑。
DIFF=0
while [ $DIFF < 30 ]; do
START=$(date +%s)
######## My logic #########
DIFF=$(( $END - $START ))
echo $DIFF
cd ..
sleep 5s
done我想是因为我没有正确地做while子句吧?
发布于 2010-06-22 22:37:30
当然,您肯定需要为$START和$END提供一些值。他们不会让自己安顿下来!
您可能希望执行以下操作
START = `date +%s` 将其设置为以秒为单位的时间。当然,需要在循环中设置END才能更新它。
编辑:cd ..可能不是你计划在循环中运行的东西。在几毫秒内,您的当前目录将成为根目录,几乎不会完成其他操作。做一个cd /会更便宜。
编辑2:这应该不是一个很难的问题。对于这个编辑,我构建并测试了一个单行解决方案:
START=$(date +%s); DIFF=0; while [ $DIFF -lt 30 ]; do echo $DIFF; DIFF=$(($(date +%s)-$START)); done它将正确地更新其变量并显示它们...30秒后就结束了。
发布于 2010-06-22 22:59:13
((end = $(date +%s) + 30))
while (( $(date +%s) < end ))
do
something
done或者,使用Bash中的内置变量$SECONDS:
((end = SECONDS + 30))
while (( SECONDS < end ))
do
something
done发布于 2010-06-22 22:43:22
看起来你在用bash。
也许可以试试这样的东西:
START=...
while (($DIFF<30)); do
# ....
DIFF=$((END-START))
done(请参见Bash arithmetic evaluation和The Double-Parentheses Construct。)
https://stackoverflow.com/questions/3094141
复制相似问题