Linux bash 脚本 - for 循环单行睡眠超时和多个变量 - 语法问题

问题描述 投票:0回答:1

我想在我的 shell 脚本中创建等待语法,直到完成其他操作。

我想让它尽可能灵活,这样如果我再次需要它做其他事情,我只需要更改数字即可。

到目前为止我所得到的是:

    #! /bin/sh
    for i in $(seq 1 20); do sleep 0.2; [ $i = 19 ] && echo "19" || echo $i; done

我的目标结果应该是这样的:

    for i=0 iStart=1 iEnd=20 iGoal=19 iDuration=2 in $(seq $iStart $iEnd); do sleep $(echo "scale=3; $iDuration / $iEnd" | bc ); [ $i = $iGoal ] && echo "${iGoal} !!!" || echo $i; done

问题我有/描述:

  • 我不知道如何在for循环中定义多个变量:
  • $i = 计数器
  • $iStart = seq 的范围开始
  • $iEnd = seq 的范围结束
  • $iGoal = if 条件的目标数字
  • $iDuration = 达到超时(退出 1 或其他)之前的总时间(以秒为单位),其中我取每次传递的平均值:
  • 我对 bash 脚本中的舍入数字不太了解,所以我不确定如何实现尽可能与 bash 兼容的解决方案
  • 如果结果适用于尽可能多的 bash 变体,那就太好了。

也许我也可以将计算放在初始定义中以获得一点性能增益,但我不太关心 atm。

linux bash for-loop sh sleep
1个回答
-1
投票

您可以将变量赋值放在命令的开头。

iStart=1 iEnd=20 iGoal=19 iDuration=2 iSleep=$(bc <<<"scale = 3; "$iDuration" / ("$iEnd" - "$iStart" - 1)" \
    for i in $(seq "$iStart" "$iEnd"); do 
        sleep "$iSleep" 
        [ "$i" = "$iGoal" ] && echo "$iGoal" || echo "$i"
    done
© www.soinside.com 2019 - 2024. All rights reserved.