首页 文章

单行Bash无限while循环的语法

提问于
浏览
511

我无法想出正确的分号和/或括号组合 . 我想这样做,但作为命令行的一行代码:

while [ 1 ]
do
    foo
    sleep 2
done

11 回答

  • 6

    一个非常简单的无限循环.. :)

    while true ; do continue ; done
    

    你的问题可能是:

    while true; do foo ; sleep 2 ; done
    
  • 1

    你也可以试试这个警告:你不应该这样做,因为问题是要求无限循环而没有结束......这就是你可以做到的 .

    while [[ 0 -ne 1 ]]; do echo "it's looping";   sleep 2; done
    
  • 977
    while true; do foo; sleep 2; done
    

    顺便说一句,如果你在命令提示符下键入多行(如你所示),然后用向上箭头调用历史记录,你将在一行上得到它,正确地标点符号 .

    $ while true
    > do
    >    echo "hello"
    >    sleep 2
    > done
    hello
    hello
    hello
    ^C
    $ <arrow up> while true; do    echo "hello";    sleep 2; done
    
  • 2

    科隆总是“真实的”:

    while :; do foo; sleep 2; done
    
  • 60

    我喜欢仅将分号用于WHILE语句,而使用&&运算符来使循环执行多个操作...

    所以我总是这样做

    while true ; do echo Launching Spaceship into orbit && sleep 5s && /usr/bin/launch-mechanism && echo Launching in T-5 && sleep 1s && echo T-4 && sleep 1s && echo T-3 && sleep 1s && echo T-2 && sleep 1s && echo T-1 && sleep 1s && echo liftoff ; done
    
  • 144

    如果你希望while循环在某些条件之后停止,并且你的 foo 命令在满足这个条件时返回非零,那么你可以让循环中断如下:

    while foo; do echo 'sleeping...'; sleep 5; done;
    

    例如,如果 foo 命令正在批量删除事物,并且在没有任何内容要删除时返回1 .

    如果您有一个自定义脚本需要多次运行命令直到某些条件,这很有效 . 您编写脚本以在满足条件时使用 1 退出,并在应该再次运行时使用 0 退出 .

    例如,假设您有一个python脚本 batch_update.py ,它在数据库中更新100行,如果有更新要更新则返回 0 ,如果没有更新则返回 1 . 以下命令允许您一次更新行100,在更新之间休眠5秒:

    while batch_update.py; do echo 'sleeping...'; sleep 5; done;
    
  • 22

    如果我能给出两个实际例子(带有一点“情感”) .

    这会将所有以“.jpg”结尾的文件的名称写在“img”文件夹中:

    for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done
    

    这会删除它们:

    for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done
    

    只是想做出贡献 .

  • 24

    也可以在while条件下使用sleep命令 . 使单线看起来更干净imho .

    while sleep 2; do echo thinking; done
    
  • 6

    对于简单的过程观看,请使用 watch

  • 1

    您可以使用分号分隔语句:

    $ while [ 1 ]; do foo; sleep 2; done
    
  • 4

    您还可以使用 until 命令:

    until ((0)); do foo; sleep 2; done
    

    请注意,与 while 相反,只要测试条件的退出状态不为零, until 就会执行循环内的命令 .


    使用 while 循环:

    while read i; do foo; sleep 2; done < /dev/urandom
    

    使用 for 循环:

    for ((;;)); do foo; sleep 2; done
    

    使用 until 的另一种方法:

    until [ ]; do foo; sleep 2; done
    

相关问题