【问题标题】:BASH Shell Infinite loop with IF ELSE Statment带有 IF ELSE 语句的 BASH Shell 无限循环
【发布时间】:2023-04-04 23:22:01
【问题描述】:

好的,我知道我问过类似的问题,我知道如何进行无限循环:

while [ 1 ]
do
    foo
    bar
        then
sleep 10
done

但是,如果我想在这个循环中运行一些(相当多的)IF ELSE 语句,一旦它们完成,我将如何让脚本继续循环,我该怎么做?

【问题讨论】:

  • 您的意思是如何在 while 内执行 if/else 语句?我不明白
  • 是的,就是这样,我有相当大的脚本,其中包含相当多的 if else 语句。我想要做的是循环整个脚本。
  • @bikerben:好吧,只需将您想要的 shell 代码包装在 while/do/done 中即可。如果你打算用 Ctrl-C (或任何其他杀死它的方法)打破它,也许看看trap 命令。

标签: bash shell if-statement while-loop infinite-loop


【解决方案1】:
while :; do
    if cond1; then
        whatever
    elif cond2; then
        something else
    else
        break
    fi
done
  1. 您使用while true 或使用true 的较短别名: 进行无限循环。 [ 1 ] 是不必要的复杂,不是你想象的那样([ 0 ] 也是真的!)。请记住,ifwhile 中的条件是任意命令,其退出状态(零 = 真,非零 = 假)用作条件值,[ 只是特殊test 命令的别名(两者都内置在大多数 shell 中,但不一定是)。
  2. do/done 之间允许使用任何 shell 构造,包括条件、更多循环和案例。
  3. 使用break 从内部终止最内层循环(就像大多数其他语言一样)。

【讨论】:

  • 我敢打赌他不会这么问...我不明白他为什么说:“我想要做的是循环整个脚本”
  • 这正是我想要的。非常感谢。
【解决方案2】:

bash 中的 if 只是:if [ some test ]; then some_command; fi:

while [ 1 ]
do
    if [ some test ]
    then
        some command
    else
        other cmd
    fi
sleep 10
done

Bash Scripting Guide

【讨论】:

  • 没有。如果在 shell 中只是 if some test; then some command; fi[ 是用于比较值和检查文件是否存在的命令,但在许多情况下,您需要一些任意命令(whichgrep、...)或 test 不够用最后选择expr
【解决方案3】:

更正了 chown case 添加了刹车以完成循环 已更正

while [ 1 ]
do
    if [ some test ]
    then
        some command
    brake
    else
        other cmd
    fi
sleep 10
done

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 2019-12-12
    • 2015-10-28
    • 2012-03-12
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多