Bri*_*con 595 bash loops while-loop
我无法想出正确的分号和/或括号组合.我想这样做,但作为命令行的一行代码:
while [ 1 ]
do
foo
sleep 2
done
Run Code Online (Sandbox Code Playgroud)
Ste*_*ini 1141
while true; do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你在命令提示符下键入多行(如你所示),然后用向上箭头调用历史记录,你将在一行上得到它,正确地标点.
$ while true
> do
> echo "hello"
> sleep 2
> done
hello
hello
hello
^C
$ <arrow up> while true; do echo "hello"; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
Ans*_*ssi 161
也可以在while条件下使用sleep命令.使单线看起来更干净imho.
while sleep 2; do echo thinking; done
Run Code Online (Sandbox Code Playgroud)
小智 67
科隆总是"真实的":
while :; do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
mip*_*adi 29
您可以使用分号分隔语句:
$ while [ 1 ]; do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
dev*_*ull 28
您还可以使用until命令:
until ((0)); do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
请注意,与此相反while,until只要测试条件的退出状态不为零,就会执行循环内的命令.
使用while循环:
while read i; do foo; sleep 2; done < /dev/urandom
Run Code Online (Sandbox Code Playgroud)
使用for循环:
for ((;;)); do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
另一种使用方式until:
until [ ]; do foo; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
小智 10
一个非常简单的无限循环.. :)
while true ; do continue ; done
Run Code Online (Sandbox Code Playgroud)
你的问题将是:
while true; do foo ; sleep 2 ; done
Run Code Online (Sandbox Code Playgroud)
小智 8
我喜欢仅将分号用于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
Run Code Online (Sandbox Code Playgroud)
使用while:
while true; do echo 'while'; sleep 2s; done
Run Code Online (Sandbox Code Playgroud)
使用for循环:
for ((;;)); do echo 'forloop'; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
使用Recursion, (与上面有点不同,键盘中断不会阻止它)
list(){ echo 'recursion'; sleep 2; list; } && list;
Run Code Online (Sandbox Code Playgroud)
您甚至不需要使用doand done。for对于无限循环,我发现与大括号一起使用更具可读性。例如:
for ((;;)) { date ; sleep 1 ; }
Run Code Online (Sandbox Code Playgroud)
这适用于bash和zsh。在 中不起作用sh。
如果您希望while循环在某些条件后停止,并且在foo满足此条件时命令返回非零值,则可以使循环中断,如下所示:
while foo; do echo 'sleeping...'; sleep 5; done;
Run Code Online (Sandbox Code Playgroud)
例如,如果foo命令正在批量删除事物,并且在没有什么要删除的情况下返回1。
如果您有一个自定义脚本,该脚本需要多次运行命令直到出现某种情况,则此方法很好用。您编写脚本以1在满足条件0时退出,并在应再次运行时退出。
例如,假设您有一个python脚本batch_update.py,该脚本将更新数据库中的100行,并0在有更多更新和1没有更新时返回。以下命令将允许您一次更新行100,并在两次更新之间休眠5秒:
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
Run Code Online (Sandbox Code Playgroud)