我有大约 20 个命令,我必须将所有这些命令发送到 Unix shell 并复制结果,但我不知道该怎么做。
我不确定我有什么外壳,因为它是一个连接到移动网络管理的小程序,通过这个小程序,我们可以通过行发送命令并通过尖叫接收结果,因此我不能使用脚本发送命令。
命令1- 连接服务器。
等待命令 1 完成
命令2- 更新服务器1的所有信息完成
等待。
命令3。获取一些参数。
...以及更多这样的命令。
我尝试过和cmd1 | cmd2 | cmd3
和 cmd1 & cmd2 & cmd3
和cmd1;cmd2
问题在于cmd1
它连接到 RNC(网络元素)并需要大约 15 秒的时间,之后cmd2
才有意义。但只适用于第一个命令。有什么线索吗,如何运行它?
答案1
通常只是cmd1;cmd2;cmd3;cmd4
(如果您想将其写在一行上),或者cmd1 && cmd2 && cmd3 && cmd4
如果您不想在 cmd2 失败时运行 cmd3,则使用。
或者,;
您可以每行只写一个命令。
cmd1
cmd2
cmd3
cmd4
如果您希望命令在后台并行运行,您还可以使用
cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish
这些方法中的任何一个都可以放入 shell 脚本中。在 shell 脚本中编写的内容与在实际 shell 本身中编写的内容几乎没有什么区别。
答案2
sleep
如果您的环境允许,您可能需要研究一下。完整的序列将类似于cmd1 && sleep 10s && cmd2
。
这是相关的sleep 的手册页。
答案3
只需使用一个脚本,一个包含依次运行的命令的文件,例如:
#!/bin/sh
command-01
command-02
...
command-20
第一行 (shebang) 告诉使用 运行以下命令/bin/sh
,使文件可执行 ( chmod u+x your-little-script
) 然后您可以通过 运行它./my-little-script
。这样你就不会遗漏任何一步;-)
阅读shell的手册,它提供了完整的编程语言。检查bash(1)
这是否是可用的,否则是 Korn shell ksh(1)
。它们提供了许多有用的功能来控制脚本中的控制流(或交互地)。
答案4
expect
您可以在本地计算机上运行类似的命令来发送cmd1
并等待其完成,然后再发出cmd2
等。您必须计算出合理的等待时间,或者指示命令已完成的特定输出,以便编写正确的命令期待剧本。
当然,cmd1; cmd2; cmd3; cmd4
在一个命令中会按顺序执行命令,一个接一个。