使用脚本在shell中创建命令循环

时间:2010-07-10 22:35:12

标签: bash shell loops

如何在没有将循环写入脚本或其他应用程序的情况下循环Unix shell中的命令/程序。

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

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

4 个答案:

答案 0 :(得分:5)

你可以在shell脚本中编写完全相同的循环,将它写在一行中,用分号代替返回,如

for NAME [in LIST ]; do COMMANDS; done

此时你可以编写一个名为repeat的shell脚本,通过简单地将COMMANDS更改为$1,给定一个命令,运行N次。

答案 1 :(得分:2)

这并不能完全回答你的问题,但我觉得这是相关的。 shell循环的一个好处是一些命令返回项目列表。当然这很明显,但是你可以使用for循环执行的操作是在该项列表上执行命令。

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

你可以发挥创意并做一些非常强大的事情。

答案 2 :(得分:2)

我建议使用“watch”,它只是按照您的意愿行事,并在每次执行命令之前清理终端,因此可以轻松监控更改。

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

尝试:

每秒运行ls:

watch -n 1 ls

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

watch -n 3 -d ./my_script.sh

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

答案 3 :(得分:1)

除了接受参数之外,您可以在命令行中完成脚本中可以执行的任何操作。之前我直接输入了bash,以便在我传输文件时观察目录填充:

while sleep 5s
do
  ls photos
end