web-dev-qa-db-fra.com

Bash - comment exécuter une commande une fois la précédente terminée?

J'ai actuellement un script.sh fichier avec le contenu suivant:

#!/bin/bash
wget -q http://exemple.com/page1.php;
wget -q http://exemple.com/page2.php;
wget -q http://exemple.com/page3.php;

Je veux exécuter les commandes une par une, lorsque la précédente se termine. Est-ce que je le fais de la bonne manière? Je n'ai jamais travaillé avec Linux auparavant et j'ai essayé de le rechercher, mais je n'ai trouvé aucune solution.

104
drogy

Oui, vous le faites correctement. Les scripts shell exécuteront chaque commande séquentiellement, en attendant que la première se termine avant que la suivante ne démarre. Vous pouvez soit joindre des commandes avec ; ou les avoir sur des lignes distinctes:

command1; command2

ou

command1
command2

Il n'est pas nécessaire de ; si les commandes sont sur des lignes distinctes. Vous pouvez également choisir d'exécuter la deuxième commande uniquement si la première s'est terminée avec succès. Pour ce faire, rejoignez-les avec &&:

command1 && command2

ou

command1 &&
command2

Pour plus d'informations sur les différents opérateurs de contrôle à votre disposition, voir ici .

151
terdon

Dans un cas répétitif comme celui-ci, j'ai recommandé d'utiliser un pour boucle.

for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done

Il s'agit d'une version à une ligne adaptée à la ligne de commande, mais peut également être utilisée dans un script. Les accolades autour du nom de la variable sont nécessaires lors de l'incorporation d'une variable dans une chaîne sans espace.

La boucle envoie non seulement les requêtes dans l'ordre, mais est plus facile à modifier et à réutiliser si nécessaire, sans autant de soucis concernant les fautes de frappe.

13
Rache