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'ecrire des scripts ?
  6. Quelle shell est recommande pour ecrire des scripts ?
  7. Les pas necessaires pour executer les scripts
  8. Execution des scripts
  9. Pourquoi mon script ne s'execute pas ?
  10. Je sais qu'il faut toujours commenter le code. Comment commenter un script ?
  11. Variables
  12. Passer des arguments aux scripts
  13. Entrees/sorties
  14. Commandes shell (if, case, while, for)
  15. Je n'arrive pas a mettre une condition dans le if
  16. Functions
  17. Comment ecrire des scripts a la philosophie Unix ?
  18. Questions Posees Frequemment et divers

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

Le shell c'est le programme que tout utilisateur de Unix utilise, c'est celui qui prend les commandes de l'utilisateur et les passe (generalement) au systeme d'exploitation pour etre executees. 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 etre execute par le shell lui-meme, qui contient donc des commandes shell.

Exemple de script

Voici un script qui remplace une ligne par une autre (les deux passees en parametre) dans un fichier:
#!/bin/sh
if [ $# -ne 2 ] # si le nombre de parametres n'est pas 2
then # affiche l'usage
echo Usage: $0 ligne1 ligne2 1>&2
echo Ce programme lit l'entree standard, remplace ligne1 par 1>&2
echo ligne2 et ecrit le resultat sur la sortie standard 1>&2
exit 1
fi
IFS="\n" # la variable IFS (Internal Field Separator) est "ENTER"
# (utilisee par la commande read)
while read ligne # met dans la variable ligne une ligne de l'entree standard
# tant qu'on n'est pas arrive a la fin
do
if [ $ligne = $1 ] # si ligne est egal au premier parametre
then
echo $2 # affiche le deuxieme parametre a sa place
else
echo $ligne # sinon, il affiche la ligne
fi
done
exit 0 # sortie normale (code de retour 0)
Pour l'utiliser, executez (par exemple) : script un deux <fichEntree >fichSortie.

A quoi sert d'ecrire des scripts ?

Si vous utilisez plusieurs fois une sequence de commandes shell, vous pouvez les mettre dans un script. Un script a aussi l'avantage d'etre execute sur n'importe quelle machine Unix sans modification. Il n'a pas besoin d'etre compile ! Le seul outil necessaire se trouve (generalement) sur toutes les machines Unix: le shell !

Quelle shell est recommande pour ecrire des scripts ?

Il est recomandable d'utiliser toujours sh (Bourne shell), car ce shell se trouve surement sur toutes les machines. Cette page Web explique seulement sh. S'il faut utiliser des facilites que sh ne fournit pas, vous pouvez utiliser bash, qui est le shell par defaut de Linux (et qui peut aussi executer tous les scripts sh). Pour utiliser un shell specifique, voir execution des scripts.

Shells compatibles a sh : bash, ksh

Shells incompatibles a sh : csh, tcsh


Les pas necessaires pour executer les scripts

  1. Vous ecrivez le script dans un editeur de textes (n'oubliez pas de specifier le shell sur la premiere ligne, voir execution des scripts)
  2. (optionnel) Vous mettez le script dans un repertoire qui se trouve dans $PATH
  3. Vous changez le type du fichier en le rendant executable : chmod a+x script
  4. Vous pouvez l'executer en tapant : script (ou le path s'il ne se trouve pas dans $PATH)

Execution des scripts

Un script est interprete par le shell ligne par ligne jusqu'a la fin du script ou la rencontre de la commande exit. En cas d'erreur, l'execution est arretee avec un message d'erreur. Le shell qui execute le script est le shell qui apparait dans la premiere ligne du script (si elle commence par #!), sinon c'est votre shell courant qui l'executera.

Pourquoi mon script ne s'execute pas ?


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

Toute ligne qui commence par le caractere # introduit un commentaire que le shell ignorera. Un cas special est #! en debut de la premiere ligne du script, voir execution du script.

Variables

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

MESSAGE=coucou

echo $MESSAGE


Passer des arguments aux scripts

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

Entrees/sorties

Par defaut, tout programme (script ou non) lit du clavier est ecrit sur l'ecran. A chaque programme sont associees une entree standard, une sortie standard et une erreur standard. Cela peut etre change avec :

> fichier - specifie que la sortie standard n'est plus l'ecran, mais le fichier specifie

< fichier - specifie que l'entree standard n'est plus le clavier, mais le fichier specifie

2> fichier - specifie que l'erreur standard n'est plus l'ecran, mais le fichier specifie

2>&1 - specifie que l'erreur standard devient la meme que la sortie standard

Exemple :

programme <donnees >resultats 2>erreur

Pour lire une ligne (un mot) de l'entree standard, utilisez la commande read. Pour ecrire une ligne a la sortie standard ou a la erreur standard, utilisez echo. Exemple :

read lecture # lit une ligne (un mot) et la met dans la variable lecture
echo Lecture de la chaine $lecture 1>&2 # sur la sortie standard
echo Lecture de la chaine $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 a mettre une condition dans le if

Verifiez bien qu'il y a des espaces autour des crochets.

Exemples (voir le manuel de test si vous avez encore des problemes) :


Functions

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

Comment ecrire des scripts a la philosophie Unix ?

Un bon script doit remplir les conditions suivantes :

Questions Posees Frequemment et divers

Ecrit par Eugen Dedu
Derniere modification : le 9 juin 1999