Guide du débutant à BASH

Bienvenue dans la 2ème partie de la série Beginners Guide To BASH qui est unique en ce sens qu'il s'agit du seul tutoriel BASH écrit par un débutant pour les débutants.

Les lecteurs de ce guide développeront leurs connaissances et, espérons-le, à la fin, seront capables d'écrire des scripts assez intelligents.

La dernière fois que nous avons couvert créer votre premier script qui affichait simplement les mots "Hello World". Il couvre des sujets tels que les éditeurs de texte, comment ouvrir une fenêtre de terminal, où mettre vos scripts, comment afficher les mots "Hello World" et quelques points plus fins sur les caractères d'échappement tels que les guillemets ("").

Cette section couvre les paramètres d'entrée. Il y a autres guides qui enseignent ce genre de choses, mais trop fréquemment, ils sautent dans des trucs assez bas et fournissent peut-être trop d'informations.

Un script de paramètre ajoute une personnalisation

Dans le script "Hello World" du dernier tutoriel, tout était très statique. Le script n'a pas vraiment fait grand-chose du tout.

Comment pourrions-nous améliorer le script "Hello World" ?

Qu'en est-il d'un script qui salue la personne qui l'exécute? Au lieu de dire "Hello World", il dira "Hello Gary", "Hello Tim" ou "Hello Dolly".

Sans la possibilité d'accepter les paramètres d'entrée, nous aurions besoin d'écrire trois scripts « hellogary.sh », « hellotim.sh » et « hellodolly.sh ».

Comment créer un paramètre

En permettant à notre script de lire les paramètres d'entrée, nous pouvons utiliser un script pour saluer n'importe qui.

Pour ce faire, ouvrez une fenêtre de terminal (CTRL + ALT + T) et accédez à votre dossier de scripts en tapant ce qui suit: (à propos de la commande cd)

scripts de CD

Créez un nouveau script appelé greetme.sh en tapant ce qui suit: (à propos de la commande tactile)

touchez greetme.sh

Ouvrez le script dans votre éditeur préféré en tapant ce qui suit: (à propos de la commande nano)

nano salueme.sh

Saisissez le texte suivant dans nano:

#!/bin/bash
echo "bonjour $@"

presse CTRL et ô pour enregistrer le fichier, puis CTRL et X pour fermer le fichier.

Script Bash de base Linux avec paramètres

Pour exécuter le script, entrez ce qui suit dans la ligne de commande en remplaçant votre nom.

sh salueme.sh Tim

Si je lance le script avec mon nom, il affiche les mots "Hello Gary".

Linux exécuter un script de base avec des paramètres

La première ligne contient la ligne #!/bin/bash qui est utilisée pour identifier le fichier en tant que script bash.

La deuxième ligne utilise l'instruction echo pour faire écho au mot hello, puis il y a l'étrange notation $@. (à propos de la commande echo)

Le $@ se développe pour afficher chaque paramètre qui a été entré avec le nom du script. Donc, si vous avez tapé "sh greetme.sh tim", les mots "hello tim" s'afficheraient. Si vous avez tapé "greetme.sh tim smith", les mots "hello tim smith" s'afficheraient.

Utilisation des commandes d'écho

Il peut être intéressant pour le script greetme.sh de simplement dire bonjour en utilisant uniquement le prénom. Personne ne dit "Bonjour Gary Newell" lorsqu'il rencontre quelqu'un, mais il se peut qu'il lui dise "Bonjour Gary".

Modifions le script pour qu'il utilise uniquement le premier paramètre. Ouvrez le script greetme.sh dans nano en tapant ce qui suit:

nano salueme.sh

Modifiez le script pour qu'il se lise comme suit:

#!/bin/bash
echo "bonjour $1"

Enregistrez le script en appuyant sur CTRL et ô puis quittez en appuyant sur CTRL et X.

Script Linux Bash avec paramètre individuel

Exécutez le script comme indiqué ci-dessous (remplacez le nom par le vôtre):

sh salueme.sh gary newell

Lorsque vous exécutez le script, il dira simplement "Bonjour Gary" (ou, espérons-le, "bonjour" et quel que soit votre nom).

Linux exécuter un script Bash avec un seul paramètre

Le 1 après le symbole $ dit essentiellement à la commande echo, utilisez le premier paramètre. Si vous remplacez le $1 par $2, alors il affichera "hello newell" (ou quel que soit votre nom de famille). Vous pouvez également ajouter 2 $ après 1 $ pour obtenir le nom complet.

