Esecuzione di un .sh per eseguire più comandi


9

Ero curioso di sapere come avrei fatto a eseguire più comandi tramite script di shell.

Ad esempio, solo per provarlo, vorrei essere in grado di collegare un .desktop a un .sh che eseguirà tutti i codici di aggiornamento, quindi non devo scriverlo. So eseguire un singolo comando tramite un .sh, non multiplo.

Comunque?

Risposte:


10

Semplice davvero - devi separare i comandi. Ad esempio questo:

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

aggiornerà gli elenchi dei pacchetti e quindi i pacchetti. Un'altra possibilità è questa (probabilmente migliore, poiché && consentirà l'esecuzione del upgradecomando solo se updateesce correttamente) :

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

Questo dovrebbe eseguire i comandi per l'aggiornamento dell'elenco dei pacchetti e quindi del pacchetto stesso. Questo dovrebbe essere salvato in un file di testo (ad es. updatescriptNella home directory). È quindi possibile renderlo eseguibile eseguendo:

 chmod +x ./updatescript

oppure facendo clic con il tasto destro sul file e rendendolo eseguibile nelle sue proprietà:

ed eseguilo con questo nel terminale:

 ./updatescript

Appunti):

È disponibile un'opzione ( -y) che può essere utilizzata con il upgradecomando in modo che non venga richiesta prima di aggiornare i pacchetti. È una buona idea controllare cosa apt-getsta facendo prima di aggiornare i pacchetti, in quanto potrebbe / farà qualcosa di stupido o qualcosa che non vuoi che faccia. Maggiori informazioni su opzioni come questa possono essere trovate eseguendo man apt-get.

Ciò significa anche che è più ideale utilizzare il terminale per eseguire lo script, in quanto è possibile verificare cosa sta aggiornando e quindi eseguirlo. Se si desidera un modo GUI per eseguire gli aggiornamenti, utilizzare il centro software in quanto è quello che serve.


5

Solo per aggiungere alcuni punti all'ottima risposta di @Wilf,

puoi eseguire comandi in parallelo se vuoi per qualsiasi motivo, ad esempio uno autostartscript per OpenBox potrebbe apparire così:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Questo imposterà un'immagine di sfondo usando nitrogen, avvia il pannello tint2e avvia la console a discesa in stile Quake3 tilda, tutto allo stesso tempo. Questo è utile se non hai bisogno di un programma per finire prima di lanciare il prossimo. Non è il caso apt-get updatee apt-get upgradecomunque!

Notare il &segno alla fine di ogni riga. Ciò farà in modo che la shell esegua il fork di tale processo in background e continui l'esecuzione. Nota come sarà diverso da &&, che è fondamentalmente un andsegno, command_1 && command_2verrà eseguito command_1e se esce con successo, solo allora verrà eseguito command_2, mentre command_1 & command_2inizierà il secondo subito dopo il primo.


Inoltre, potresti semplicemente impilare i comandi per eseguirli in serie, in questo modo:

#!/bin/bash

apt-get update
apt-get upgrade

Questo verrà eseguito apt-get upgradedopo apt-get updateè finito , ma a prescindere dal risultato. Pertanto, anche se, ad esempio, l'aggiornamento si chiude con un errore di rete, l'aggiornamento verrà comunque eseguito.

È anche possibile fare questo in una sola riga, utilizzando il ;segno: apt-get update ; apt-get upgrade. Ancora una volta, questa soluzione non è ottimale per questi comandi particolari, ma potrebbe tornare utile in altre situazioni.


Un rapido punto finale, puoi anche rompere le linee contenenti &&come tali:

command_1 &&
command_2

Questo sarà lo stesso di command_1 && command_2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.