2010-07-10 114 views
3

如何在Unix shell中循环命令/程序,而无需将循环写入脚本或其他应用程序。使用脚本在shell中执行命令循环

例如,我编写了一个脚本,输出一个光传感器值,但我现在仍在测试它,所以我希望它通过反复运行可执行文件在循环中运行它。

也许我还想在循环中运行“ls”或“df”。我知道我可以在几行bash代码中轻松完成此操作,但是能够在终端中为任何给定的命令组键入命令对我来说同样有用。

回答

5

您可以在一行写它把分号,而不是回报,就像

for NAME [in LIST ]; do COMMANDS; done 

在这一点上,你可以写称为shell脚本编写,你会在一个shell脚本编写完全相同的循环,例如,repeat,给定一个命令,运行它N次,通过简化更改COMMANDS$1

+0

谢谢,我选择了无限的同时:while [1];做sudo ./sensorTest.py;完成 – cdated 2010-07-10 22:54:13

1

除了接受参数之外,您可以在命令行中完成任何可以在脚本中执行的操作。早些时候,我直接在来砸键入此观看目录填满我传送的文件:

while sleep 5s 
do 
    ls photos 
end 
2

这并不完全回答你的问题,但我觉得这是relavent。 shell循环的优点之一是某些命令会返回项目列表。当然,这是显而易见的,但是你可以使用for循环来做的事情是在该列表中执行一个命令。

for $file in `find . -name *.wma`; do cp $file ./new/location/ done; 

你可以变得富有创意,并做一些非常强大的东西。

+0

这是一个强大的技术,但如果文件名中有空格,则失败。另外,在你的例子中'{}'没有意义。你需要一个变量:'用于$ list中的项目;做回声“$ item”; done' – 2010-07-11 00:48:13

+0

find是一个不好的例子,因为它的'-exec'参数和for循环做了同样的事情,但是以一种空间友好的方式。不过,这是一种很棒的技术,我经常使用它。 – Benson 2010-07-11 04:29:36

2

我推荐使用“watch”,它只是按照你想要的做,并且在每次执行命令前清理终端,所以很容易监控变化。

您可能已经拥有它了,只需试一试watch lswatch ./my_script.sh即可。您甚至可以使用-n选项控制每次执行之间的等待时间(以秒为单位),并且可以使用-d突出显示连续运行输出的差异。

尝试:

运行LS每一秒:

watch -n 1 ls 

运行my_script.sh每3秒,并突出显示差异:

watch -n 3 -d ./my_script.sh 

观看节目手册页: http://linux.die.net/man/1/watch