Script shell
Un shell script est un fichier contenant une suite de commandes (une par ligne). Par exemple :
#!/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 :
#!/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 :
#!/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 :
#!/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à :
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 :
#!/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 :
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