目前,我有一个script.sh文件,其内容如下:

#!/bin/bash
wget -q http://exemple.com/page1.php;
wget -q http://exemple.com/page2.php;
wget -q http://exemple.com/page3.php;


我希望在上一个操作完成时逐个执行命令。我做对了吗?我以前从未使用过Linux,并试图进行搜索,但没有找到解决方案。

评论

terdon在下面的答案非常好,但是您可以删除上面显示的版本中的分号,以及在脚本中按顺序执行命令的命令,每个命令都在一行上。除非将所有命令放在一行上,否则分号是多余的。

#1 楼

是的,您的做法正确。 Shell脚本将按顺序运行每个命令,等待第一个命令完成后再开始下一个命令。您可以将命令与;结合使用,也可以将它们放在单独的行中:

command1; command2




command1
command2


那里如果命令在单独的行上,则不需要;。您也可以选择仅在第一个命令成功退出时运行第二个命令。为此,请与&&一起加入它们:

command1 && command2




command1 &&
command2


有关各种信息您可以使用的控制操作员,请参见此处。

评论


回想一下,OP可以简单地在脚本的开头添加set -e来代替&&。当然,这不是流程链接操作员。

– didierc
15年2月12日在17:18

@didierc会导致脚本在出现任何错误时退出,并且还会产生大量不必要的进度报告。与用&&链接两个特定命令不同。

– terdon♦
15年2月12日在17:21

@polemon不是,不是。对于新手来说,这是一个非常简单的问题。我看不出增加太多细节的意义。注意,我什至没有提到||。我真的不明白为什么等待在这里有意义,对于运行一个命令一个接一个的简单任务来说,肯定不需要。仅对过程进行更细粒度的控制才需要。当然可以随意提交答案,但我宁愿保持简单。

– terdon♦
15年2月12日在17:34

@terdon不会将其设置为-v或-x而不是-e吗?

–斯蒂芬·基特(Stephen Kitt)
15年2月12日在18:38

@didierc看到上面的评论,我在想设置-x,对不起。

– terdon♦
2015年2月12日在18:44



#2 楼

在这种重复的情况下,我建议使用for循环。

 for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done
 


这是一个适用于命令行的单行版本,但也可以在脚本中使用。将变量嵌入到不带空格的字符串中时,需要在变量名两边加上大括号。

循环不仅按顺序发送请求,而且在需要时更易于调整和重用,而无需太多担心关于错别字。