Recherche de site Web

Comment créer des scripts Shell simples sous Linux


La création de scripts shell est l'une des compétences les plus essentielles que les utilisateurs de Linux devraient avoir à portée de main. Les scripts Shell jouent un rôle énorme dans l'automatisation des tâches répétitives qui, autrement, seraient fastidieuses à exécuter ligne par ligne.

Dans ce didacticiel, nous mettons en évidence certaines des opérations de base de script shell que tout utilisateur Linux devrait maîtriser.

1. Créez un script Shell simple

Un script shell est un fichier qui comprend du texte ASCII. Nous allons commencer par créer un simple script shell, et pour ce faire, nous utiliserons un éditeur de texte. Il existe un certain nombre d'éditeurs de texte, à la fois en ligne de commande et basés sur une interface graphique. Pour ce guide, nous utiliserons l'éditeur vim.

Nous allons commencer par créer un script simple qui affiche « Hello world » une fois exécuté.

vim hello.sh

Collez le contenu suivant dans le fichier et enregistrez.

#!/bin/bash
Print Hello world message
echo "Hello World!"

Passons en revue le script shell ligne par ligne.

  • La première ligne – #!/bin/bash – est connue sous le nom d'en-tête shebang. Il s'agit d'une construction spéciale qui indique quel programme sera utilisé pour interpréter le script. Dans ce cas, ce sera le shell bash indiqué par /bin/bash. Il existe d'autres langages de script tels que Python qui est noté #!/usr/bin/python3 et Perl dont l'en-tête shebang est noté #!/usr/bin/perl.
  • La deuxième ligne est un commentaire. Un commentaire est une instruction qui décrit ce que fait un script shell et ce qu'il n'est pas exécuté lors de l'exécution du script. Les commentaires sont toujours précédés du signe dièse #.
  • La dernière ligne est la commande qui imprime le message « Hello World » sur le terminal.

L'étape suivante consiste à rendre le script exécutable en attribuant une autorisation d'exécution à l'aide de la commande chmod comme indiqué.

chmod +x  hello.sh

Enfin, exécutez le script shell à l'aide de l'une des commandes :

bash hello.sh
OR
./hello.sh

2. Utilisation d'instructions conditionnelles pour exécuter du code

Comme d'autres langages de programmation, les instructions conditionnelles sont utilisées dans les scripts bash pour prendre des décisions, avec seulement une légère variation dans la syntaxe. Nous allons aborder les instructions conditionnelles if, if-else et elif.

Exemple d'instruction if uniquement

L'instruction if peut être utilisée pour tester une ou plusieurs conditions. Nous commencerons par l'utilisation fondamentale de l'instruction if pour tester une seule condition. L'instruction if est définie par les blocs if ... fi.

if command
then
  statement
fi

Jetons un coup d'œil au script shell ci-dessous.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Le script shell ci-dessus invite l'utilisateur à fournir un score qui est ensuite stocké dans une variable x. Si le score correspond à 70, le script renvoie la sortie « Bon travail ! ». L'opérateur de comparaison == permet de tester si le score saisi, qui est stocké dans la variable x, est équivalent à 100.

Les autres opérateurs de comparaison que vous pouvez utiliser incluent :

  • -eq – Égal à
  • -ne – Différent de
  • -lt – Moins de
  • -le – Inférieur ou égal à
  • -lt – Moins de
  • -ge – Supérieur ou égal à

Par exemple, le bloc if-statement ci-dessous affiche « Work Harder » si le score d'entrée est inférieur à 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Exemple d'une instruction if-else

Pour les situations où vous avez 2 résultats possibles : – que ce soit ceci ou cela – l’instruction if-else est utile.

if command
then
  statement1
else
  statement2
fi

Le script ci-dessous lit le score d'entrée et vérifie s'il est supérieur ou égal à 70.

Si le score est supérieur ou égal à 70, vous recevez un message « Excellent travail, vous avez réussi ! ». Cependant, si le score tombe en dessous de 70, le résultat « Vous avez échoué » sera imprimé.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Exemple d'instruction if-elif-else

Dans les scénarios où il existe plusieurs conditions et différents résultats, l'instruction if-elif-else est utilisée. Cette instruction prend le format suivant.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Par exemple, nous avons un script pour une loterie qui vérifie si le numéro saisi est 90, 60 ou 30.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. Utilisation de l'instruction If avec la logique AND

Vous pouvez utiliser l'instruction if avec l'opérateur logique AND pour exécuter une tâche si deux conditions sont remplies. L'opérateur && est utilisé pour désigner la logique ET.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. Utilisation de l'instruction If avec la logique OR

Lors de l'utilisation de la logique OU, représentée par le symbole ||, l'une ou l'autre des conditions doit être satisfaite par le script pour donner les résultats attendus.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Utiliser des constructions en boucle

