我很难找到分号和/或大括号的正确组合。我想这样做,但作为命令行的一行代码:
while [ 1 ]
do
foo
sleep 2
done
我很难找到分号和/或大括号的正确组合。我想这样做,但作为命令行的一行代码:
while [ 1 ]
do
foo
sleep 2
done
当前回答
如果我能举两个实际的例子(带点“情绪”)。
这将写入文件夹“img”中所有以“.jpg”结尾的文件的名称:
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 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
使用while:
while true; do echo 'while'; sleep 2s; done
用于循环:
for ((;;)); do echo 'forloop'; sleep 2; done
使用递归,(与上面有点不同,键盘中断不会停止它)
list(){ echo 'recursion'; sleep 2; list; } && list;
如果您希望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;
你甚至不需要使用do and done。对于无限循环,我发现使用大括号更容易理解。例如:
for ((;;)) { date ; sleep 1 ; }
这在bash和zsh中有效。在sh。
在while的情况下也可以使用sleep命令。让一个内胆看起来更干净。
while sleep 2; do echo thinking; done