目前,我有一个
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,并试图进行搜索,但没有找到解决方案。
#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
这是一个适用于命令行的单行版本,但也可以在脚本中使用。将变量嵌入到不带空格的字符串中时,需要在变量名两边加上大括号。
循环不仅按顺序发送请求,而且在需要时更易于调整和重用,而无需太多担心关于错别字。
评论
terdon在下面的答案非常好,但是您可以删除上面显示的版本中的分号,以及在脚本中按顺序执行命令的命令,每个命令都在一行上。除非将所有命令放在一行上,否则分号是多余的。