首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell-script while的问题!

shell-script while的问题!
EN

Stack Overflow用户
提问于 2010-06-22 22:31:35
回答 4查看 213关注 0票数 2

首先,我是shell脚本的初学者。我做的这段代码不能工作。

我想重复一个代码30秒,但它不起作用。它一直在无限期地运行我的逻辑。

代码语言:javascript
复制
DIFF=0

while [ $DIFF < 30 ]; do

    START=$(date +%s)

######## My logic #########

    DIFF=$(( $END - $START ))
    echo $DIFF
    cd ..
    sleep 5s

done

我想是因为我没有正确地做while子句吧?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-22 22:37:30

当然,您肯定需要为$START$END提供一些值。他们不会让自己安顿下来!

您可能希望执行以下操作

代码语言:javascript
复制
START = `date +%s` 

将其设置为以秒为单位的时间。当然,需要在循环中设置END才能更新它。

编辑:cd ..可能不是你计划在循环中运行的东西。在几毫秒内,您的当前目录将成为根目录,几乎不会完成其他操作。做一个cd /会更便宜。

编辑2:这应该不是一个很难的问题。对于这个编辑,我构建并测试了一个单行解决方案:

代码语言:javascript
复制
START=$(date +%s); DIFF=0; while [ $DIFF -lt 30 ]; do echo $DIFF; DIFF=$(($(date +%s)-$START)); done

它将正确地更新其变量并显示它们...30秒后就结束了。

票数 2
EN

Stack Overflow用户

发布于 2010-06-22 22:59:13

代码语言:javascript
复制
((end = $(date +%s) + 30))
while (( $(date +%s) < end ))
do
    something
done

或者,使用Bash中的内置变量$SECONDS

代码语言:javascript
复制
((end = SECONDS + 30))
while (( SECONDS < end ))
do
    something
done
票数 2
EN

Stack Overflow用户

发布于 2010-06-22 22:43:22

看起来你在用bash。

也许可以试试这样的东西:

代码语言:javascript
复制
START=...
while (($DIFF<30)); do
   #   ....
   DIFF=$((END-START))
done

(请参见Bash arithmetic evaluationThe Double-Parentheses Construct。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3094141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档