web-dev-qa-db-fra.com

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

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

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

En tous cas?

9
Brendon

C'est 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 paquets, puis les paquets. Une autre possibilité est la suivante (probablement mieux, car && n'autorisera la commande upgradeque si updatese ferme correctement) :

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

Cela devrait exécuter les commandes pour mettre à jour la liste des paquets, puis le paquet eux-mêmes. Cela devra être sauvegardé dans un fichier texte (par exemple updatescriptdans le répertoire de base). Vous pouvez ensuite le rendre exécutable en lançant:

 chmod +x ./updatescript

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

et lancez-le avec ceci dans le terminal:

 ./updatescript

Note (s):

Il existe une option (-y) disponible qui peut être utilisée avec la commande upgradeafin qu'elle ne soit pas invitée avant la mise à niveau des packages. C'est une bonne idée de vérifier ce que apt-get fait avant de mettre à jour les paquetages, car cela peut faire/va faire quelque chose de stupide ou quelque chose que vous ne voulez pas faire. Vous trouverez plus d’informations sur ce type d’option en exécutant man apt-get.

Cela signifie également qu'il est préférable 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 voulez un moyen graphique d'exécuter les mises à jour, utilisez le centre de logiciel comme il est destiné.

9
Wilf

Juste pour ajouter quelques points à l’excellente réponse de @Wilf,

vous pouvez exécuter des commandes en parallèle si vous voulez, pour quelque raison que ce soit, par exemple, un script autostart pour OpenBox pourrait ressembler à ceci:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Ceci définira une image d’arrière-plan avec nitrogen, lancera le panneau tint2 et lancera la console déroulante de style Quake3 tilda, en même temps. Ceci est utile si vous n'avez pas besoin d'un programme pour terminer avant de lancer le suivant. Pas le cas pour apt-get update et apt-get upgrade cependant!

Notez le signe & à la fin de chaque ligne. Cela incitera le shell à mettre ce processus en arrière-plan et à poursuivre l'exécution. Notez en quoi il diffère de &&, qui est en gros un signe and, command_1 && command_2 sera exécutécommand_1 et s’il se termine avec succès, il n’exécutera alors que command_2, alors que command_1 & command_2 démarrera la deuxième à droite après le premier.


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

#!/bin/bash

apt-get update
apt-get upgrade

Cela fonctionnera apt-get upgrade après que apt-get update soit fini, mais quel que soit le résultat. Ainsi, même si, par exemple, la mise à jour se ferme avec une erreur réseau, la mise à niveau sera toujours exécutée.

Vous pouvez également le faire sur une seule ligne, à l’aide du signe ;: apt-get update ; apt-get upgrade. Encore une fois, cette solution est non optimale pour ces commandes particulières, mais elle peut s'avérer utile dans d'autres situations.


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

command_1 &&
command_2

Ce sera la même chose que command_1 && command_2.

4
kraxor