Exécuter un .sh pour exécuter plusieurs commandes

9

J'étais curieux de savoir comment j'allais exécuter plusieurs commandes via un script shell.

Par exemple, juste pour l'essayer, j'aimerais pouvoir connecter un .desktop à un .sh qui exécutera tous les codes de mise à jour, donc je n'ai pas à le taper. Je sais comment exécuter une seule commande via un .sh, pas plusieurs.

En tous cas?

Brendon
la source

Réponses:

10

Vraiment simple - vous devez séparer les commandes. Par exemple, ceci:

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

mettra à jour les listes de packages, puis les packages. Une autre possibilité est la suivante (probablement mieux, car le && ne permettra l' upgradeexécution de la commande que si la updatesortie réussit) :

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

Cela devrait exécuter les commandes de mise à jour de la liste des packages, puis le package lui-même. Cela devrait être enregistré dans un fichier texte (par exemple updatescriptdans le répertoire personnel). Vous pouvez ensuite le rendre exécutable en exécutant:

 chmod +x ./updatescript

ou en faisant un clic droit sur le fichier et en le rendant exécutable dans ses propriétés:

et l'exécuter avec ceci dans le terminal:

 ./updatescript

Remarques):

Il existe une option ( -y) qui peut être utilisée avec la upgradecommande afin qu'elle ne s'affiche pas avant la mise à niveau des packages. C'est une bonne idée de vérifier ce qui apt-getse passe avant de mettre à jour les paquets, car cela peut / fera quelque chose de stupide ou quelque chose que vous ne voulez pas qu'il fasse. Plus d'informations sur des options comme celle-ci peuvent être trouvées en exécutant man apt-get.

Cela signifie également qu'il est plus idéal d'utiliser le terminal pour exécuter le script, car vous pouvez vérifier ce qu'il met à jour, puis l'exécuter. Si vous souhaitez utiliser une interface graphique pour exécuter les mises à jour, utilisez le centre logiciel comme s'il était destiné.

Wilf
la source
5

Pour ajouter quelques points à l'excellente réponse de @Wilf,

vous pouvez exécuter des commandes en parallèle si vous le souhaitez pour une raison quelconque, par exemple, un autostartscript pour OpenBox pourrait ressembler à ceci:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Cela définira une image d'arrière-plan en utilisant nitrogen, démarrera le panneau tint2et démarrera la console déroulante de style Quake3 tilda, tout en même temps. Ceci est utile si vous n'avez pas besoin d'un programme pour terminer avant de lancer le suivant. Ce n'est pas le cas apt-get updateet apt-get upgradepourtant!

Remarquez le &signe à la fin de chaque ligne. Cela entraînera le shell à bifurquer ce processus en arrière-plan et à poursuivre l'exécution. Notez comment il est différent de &&, qui est fondamentalement un andsigne, command_1 && command_2s'exécutera command_1et s'il se termine avec succès, alors seulement exécutez command_2, tandis que command_1 & command_2démarrera le deuxième juste après le premier.


En outre, vous pouvez simplement empiler les commandes pour les exécuter en série, comme ceci:

#!/bin/bash

apt-get update
apt-get upgrade

Ce sera exécuté apt-get upgradeaprès apt-get updateest terminé , mais quel que soit le résultat. Ainsi, même si, par exemple, la mise à jour se termine avec une erreur réseau, la mise à niveau sera toujours exécutée.

Vous pouvez aussi le faire en une ligne, en utilisant le ;signe: apt-get update ; apt-get upgrade. Encore une fois, cette solution n'est pas optimale pour ces commandes particulières, mais elle peut être utile dans d'autres situations.


Un dernier point rapide, vous pouvez également couper les lignes contenant en &&tant que telles:

command_1 &&
command_2

Ce sera le même que command_1 && command_2.

kraxor
la source