shell脚本的问题虽然!

时间:2010-06-22 14:31:35

标签: linux shell

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

我想重复一段代码30秒,但它不起作用。它只是无限期地继续做我的逻辑。

DIFF=0

while [ $DIFF < 30 ]; do

    START=$(date +%s)

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

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

done

我认为这是因为我没有正确地执行while子句?

4 个答案:

答案 0 :(得分:2)

嗯,您肯定需要为$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秒后结束。

答案 1 :(得分:2)

((end = $(date +%s) + 30))
while (( $(date +%s) < end ))
do
    something
done

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

((end = SECONDS + 30))
while (( SECONDS < end ))
do
    something
done

答案 2 :(得分:1)

看起来你正在使用bash。

尝试这样的事情:

START=...
while (($DIFF<30)); do
   #   ....
   DIFF=$((END-START))
done

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

答案 3 :(得分:1)

使用无限循环。示例伪代码

DIFF=0
while true
do
  START=$(date +%s)
  END=.... #define your end
  DIFF=$((END-START))
  if [ "$DIFF" -gt 30 ] ;then
    break
  fi
  .....
done