Introduction aux scripts shell

  1. Qu'est-ce que c'est un shell ?
  2. Comment je peux savoir quel est le shell que j'utilise ?
  3. Qu'est-ce que c'est un script ?
  4. Exemple de script
  5. A quoi sert d'écrire des scripts ?
  6. Quel shell est recommandé pour écrire des scripts ?
  7. Les pas nécessaires pour exécuter les scripts
  8. Exécution des scripts
  9. Pourquoi mon script ne s'exécute pas ?
  10. Je sais qu'il faut toujours commenter le code. Comment commenter un script ?
  11. Variables
  12. Passer des arguments aux scripts
  13. Entrées/sorties
  14. Commandes shell (if, case, while, for)
  15. Je n'arrive pas à mettre une condition dans le if
  16. Fonctions
  17. Comment écrire des scripts à la philosophie Unix ?
  18. Questions Posées Fréquemment et divers

Qu'est-ce que c'est un shell ?

Le shell c'est le programme que tout utilisateur d' Unix utilise, c'est celui qui prend les commandes de l'utilisateur et les passe (généralement) au système d'exploitation pour être exécutées. Il affiche pour cela un prompt, par exemple $.


Comment je peux savoir quel est le shell que j'utilise ?

echo $SHELL


Qu'est-ce que c'est un script ?

Un script c'est un programme qui peut être exécute par le shell lui-même, qui contient donc des commandes shell.


Exemple de script

Voici un script qui remplace une ligne par une autre (les deux passées en paramètre) dans un fichier:
#!/bin/sh
		if [ $# -ne 2 ]         # si le nombre de paramètres n'est pas 2
		then                    # affiche l'usage
		    echo Usage: $0 ligne1 ligne2 1>&2
		    echo Ce programme lit l'entrée standard, remplace ligne1 par 1>&2
		    echo ligne2 et écrit le résultat sur la sortie standard 1>&2
		    exit 1
		fi
		IFS="\n"                # la variable IFS (Internal Field Separator) est "ENTER"
		                        # (utilisée par la commande read)
		while read ligne        # met dans la variable ligne une ligne de l'entrée standard
		                        # tant qu'on n'est pas arrivé a la fin
		do
		    if [ $ligne = $1 ]  # si ligne est égale au premier paramètre
		    then
		        echo $2         # affiche le deuxième paramètre à sa place
		    else
		        echo $ligne     # sinon, il affiche la ligne
		    fi
		done
		exit 0                  # sortie normale (code de retour 0)
		
Pour l'utiliser, exécutez (par exemple) : script un deux <fichierEntrée>fichierSortie.


A quoi sert d'écrire des scripts ?

Si vous utilisez plusieurs fois une séquence de commandes shell, vous pouvez les mettre dans un script. Un script a aussi l'avantage d'être exécuté sur n'importe quelle machine Unix sans modification. Il n'a pas besoin d'être compilé ! Le seul outil nécessaire se trouve (généralement) sur toutes les machines Unix: le shell !


Quelle shell est recommandé pour écrire des scripts ?

Il est recomandable d'utiliser toujours sh (Bourne shell), car ce shell se trouve sûrement sur toutes les machines. Cette page Web explique seulement sh. S'il faut utiliser des facilités que sh ne fournit pas, vous pouvez utiliser bash, qui est le shell par defaut de GNU/Linux (et qui peut aussi exécuter tous les scripts sh). Pour utiliser un shell spécifique, voir exécution des scripts.

Shells compatibles a sh : bash, ksh

Shells incompatibles a sh : csh, tcsh


Les pas nécessaires pour exécuter les scripts

  1. Vous écrivez le script dans un éditeur de textes (n'oubliez pas de spécifier le shell sur la première ligne, voir exécution des scripts)
  2. (optionnel) Vous mettez le script dans un répertoire qui se trouve dans $PATH
  3. Vous changez le type du fichier en le rendant exécutable : chmod a+x script
  4. Vous pouvez l'exécuter en tapant : script (ou le path s'il ne se trouve pas dans $PATH)

Exécution des scripts

Un script est interprété par le shell ligne par ligne jusqu'à la fin du script ou la rencontre de la commande exit. En cas d'erreur, l'exécution est arrêtée avec un message d'erreur. Le shell qui exécute le script est le shell qui apparaît dans la première ligne du script (si elle commence par #!), sinon c'est votre shell courant qui l'exécutera.


Pourquoi mon script ne s'exécute pas ?


Je sais qu'il faut toujours commenter le code. Comment commenter un script ?

Toute ligne qui commence par le caractère # introduit un commentaire que le shell ignorera. Un cas spécial est #! en début de la première ligne du script, voir exécution du script.


Variables

PATH, SHELL, HOME sont des exemples de variables. Vous pouvez créer des variables dans le script, mais elles existerons seulement dans le script. Pour lire une variable, vous devez lui préfixer $:

MESSAGE=coucou

echo $MESSAGE


Passer des arguments aux scripts

Vous pouvez lire les arguments avec les variables $i, ou i est le numéro de l'argument (i>=1). $0 représente le nom du fichier script. Pour savoir le nombre d'arguments, utilisez $#. Pour un exemple d'utilisation, voir exemple de script.


Entrées/sorties

Par défaut, tout programme (script ou non) lit du clavier est écrit sur l'écran. A chaque programme sont associées une entrée standard, une sortie standard et une erreur standard. Cela peut être changé avec :

> fichier - spécifie que la sortie standard n'est plus l'écran, mais le fichier spécifié

< fichier - spécifie que l'entrée standard n'est plus le clavier, mais le fichier spécifié

2> fichier - spécifie que l'erreur standard n'est plus l'écran, mais le fichier spécifié

2>&1 - spécifie que l'erreur standard devient la même que la sortie standard

Exemple :

programme <donneés >resultats 2>erreur

Pour lire une ligne (un mot) de l'entrée standard, utilisez la commande read. Pour écrire une ligne à la sortie standard ou à l'erreur standard, utilisez echo. Exemple :

		read lecture # lit une ligne (un mot) et la met dans la variable lecture
		echo Lecture de la chaîne $lecture 1>&2     # sur la sortie standard
		echo Lecture de la chaîne $lecture 2>&1     # sur l'erreur standard
		

Commandes shell (if, case, while, for)

Sans les constructions clasiques un script serait inutile.

Je n'arrive pas à mettre une condition dans le if

Vérifiez bien qu'il y a des espaces autour des crochets.

Exemples (voir le manuel de test si vous avez encore des problèmes) :


Functions

Exemple de création et d'utilisation d'une fonction :
		fonct()
		{
			    echo Je suis appelé avec $1
		}
		fonct 4         # affiche 4
		fonct coucou    # affiche coucou
		

Comment écrire des scripts à la philosophie Unix ?

Un bon script doit remplir les conditions suivantes :


Questions Posées Fréquemment et divers

Ecrit par Eugen Dedu
Dernière modification : le 9 juin 1999