Retrouvez cet article dans : Linux Pratique Hors série 8
Lorsque l'on utilise régulièrement la même suite de commandes, on se dit assez rapidement que ce serait tout de même plus simple de les regrouper ensemble sous une même commande et de les lancer simultanément une fois pour toutes : l'idée d'un script shell est née.
Un script, c'est un petit programme qu'on écrit dans un langage simple. Sous Linux, le plus basique est de se servir du langage de programmation par défaut installé sur toute machine : le shell (voir question/réponse correspondante). C'est un langage assez simple, mais qui permet tout de même de programmer des tâches assez compliquées (si l'on maîtrise suffisamment ses composantes...). Ici, on ne cherchera pas à apprendre les subtilités de la syntaxe du shell, mais simplement à regrouper une suite de commandes.
D'abord, il faut savoir qu'un script shell n'est ni plus ni moins qu'un fichier texte standard, dans lequel on doit indiquer en premier lieu le nom du langage de programmation à utiliser. Admettons que votre système GNU/Linux fonctionne avec bash, comme c'est le cas la plupart du temps. Pour le notifier dans le script, on va utiliser le sha bang (ou she bang), représenté par #! ; ces deux caractères permettent d'introduire le chemin vers le programme qui va interpréter les commandes du script (ici bash). La première ligne de mon_script.sh (donnez-lui cette extension pour vous rappeler immédiatement qu'il s'agit d'un script shell, mais ça n'est pas obligatoire) doit donc être :
#! /bin/bash
La deuxième étape est de rendre ce fichier texte exécutable. Pour cela, il suffit de modifier les droits d'accès sur le fichier grâce à la commande chmod :
~$ chmod 755 mon_script.sh
A partir de ce moment, dès que vous lancerez votre script, il pourra être exécuté. Attention, si vous saisissez uniquement le nom du script, voici ce qui va se passer :
~$ mon_script.sh bash: mon_script.sh: command not found ~$
En effet, par défaut l'exécution de scripts dans le répertoire courant est désactivée. Il est nécessaire de spécifier le chemin d'accès au script, chemin absolu ou relatif ; si le script se trouve dans le répertoire courant :
~$ ./mon_script.sh
Voici un petit exemple de script en guise de démonstration. Comme vous êtes prudent, vous faites des sauvegardes régulières de vos données : vous créez un répertoire BACKUP sur votre bureau, vous y copiez/collez les données à sauvegarder, vous compressez le tout, vous renommez le fichier pour lui ajouter la date du jour, vous supprimez le répertoire créé et ensuite vous utilisez votre programme de gravure préféré pour mettre votre archive à l'abri. L'essentiel de ces tâches peut être automatisé par un script comme le suivant :
#!/bin/bash mkdir BACKUP cp -r Desktop/Mon-boulot/BACKUP/ tar -czf backup`date +%Y%m%d`.tar.gz BACKUP rm -r BACKUP
Avant de terminer sur ce sujet, un petit conseil : il est possible de mettre dans votre script, en plus des commandes à exécuter, des commentaires, c'est-à -dire du texte qui n'est destiné qu'à la lecture par l'utilisateur. Pour différencier les lignes de commande des commentaires, on fait précéder ces derniers du signe #. Cela est assez utile pour se rappeler le rôle du script ou la spécificité de certaines parties du programme.
#!/bin/bash # Ceci est un script qui me permet # de sauvegarder mon boulot # à une date précise mkdir BACKUP cp -r Desktop/Mon-boulot/ BACKUP tar -czf backup`date +%Y%m%d`.tar.gz BACKUP rm -r BACKUP
Dans notre exemple très simple, cela peut paraître inutile : le nom du script, backup.sh, est assez clair et les commandes qu'il contient sont basiques et lisibles. Pourtant, imaginez que par la suite vous créez d'autres scripts de backup pour sauvegarder d'autres données... Vous allez vite être perdu pour savoir quel script fait quoi ! Cela peut donc être assez utile et devient indispensable lorsque vous vous lancerez dans la création de programmes plus complexes..
Retrouvez cet article dans : Linux Pratique Hors série 8

