Initiation aux scripts shell pour automatiser des tâches sur Linux

Écrit par Jean-Michel CHRISOSTOME. Publié dans Blog

Vous réalisez les mêmes tâches tous les jours ou de manière régulière (sauvegarder des fichiers ou une base de données, envoyer des emails de rappel ou d'alerte)? Savez vous que vous pouvez automatiser ces tâches? Les systèmes UNIX / Linux bien qu'austères en apparence, permettent d’exécuter des ensembles de tâches sous forme de script. Il s'agit de scripts shell, mais vous entendrez également parler de batch ou de traitement par lot. Dans cette série d'articles, je vais vous montrer combien il est simple de créer un script, de récupérer des arguments pour automatiser des tâches.

Automatiser des tâches c'est vous libérer du temps pour réaliser d'autres tâches plus valorisantes qui nécessitent la réflexion d'un humain.

Le shell n'est pas réellement un langage de programmation en soi (en tout cas pas comme le C ou le Perl). Il s'agit principalement de commandes qui sont appelées les unes à la suite des autres avec quelque structures de contrôles (pour ceux qui ne savent pas ce que ce c'est, je vous invite à lire mon article sur les structures de contrôle) qui permettent de traiter des conditions et des listes de données ou encore de récupérer des valeurs retournées par les commandes sous forme de code retour.

Choisir son terminal

Avant toute chose vous devez (si ce n'est pas déjà fait) utiliser un terminal pour accéder à l'interpréteur de commande. Pour ce faire, soit vous travaillez sur Linux dans quel cas la question ne se pose pas car il y a abondance de choix (xterm, gnome-terminal, konsole, etc...) soit vous êtes sur Windows et si vous n'avez pas d'émulateur de terminal je vous propose de télécharger et d'installer le logiciel libre Putty disponible sur http://www.putty.org/.

Choisir son éditeur de texte

Pour créer un script, vous devez d'abord utiliser un éditeur de texte. Attention! Pas Word ni Libre Office Writer sans quoi les scripts ne fonctionneront pas. Il faut un éditeur de texte pur. En fonction du système sur lequel vous travaillez voici des nom d'éditeurs qui peuvent faire l'affaire:

  • Notepad
  • Notepad++
  • Edit
  • Gedit
  • Kate
  • Vi
  • Vim
  • Emacs
  • nano

Notre premier script

Maintenant que nous avons notre émulateur de terminal et que nous sommes équipés d'un éditeur de texte, nous allons pouvoir commencer le travail. La première ligne à saisir dans un script qui sera exécuté en ligne de commande est le chemin et le nom de l'interpréteur de commande.

Une fois encore, en fonction du système sur lequel vous travaillez, il existe plusieurs interpréteurs qui possèdent chacun une racine commune (le shell ou sh) puis des spécificités. En voici quelques uns

  • bash (bash sera l'interpréteur utilisé)
  • csh
  • dash
  • ksh
  • sh
  • zsh

La première ligne d'un script doit commencer par un dièse # suivi d'un point d'exclamation ! puis l'interpréteur de commande choisi avec le chemin d'accès absolu soit dans notre cas:

#!/bin/bash
 
terminal vim

A partir de maintenant l'interpréteur va tenter d’exécuter toutes les lignes qui vont suivre à l'exception de celles qui débutent par un dièse # qui seront considérées comme des commentaires.

Pour afficher quelque chose (du texte ou une variable) vous devrez utiliser la commande echo. Par exemple pour afficher les arguments du script on va taper les lignes qui suivent:

#!/bin/bash
 
# Je suis un commentaire, donc je ne serai pas interprété
# Les commentaires servent à aider les personnes qui lisent le script
 
# L'argument 0 correspond au nom du script, cet argument s'appelle avec la variable $0
echo "Nom du script: $0"
 
# L'argument 1 correspond au premier argument passé au script, il s'appelle avec la variable $1
echo "Premier argument: $1"
 
# L'argument 2 correspond au premier argument passé au script, il s'appelle avec la variable $2 (etc pour tous les autres arguments)
echo "Second argument: $2"
 

Une fois que vous avez enregistré votre script, vous devez le rendre exécutable. Il s'agit d'une simple formalité sur UNIX qui indique au système que votre script doit être exécuté lorsqu'il est appelé dans un terminal. Cette action est réalisée avec la commande UNIX chmod.

chmod 755
 

Maintenant que nous avons rendu notre script exécutable, nous allons l'appeler comme suit (nous avons nommé notre script script.sh):

./script.sh arg_1 arg_2
Nom du script:  ./script.sh
Premier argument:  arg_1
Second argument:  arg_2
 
terminal shell

le ./ avant le nom du script précise que nous appelons ce dernier depuis le dossier dans lequel nous nous trouvons (dossier courant, variable $PWD, commande pwd).

Dans les prochains articles nous irons plus loin dans les mécanismes et fonctionnalités des scripts afin de réaliser des actions précises, de récolter les résultats (codes retour) puis de les traiter de manière conditionnelle.