dernière modification : 2025

Script shell

Un shell script est un fichier contenant une suite de commandes (une par ligne). Par exemple :

fichier mon_script
#!/bin/bash

# ce script affiche 2 variables et le répertoire courant

echo "mon login est $USER"
echo "mon homedir est $HOME"
echo -n "je suis actuellement dans le répertoire " # l'option -n supprime le retour à la ligne
pwd

La première ligne, qui ressemble à un commentaire, indique que ce script doit être interprété par /bin/bash. Le reste n’est rien d’autre que les commandes que l’on aurait pu saisir au clavier.

Pour que ce script soit exécutable, il faut le doter de l’attribut x :

$ chmod +x mon_script

On peut alors l’exécuter par :

$ ./mon_script

1. read

read var attend une frappe au clavier, récupère ce qui a été frappé et le stocke dans la variable var. Exemple :

fichier quiestu
#!/bin/bash

echo -n "quel est ton nom ? "
read nom
echo -n "quel est ton prenom ? "
read prenom

echo -n "Nous sommes "
date +%A
date +"il est %H:%M"
echo "$prenom $nom travaille actuellement sur la machine `hostname` !"

alors l’exécution donne :

$ ./quiestu
quel est ton nom ?
Ritchie
quel est ton prenom ?
Dennis
Nous sommes mercredi
il est 20:18
Dennis Ritchie travaille actuellement sur la machine PDP-10 !

2. Arguments

Un script peut récupérer ses arguments via les variables $1, $2, $3, etc. Exemple, soit le script :

fichier test
#!/bin/bash

echo $3, $2, $1

alors son exécution donne par exemple :

$ ./test un deux trois quatre
trois, deux, un

$*, quant à lui, récupère tous les arguments :

fichier test2
#!/bin/bash

echo "les arguments sont $*."

ce qui donne :

$ ./test2 un deux trois quatre
les arguments sont un deux trois quatre.

3. Instruction conditionnelle

Il s’agit d’exécuter une instruction sous certaines conditions. Dans l’exemple ci-dessous, le message envoyé dépend de l’utilisateur courant :

#!/bin/bash

if [ $USER == jaclin ]
then
  echo "Salut $USER !"
else
  echo "tu n'es pas celui que j'attendais :-( "
fi

Autre exemple, le script ci-dessous crée un répertoire archive s’il n’existe pas déjà :

fichier archive
#!/bin/bash

dossier=archive

if [ -e $dossier ]
then
  echo "$dossier existe, on ne touche à rien"
else
  mkdir $dossier
  echo "création du répertoire $dossier"
fi
ls -ld $dossier

ce qui donne :

$ ./archive
création du répertoire archive
drwxr-xr-x 2 jaclin jaclin 40 20 févr. 19:40 archive/

$ ./archive
archive existe, on ne touche à rien
drwxr-xr-x 2 jaclin jaclin 40 20 févr. 19:40 archive/

Autre exemple, le script ci-dessous affiche un message d’erreur si on l’appelle sans argument :

fichier mon_script
#!/bin/bash

if [ "$1" == "" ]
then
  echo "erreur, argument manquant"
else
  echo "l'argument vaut : $1"
fi

ce qui donne :

$ ./mon_script
erreur, argument manquant

$ ./mon_script mon_argument
l'argument vaut : mon_argument

4. Instruction itérative

Il s’agit d’exécuter une instruction de façon répétitive. Par exemple :

#!/bin/bash

for couleur in coeur pique trefle carreau
do
  echo $couleur
done

donne :

coeur
pique
trefle
carreau

Autre exemple :

#!/bin/bash

for i in {1..9}
do
  echo -n "$i "
done

ce qui donne :

1 2 3 4 5 6 7 8 9

Autre exemple :

fichier les_args
#!/bin/bash

for f in $*
do
  echo "arg = $f"
done

Ce script parcours tous les arguments fournis, ce qui donne :

$ ./les_args un deux trois
arg = un
arg = deux
arg = trois

et aussi :

$ ./les_args *
arg = Bureau
arg = Documents
arg = Images
arg = Modèles
arg = Musique
arg = Public
arg = Téléchargements
arg = Vidéos