我很好奇如何通过 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 的出色回答补充几点,
如果出于任何原因,您可以并行运行命令,例如,autostart
OpenBox 的脚本可能如下所示:
#!/bin/bash
nitrogen --restore &
tint2 &
tilda
这将使用 设置背景图像nitrogen
、启动面板并同时tint2
启动 Quake3 样式的下拉控制台。如果您不需要在启动下一个程序之前完成一个程序,这将非常有用。tilda
apt-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
。