Les boucles Bash permettent aux utilisateurs d'effectuer une série de tâches jusqu'à ce qu'un certain résultat soit atteint. Cela s’avère pratique pour effectuer des tâches répétitives. Dans cette section, nous jetterons un coup d’œil à certaines des boucles que vous trouverez également dans d’autres langages de programmation.

Boucle while

C’est l’une des boucles les plus faciles à utiliser. La syntaxe est assez simple :

while  <some test>
do
 commands
done

La boucle while ci-dessous répertorie tous les nombres de 1 à 10 lors de son exécution.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Discutons de la boucle while :

La variable compteur est initialisée à 1. Et tant que la variable est inférieure ou égale à 10, la valeur du compteur sera incrémentée jusqu'à ce que la condition soit satisfaite. La ligne echo $counter imprime tous les nombres de 1 à 10.

Pour la boucle

Comme la boucle while, une boucle for est utilisée pour exécuter du code de manière itérative. C'est à dire. répéter l'exécution du code autant de fois que possible défini par l'utilisateur.

La syntaxe est :

for var in 1 2 3 4 5 N
do
 command1
 command2
done

La boucle for ci-dessous parcourt de 1 à 10 et traite leurs valeurs à l'écran.

Une meilleure façon d'y parvenir est de définir une plage à l'aide des doubles accolades { } comme indiqué au lieu de saisir tous les nombres.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Paramètres de position Bash

Un paramètre de position est une variable spéciale qui est référencée dans le script lorsque des valeurs sont transmises sur le shell mais qui ne peuvent pas être attribuées. Les paramètres de position vont de $0 $1 $2 $3 …… à $9. Au-delà de la valeur $9, les paramètres doivent être placés entre accolades, par exemple $ {10}, $ {11} … et ainsi de suite.

Lors de l'exécution du script, le premier paramètre positionnel qui est $0 prend le nom du script shell. Le paramètre $1 prend la première variable passée sur le terminal, $2 prend la deuxième, $3 la troisième et ainsi de suite.

Créons un script test.sh comme indiqué.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Ensuite, exécutez le script et fournissez le prénom et le deuxième nom comme arguments :

bash test.sh James Kiarie

À partir du résultat, nous pouvons voir que la première variable imprimée est le nom du script shell, dans ce cas, test.sh. Par la suite, les noms sont imprimés correspondant aux paramètres de position définis dans le script shell.

Les paramètres de position sont utiles dans la mesure où ils vous aident à personnaliser les données saisies au lieu d'attribuer explicitement une valeur à une variable.

Codes de sortie de commande Shell

Commençons par répondre à une question simple : Qu'est-ce qu'un code de sortie ?

Chaque commande exécutée sur le shell par un utilisateur ou un script shell a un statut de sortie. Un état de sortie est un entier.

Un état de sortie de 0 implique que la commande s'est exécutée avec succès sans aucune erreur. Tout chiffre compris entre 1 et 255 indique que la commande a échoué ou ne s'est pas exécutée correctement.

Pour trouver l'état de sortie d'une commande, utilisez la variable Shell $?.

Un état de sortie de 1 indique une erreur générale ou toute erreur inadmissible telle que la modification de fichiers sans autorisations sudo.

Un état de sortie de 2 indique une utilisation incorrecte d’une commande ou d’une variable shell intégrée.

L'état de sortie 127 indique une commande illégale qui génère généralement l'erreur « commande introuvable ».

Traitement de la sortie des commandes Shell dans un script

Dans les scripts bash, vous pouvez stocker le résultat d'une commande dans une variable pour une utilisation ultérieure. Ceci est également appelé substitution de commande shell et peut être réalisé des manières suivantes.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Par exemple, vous pouvez stocker la commande date dans une variable appelée aujourd'hui et appeler le script shell pour révéler la date actuelle.

#!/bin/bash

today=$(date)

echo “Today is $today”

Prenons un autre exemple. Supposons que vous souhaitiez rechercher les utilisateurs de connexion valides sur votre système Linux. Comment procéderiez-vous ? Tout d'abord, la liste de tous les utilisateurs (utilisateurs système, processus et connexion) est stockée dans le fichier /etc/passwd.

Pour afficher le fichier, vous devez utiliser la commande cat. Cependant, pour affiner la connexion des utilisateurs, utilisez la commande grep pour rechercher les utilisateurs avec l'attribut /bin/bash et utilisez la commande cut -c 1-10 comme affiché pour afficher les 10 premiers caractères des noms.

Nous avons stocké la commande cat dans la variable login_users.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Ceci met fin à notre didacticiel sur la création de scripts shell simples. Nous espérons que vous avez trouvé cela utile.