单线Bash无限while循环的语法
我有麻烦提出分号和/或大括号的正确组合。 我想这样做,但作为命令行的一行:
while [ 1 ] do foo sleep 2 done
while true; do foo; sleep 2; done
顺便说一句,如果您在命令提示符下键入它作为多行(如您所示),然后用箭头向上调用历史logging,您将在单行上正确地加上标点符号。
$ while true > do > echo "hello" > sleep 2 > done hello hello hello ^C $ <arrow up> while true; do echo "hello"; sleep 2; done
在条件下也可以使用睡眠命令。 让单线看起来更干净的恕我直言。
while sleep 2; do echo thinking; done
冒号总是“真实的”:
while :; do foo; sleep 2; done
您可以使用分号分隔语句:
$ while [ 1 ]; do foo; sleep 2; done
你也可以使用, until
命令:
until ((0)); do foo; sleep 2; done
请注意,与while
相反,只要testing条件具有不为零的退出状态,将执行循环内的命令。
使用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
我喜欢用分号只用于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
一个非常简单的无限循环.. 🙂
while true ; do continue ; done
Fr你的问题将是:
while true; do foo ; sleep 2 ; done
用简单的过程观看使用watch
来代替
如果我能举两个实例(带点“情感”)。
这将以“.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
只是想贡献。
你也可以试试
while [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done
如果你想让while循环在一些条件之后停止,并且当这个条件满足时你的foo
命令返回非零值,那么你可以得到这样的循环:
while foo; do echo 'sleeping...'; sleep 5; done;
例如,如果foo
命令是批量删除事件,并且在没有剩下任何要删除的情况下返回1。