当前位置: 首页 > 知识库问答 >
问题:

在Bash中模拟do-time循环

苏品
2023-03-14

在Bash中模拟do-time循环的最佳方法是什么?

我可以在进入循环之前检查条件,然后继续在循环中重新检查条件,但这是重复的代码。有没有更干净的方法?

我的脚本的伪代码:

while [ current_time <= $cutoff ]; do
    check_if_file_present
    #do other stuff
done

如果在$截止时间之后启动,则不会执行check_if_file_present,而do-time会执行。

共有3个答案

葛炯
2023-03-14

这一实施:

  • 没有代码重复
do=true
while $do || conditions; do
  do=false
  # your code ...
done

它也适用于读取循环,跳过第一次读取:

do=true
while $do || read foo; do
  do=false

  # your code ...
  echo $foo
done
龙嘉誉
2023-03-14

将循环体放置在测试之前的之后。while循环的实际主体应该是no-op。

while 
    check_if_file_present
    #do other stuff
    (( current_time <= cutoff ))
do
    :
done

如果您觉得冒号更可读,可以使用continue,而不是冒号。您还可以插入只在迭代之间运行的命令(而不是在第一次迭代之前或最后一次迭代之后),例如echo“在五秒钟内重试”;睡眠5。或在值之间打印分隔符:

i=1; while printf '%d' "$((i++))"; (( i <= 4)); do printf ','; done; printf '\n'

我将测试更改为使用双括号,因为您似乎在比较整数。在双方括号内,使用比较运算符,如

童华池
2023-03-14

两个简单的解决方案:

>

  • 执行你的代码一次之前,同时循环

    actions() {
       check_if_file_present
       # Do other stuff
    }
    
    actions #1st execution
    while [ current_time <= $cutoff ]; do
       actions # Loop execution
    done
    

    或:

    while : ; do
        actions
        [[ current_time <= $cutoff ]] || break
    done
    

  •  类似资料:
    • 问题内容: 我需要在Python程序中模拟循环。不幸的是,以下简单的代码不起作用: 代替“ 1,2,3,done”,它输出以下输出: 为了捕获“停止迭代”异常并正确中断while循环,我该怎么办? 为什么需要这种东西的一个示例在下面显示为伪代码。 状态机: 问题答案: 我不确定你要做什么。你可以像这样实现一个循环: 要么: 你在尝试使用do while循环来打印列表中的内容在做什么?为什么不使用:

    • 我只是想确定用户是否输入了YES或NO值(尽管不考虑大写,因此)。但是,无论我输入是或否,do while都不会中断,例如。 我正在寻找“当输入值不等于‘是’或‘否’时,再次请求数据”的行为。然而,我的代码建议“不管键入什么,让我们只是为了好玩而继续循环…”我哪里出错了,斯塔克?谢谢

    • 问题内容: 我创建了一个非常简单的bash脚本,该脚本运行一些命令。这些命令之一在运行时需要用户输入。即它询问用户“您想等等吗?”,我只想向其发送回车按键,以便脚本将完全自动化。 我将不必在运行时等待输入或其他任何东西,它足以发送按键,输入缓冲区将处理其余部分。 问题答案: 或利用echo生成的隐式换行符(感谢Marcin) 现在我们可以简单地使用以下选项: ,请勿在每次测试后等待按键 即

    • 这段代码在两个方面出了问题,我无法诊断,但与if语句无关:if (strlen(strA) 我注意到的第二个问题是,如果我输入一个字符串“1111111111111”,它显然太长,程序会说密码太长,但整个do/while循环终止,它会要求我确认密码。它应该要求我再次输入密码。 如果我去掉 if 语句:if (strlen(strA) 任何人都可以诊断问题吗?

    • do loop用于执行一定次数的语句。 需要执行语句的次数由传递给do循环的值确定。 语法 (Syntax) do循环语句的语法如下 - do count statement #1 statement #2 ... End Statement#1 and Statement#2是一系列在do循环中执行的语句。 count变量表示do循环需要执行的次数。 流程图 (Fl

    • 当布尔条件为True或者条件变为True时,它会重复封闭的语句块。 它可以随时使用Exit Do语句终止。 此循环结构的语法是 - Do { While | Until } condition [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop -or- Do