Script Linux Bash avec plusieurs paramètres

L'exécuter avec plus d'un paramètre les affichera aux endroits correspondant à l'ordre dans lequel ils ont été saisis.

Script d'exécution Linux avec plusieurs paramètres

Soit dit en passant, si vous remplaciez le $2 par $3 et exécutiez le script avec seulement 2 paramètres, la sortie serait simplement "Bonjour".

Comment afficher le nombre de paramètres utilisés

Il est possible d'afficher et de gérer le nombre de paramètres réellement entrés, et des tutoriels ultérieurs vous montreront comment utiliser le nombre de paramètres à des fins de validation.

Pour afficher le nombre de paramètres saisis, ouvrez le script greetme.sh (nano greetme.sh) et modifiez le texte comme suit:

#!/bin/bash
echo "vous avez entré $# noms"
echo "bonjour $@"

presse CTRL et ô pour enregistrer le script et CTRL et X pour quitter nano.

Paramètres de nombre de scripts Linux Bash

Le $# sur la 2ème ligne affiche le nombre de paramètres saisis.

Jusqu'à présent, tout cela a été nouveau mais pas très utile. Qui a besoin d'un script qui affiche simplement « bonjour »?

Paramètres de comptage de scripts bash d'exécution Linux

Écho des déclarations vs. Paramètres d'entrée

L'utilisation réelle des instructions echo est de fournir une sortie détaillée et significative à l'utilisateur. Si vous pouvez imaginer que vous voulez faire quelque chose de compliqué qui implique de sérieux calculs et la manipulation de fichiers/dossiers, il serait utile d'afficher à l'utilisateur ce qui se passe à chaque étape du manière.

En revanche, les paramètres d'entrée rendent votre script interactif. Sans paramètres d'entrée, vous auriez besoin de dizaines de scripts faisant tous des choses très similaires mais avec des noms légèrement différents.

Avec tout cela à l'esprit, il existe d'autres paramètres d'entrée utiles que c'est une bonne idée de connaître et je les inclurai tous dans un extrait de code.

Ouvrez votre script greetme.sh et modifiez-le comme suit:

#!/bin/bash
echo "Nom du fichier: 0 $"
echo "ID de processus: $$"
écho ""
echo "vous avez entré $# noms "
echo "bonjour $@"

presse CTRL et ô pour enregistrer le fichier et CTRL et X pour quitter.

Informations supplémentaires sur le script Linux Bash

Maintenant, exécutez le script (remplacez par votre nom).

sh saluemoi.sh 

Cette fois, le script affiche les éléments suivants:

Nom de fichier: greetme.sh
ID de processus: 18595

vous avez entré 2 noms
bonjour gary newell
Script d'exécution de Linux Bash avec des informations supplémentaires

Le $0 sur la première ligne du script affiche le nom du script que vous exécutez. Notez qu'il s'agit du dollar zéro et non du dollar o.

Le $$ sur la deuxième ligne affiche l'ID de processus du script que vous exécutez. Pourquoi est-ce utile? Si vous exécutez un script au premier plan, vous pouvez l'annuler en appuyant simplement sur CTRL et C. Si vous avez exécuté le script en arrière-plan et qu'il a commencé à boucler et à faire la même chose encore et encore ou à endommager votre système, vous devrez le tuer.

Pour tuer un script exécuté en arrière-plan, vous avez besoin de l'ID de processus du script. Ne serait-il pas bon que le script donne l'identifiant du processus dans le cadre de sa sortie? (à propos des commandes ps et kill)

Envelopper...

Enfin, avant de terminer avec ce sujet, il est important de discuter de la destination de la sortie. Chaque fois que le script s'est exécuté jusqu'à présent, la sortie a été affichée à l'écran.

Il est assez courant que la sortie du script soit écrite dans un fichier de sortie. Pour ce faire, exécutez votre script comme suit:

sh salueme.sh gary > salutme.log

Le symbole > dans la commande ci-dessus affiche le texte "hello gary" dans un fichier appelé greetme.log.

Chaque fois que vous exécutez le script avec le symbole >, il écrase le contenu du fichier de sortie. Si vous préférez ajouter au fichier, remplacez le > par >>.

Vous devriez maintenant être en mesure d'écrire du texte à l'écran et d'accepter les paramètres d'entrée.