Ausführen einer .sh, um mehrere Befehle auszuführen

9

Ich war gespannt, wie ich mehrere Befehle per Shell-Skript ausführen würde.

Um es beispielsweise auszuprobieren, möchte ich in der Lage sein, ein .desktop mit einem .sh zu verbinden, auf dem alle Aktualisierungscodes ausgeführt werden, damit ich es nicht eingeben muss. Ich weiß, wie man einen einzelnen Befehl über eine .sh ausführt, nicht über mehrere.

Wie auch immer?

Brendon
quelle

Antworten:

10

Ganz einfach - Sie müssen die Befehle trennen. Zum Beispiel dies:

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

aktualisiert die Paketlisten und dann die Pakete. Eine andere Möglichkeit ist folgende (wahrscheinlich besser, da das && den upgradeBefehl nur ausführen lässt, wenn das updateBeenden erfolgreich ist) :

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

Dies sollte die Befehle zum Aktualisieren der Liste der Pakete und dann des Pakets selbst ausführen. Dies müsste in einer Textdatei gespeichert werden (z. B. updatescriptim Home-Verzeichnis). Sie können es dann ausführbar machen, indem Sie Folgendes ausführen:

 chmod +x ./updatescript

oder indem Sie mit der rechten Maustaste auf die Datei klicken und sie in ihren Eigenschaften ausführbar machen:

und führen Sie es damit im Terminal aus:

 ./updatescript

Anmerkungen):

Es ist eine Option ( -y) verfügbar, die mit dem upgradeBefehl verwendet werden kann, sodass vor dem Upgrade der Pakete keine Aufforderung erfolgt. Es ist eine gute Idee, zu überprüfen, was getan apt-getwird, bevor die Pakete aktualisiert werden, da es möglicherweise etwas Dummes tut oder tun wird oder etwas, das Sie nicht wollen. Weitere Informationen zu solchen Optionen finden Sie unter Ausführen man apt-get.

Dies bedeutet auch, dass es idealer ist, das Terminal zum Ausführen des Skripts zu verwenden, da Sie überprüfen können, was aktualisiert wird, und es dann ausführen können. Wenn Sie eine GUI-Methode zum Ausführen der Updates wünschen, verwenden Sie das Software-Center so, wie es ist.

Wilf
quelle
5

Nur um ein paar Punkte zu der hervorragenden Antwort von @Wilf hinzuzufügen,

Sie können Befehle parallel ausführen, wenn Sie aus irgendeinem Grund möchten. Beispielsweise autostartkönnte ein Skript für OpenBox folgendermaßen aussehen:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Dadurch wird ein Hintergrundbild mit erstellt nitrogen, das Bedienfeld tint2gestartet und gleichzeitig die Dropdown-Konsole im Quake3-Stil gestartet tilda. Dies ist nützlich, wenn Sie kein Programm zum Beenden benötigen, bevor Sie das nächste starten. Nicht der Fall für apt-get updateund apt-get upgradeobwohl!

Beachten Sie das &Zeichen am Ende jeder Zeile. Dies führt dazu, dass die Shell diesen Prozess in den Hintergrund stellt und die Ausführung fortsetzt. Beachten Sie, wie es sich von unterscheidet &&, was im Grunde ein andZeichen ist, ausgeführt command_1 && command_2wird command_1und wenn es mit Erfolg beendet wird, erst dann ausgeführt wird command_2, während command_1 & command_2die zweite direkt nach der ersten gestartet wird.


Sie können Befehle auch einfach stapeln, um sie seriell ausführen zu lassen:

#!/bin/bash

apt-get update
apt-get upgrade

Dies wird ausgeführt, apt-get upgradenachdem der apt-get updateVorgang abgeschlossen ist , jedoch unabhängig vom Ergebnis. Selbst wenn das Update beispielsweise mit einem Netzwerkfehler beendet wird, wird das Upgrade dennoch ausgeführt.

Sie können dies auch in einer Zeile mit dem ;Zeichen tun : apt-get update ; apt-get upgrade. Auch diese Lösung ist für diese speziellen Befehle nicht optimal , kann jedoch in anderen Situationen nützlich sein.


Ein kurzer letzter Punkt: Sie können auch Zeilen brechen, die Folgendes enthalten &&:

command_1 &&
command_2

Dies wird das gleiche sein wie command_1 && command_2.

Kraxor
quelle