运行.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 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 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
相同。