运行 .sh 来执行多个命令

运行 .sh 来执行多个命令

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

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

反正?

答案1

其实很简单——你需要分开命令。例如:

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

将更新软件包列表,然后更新软件包。另一种可能是(可能更好,因为 && 仅在成功退出时才允许upgrade命令运行update

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

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

 chmod +x ./updatescript

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

并在终端中运行它:

 ./updatescript

笔记):

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

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

答案2

只是想对@Wilf 的出色回答补充几点,

如果出于任何原因,您可以并行运行命令,例如,autostartOpenBox 的脚本可能如下所示:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

这将使用 设置背景图像nitrogen、启动面板并同时tint2启动 Quake3 样式的下拉控制台。如果您不需要在启动下一个程序之前完成一个程序,这将非常有用。tildaapt-get update但对于和来说情况并非apt-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 upgrade之后运行apt-get update完成的,但无论结果如何。因此,即使更新因网络错误而退出,升级仍将运行。

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


最后再简单说一下,你还可以断行,&&如下所示:

command_1 &&
command_2

这将与 相同command_1 && command_2

相关内容