运行.sh以执行多个命令


9

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

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

可以吗

Answers:


10

确实很简单-您需要分离命令。例如:

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

将更新软件包列表,然后更新软件包。另一个可能性是这样(可能更好,因为&&仅upgradeupdate成功退出后才允许命令运行)

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

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

 chmod +x ./updatescript

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

并在终端中运行它:

 ./updatescript

笔记):

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

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


5

只需在@Wilf的出色回答中添加几点,

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

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

这将使用设置背景图像nitrogen,同时启动面板tint2和启动Quake3样式的下拉控制台tilda。如果不需要在启动下一个程序之前完成程序,这将很有用。并非如此apt-get updateapt-get upgrade尽管如此!

注意&每行末尾的符号。这将导致外壳程序将该进程派生到后台并继续执行。请注意&&,它与基本上是一个and符号command_1 && command_2会有所不同,它将执行command_1,如果成功退出,则仅运行run command_2,而command_1 & command_2在第一个之后第二个开始。


同样,您可以堆叠命令以使其顺序执行,如下所示:

#!/bin/bash

apt-get update
apt-get upgrade

这将运行apt-get upgradeapt-get update成品,但无论结果如何。因此,例如,即使更新因网络错误而退出,升级仍将运行。

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


最后一点,您还可以中断包含以下内容的行&&

command_1 &&
command_2

这将与相同command_1 && command_2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.