运行.sh以执行多个命令

我很好奇我将如何通过shell脚本运行多个命令。

例如,只是为了尝试一下,我希望能够将.desktop连接到运行所有更新代码的.sh,因此我不必输入它。 我知道如何通过.sh执行单个命令,而不是多个。

无论如何?

很简单 – 你需要分开命令。 例如:

#!/bin/bash sudo apt-get update sudo apt-get upgrade 

将更新包列表,然后更新包。 另一种可能性是这种情况(可能更好,因为&&只允许在update成功退出时运行upgrade命令)

 #!/bin/bash sudo apt-get update && sudo apt-get upgrade 

这应该运行命令来更新包列表,然后运行包本身。 这需要保存到文本文件中(例如主目录中的updatescript )。 然后,您可以通过运行使其可执行:

  chmod +x ./updatescript 

或者右键单击该文件并使其在其属性中可执行:

并在终端中运行它:

  ./updatescript 

笔记):

有一个可用的选项( -y )可以与upgrade命令一起使用,因此在升级包之前不会提示。 在升级软件包之前检查apt-get正在做什么是个好主意,因为它可能/将会做一些愚蠢的事情或者你不想做的事情。 有关此类选项的更多信息可以通过运行man apt-get

这也意味着使用终端运行脚本更为理想,因为您可以检查它的更新内容,然后运行它。 如果您想要一种GUI方式来运行更新,请使用软件中心,因为它就是它的用途。

只是为@Wilf的优秀答案添加几点,

你可以出于任何原因在paralell中运行命令,例如,OpenBox的autostart脚本可能如下所示:

 #!/bin/bash nitrogen --restore & tint2 & tilda 

这将使用nitrogen设置背景图像,启动面板tint2并同时启动Quake3风格的下拉控制台tilda 。 如果您在启动下一个程序之前不需要完成程序,这将非常有用。 不是apt-get updateapt-get upgrade

注意每行末尾的&符号。 这将导致shell将该进程分叉到后台并继续执行。 注意它与&&的区别,它基本上是一个and符号, command_1 && command_2将执行command_1 ,如果它成功退出,则只运行command_2 ,而command_1 & command_2将在第一个之后的第二个右边开始。


此外,您可以只是堆叠命令以使它们按顺序执行,如下所示:

 #!/bin/bash apt-get update apt-get upgrade 

这将在apt-get update 完成后运行apt-get upgrade ,但不管结果如何。 因此,即使更新退出网络错误,仍将运行升级。

你也可以在一行中使用; sign: apt-get update ; apt-get upgrade apt-get update ; apt-get upgrade 。 同样,这个解决方案对于这些特定命令并不是最佳的,但在其他情况下它可能会派上用场。


最后一点,你也可以打破包含&&行:

 command_1 && command_2 

这与command_1 && command_2相同。