Initiation au shell script & Bash

Introduction :
A qui s'adresse cet article ?
Cet article s'adresse aux débutants qui n'ont aucune notions en scripting Bash, il s'agit d'une initiation, comme l'indique le titre, avec exercices d'entrainement tout à la fin. Pour les plus expérimentés ou pour ceux qui ont terminé ce petit tuto, je vous recommande fortement le Advanced Bash Scripting guide (ce qui signifie "Guide avancé d'écriture des scripts Bash") , qui existe également en version française. N'hésitez pas à laisser vos commentaires à noter cet article tout à la fin, cependant, je vous demanderez de ne pas demander de l'aide par le biais des commentaires : la catégorie Linux & Bash du forum est en partie faite pour ça
.
Enfin, je vous propose également une liste des tutoriels gratuit du net sur l'apprentissage du Bash : rendez-vous ici.
Les shells et les script, c'est quoi ?
- Les Shells sont des interfaces qui servent à communiquer avec le système, elles sont le plus généralement présents dans les système de type Unix. Pour les systèmes Unix, il s'agit d'un interpréteur de commande en mode texte.- Les script sont des programmes en langages interprétés : ce sont des langages qui sont convertit en instructions directement exécutables par la machine au moment de son exécution. Ces langages sont ici des langages de script : il s'agit de langages de programmation qui permet de manipuler les fonctionnalités du système. Le langage de script le plus utilisé sous Linux est le Bash, il permet d'automatiser vos taches, et c'est celui que nous utiliserons dans l'article.
Le bash, c'est quoi ?
"Bash" signifie "Bourne-Again shell", ce qui est un jeu de mot avec le "Bourne shell" qui est le shell original d'Unix (il y a eu ensuite différents shells) et "born again" qui signifie "né de nouveau" ou encore "réincarné". Le Bourne-Aigain Shell (bash) est le shell du projet GNU basé sur le Bourne Shell (sh), mais lui apportant de nombreuses améliorations provenant d'autres types de shells, notamment du Korn Shell (ksh) et du C shell (csh). Vous pouvez d'ailleurs vérifier si ces shells sont disponnibles dans le répertoire /bin et les installer ci-besoin puis les appeller en console (par défaut c'est bash qui fonctionne dans un terminal sous Linux).De quoi ai-je besoin pour programmer en Bash ?
Pour développer en Bash, l'utilisation des éditeurs de texte en console tel que Vim ou Emacs est recommandable, je vous renvoie à cet article. Il est aussi recommandé de connaître un minimum de commandes Unix, je vous recommande fortement d'aller visiter au préalable, la liste des commandes Unix couremment utilisées. Vous pouvez également utiliser Idev (voir ici pour l'installation), qui permet de coder en Bash et autres langages de script mais qui permet aussi d'afficher un tutoriel, similaire à celui-ci, en console.I - Création d'un script sous Linux
Votre script est tout simplement un fichier texte dans lequel vous écrirait les commandes (en fait c'est un peu plus complexe, vous verrez plus tard) que vous voulez exécuter rapidement, ce fichier doit contenir comme première ligne :
Code : Bash
#!/bin/bashou plus généralement :Code : Bash
#!/bin/sh
Dans le cas ci-dessus, on fait appel au shell sh et non au bash, c'est parfois préférable pour que votre script soit standard et qu'il fonctionne ainsi sur toutes les plateformes de type Unix.Faites ensuite chmod +x NomDuScript en console afin de donner des droits d'exécution en console à ce fichier ("NomDuScript" étant le nom de votre fichier, déplacez le fichier sur le terminal pour le connaître, si le script est dans le repertoire courrant, son chemin devrait ressembler à ./NomDuScript) ...
Exemple : On va prendre l'exemple des commandes echo, man, read et sleep (voir leur utilisations dans la liste)
Voici le script que cela devrait donner :
Code : Bash
#!/bin/bash(1) Ici echo affichera la ligne "La page du man va s'ouvrir"
# ceci est commentaire
echo "La page du man va s'ouvrir ..." #(1)
read # (2)
man man # (3)
sleep 2 # (4)
(2) read marque une pause jusqu'à ce que l'on appuie sur une touche
(3) man man ouvre une page de manuel sur le manuel en console
(4) sleep 2 marquera deux secondes de pause
Vous faite ensuite chmod +x NomDuScript, est vous pourez lancer ce scrpit (cible) dans un terminal : celui-ci ouvriras la page du man sur le man

Cette commande est utile pour avoir le temps de lire les messages d'erreurs si jamais la commande précédente ne s'exécute pas correctement ... Par exemple, imaginez que ce script serve à lancer un exécutable, mais que vous ayez déplacé cet exécutable, cette commande vous permettrait d'avoir le temps de lire le message d'erreur avant que le script ne se ferme. Vous auriez aussi pu mettre read à la place, ainsi, le script ne se fermerait pas avant que vous n'appuyez sur une touche ...
II - Les variables :
Les variables en Bash, ne servent pas qu'à désigner une valeur, elle peuvent désigner du texte, une commande Bash, etc. Déclarer une variable en Bash est très simple, il suffit de l'introduire comme ceci :
Code : Bash
#!/bin/bash
NomDeLaVariable=X #(1)
Attention : Il ne faut pas avoir d'espaces de part et d'autres du signe = !
Pour demander le contenu d'une variable, il faut utiliser read comme ceci :
Code : Bash
#!/bin/bashDans l'exécution, il faut saisir la valeur de la variable puis appuyer sur [ENTER].
read Variable # saisie de la valeur de la variable
Pour l'afficher, il suffit d'utiliser echo comme ceci :
Code : Bash
echo $NomDeLaVariable #(1)
(1) $ sert ici à afficher le contenue de la varible qui peut être une valeur, du texte (ne pas oublier les guillemets), une commande, etcCode : Bash
#!/bin/bash
Variable=CommandeBash # (1)
$Variable # (2)
(2) Ici $ permet ici d'exécuter la commande
Code : Bash
#!/bin/bash
echo "Quelle commande souhaitez vous exécuter ?"
read Commande # saisie de la commande
$Commande # exécution de la commande
read

Bon aller ... encore deux petits autres :
Code : Bashet
#!/bin/bash
Texte="La man page du man va s'ouvrir ..."
echo $Texte # affichage du texte
man man
read
#!/bin/bash
echo "écrivez le texte que vous souhaitez afficher"
read Texte # saisie du texte
echo "$Texte" # affichage du texte
read
III - Les tests (ou conditions) en Bash :
1) Le test if :
Le test if peut s'écrire de deux manière. Voici les deux syntaxes possibles :
Code : Bash
if test $Variable #condition
then # alors
# vos commandes ici
fi # fin du bloc if (fi = if à l'envers)
Code : Bash
if [ $Variable #condition ]
then # alors
# vos commandes ici
fi # fin du bloc if
Pour en savoir plus sur les fonctions de test, faites man test en console.
Attention aux espaces après le [ et avant le ].
Exemple :
On va prendre un exemple : Un script qui vous demande si vous voulez afficher la man page du man avec 0 et 1 (1= oui, 0= non).
Code : Bash
#!/bin/bash
echo "Voulez-vous afficher la man page du man ?"
read Variable # saisie de la variable
if test $Variable -eq 1 # si Variable vaut 1
then # alors
man man
fi # fin du bloc if
read
Code : Bash
#!/bin/bash
echo "Voulez-vous afficher la man page du man ?"
read Variable # saisie de la variable
if [ $Variable -eq 0 ] # si Variable vaut 1
then # alors
man gcc
fi # fin du bloc if
read
2) Le test case :
Le test case est analogue au switch en C, il permet d'éviter une longue et fastidieuse succession de blocs if dans certains cas. Voici la syntaxe d'un test case.
Code : Bash
read Variable # saisie de la valeur de la variable
case $Variable in
Valeur1) # (1)
#Commande 1 ;;
Valeur2) # (2)
#Commande 2 ;;
# ...
*) # (3)
# Commande qui s'éxécute par défaut ;;
esac # fin du bloc case
(1) si l'utilisateur choisi la valeur 1, alorsla commande 1 s'exécute
(2) si l'utilisateur choisi la valeur 2, alorsla commande 2 s'exécute
(3) si l'utilisateur choisi autre chose, la commande par défaut s'exécute
N'oubliez pas le esac (case à l'envers) pour marquer la fin du bloc case.
Un exemple comme d'habitude : on va reprendre le menu Mc Do du sdz
étant l'exemple d'utilisation de la condition switch en C. C'est partit :
Code : Bash
#!/bin/bash
echo "=== Menu ==="
echo "1. Royal Cheese"
echo "2. Mc Deluxe"
echo "3. Filet-o-Fish"
echo "4. Big Mac"
echo "Votre choix ?"
read choixMenu # saisie de la valeur de la variable
case $choixMenu in
1)
echo "Vous avez choisi le Royal Cheese. Bon choix !" ;;
2)
echo "Vous avez choisi le Mc Deluxe. Berk, trop de sauce..." ;;
3)
echo "Hum pas mal mais c'est bien petit :( " ;;
4)
echo "Vous avez choisi le Big Mac. Vous devez avoir tres faim !";;
*)
echo "Vous n'avez pas rentre un nombre correct. Vous ne mangerez rien du tout !" ;;
esac # fin du bloc case
echo "Appuyez sur une touche pour continuer ..."
read
IV - Les boucles en Bash :
Les boucles permettent de répéter une ou plusieurs
opérations tant qu'une condition reste validée.
1) La boucle while :
Voilà comment on construit une boucle while :
Code : Bash
while [ #condition ]
do
# instructions à répéter
done
Et voici la deuxième syntaxe possible :
Code : Bash
while test #condition
do
# instructions à répéter
doneExemple :
Code : Bash
#!/bin/bashquitter=1
while [ $quitter != 0 ]
do
echo "Appuyez sur 0 pour quitter ..."read quitter
echo "vive le Bash !"
done
echo "bye !"
readvoici la deuxième manière d'écrire ce script :
Code : Bash
#!/bin/bashquitter=1
while test $quitter != 0 echo "Appuyez sur 0 pour quitter ..."
do
read quitter
echo "vive le Bash !"
done
echo "bye !"
read
Autre exemple : exemple inverse du précédant (on répète la phrase "vive le bash !"
tant qu'une variable vaut 0) :
Code : Bash
continuer=0
while test $continuer -eq 0
# ou -> while [$continuer -eq 0 ]
do
echo "Appuyez sur 0 pour répéter ..."
read quitter
echo "vive le Bash !"
done
echo "bye !"
read
2) La boucle for :
J'en vient directement à l'intérêt de la boucle for par rapport à la boucle while
à l'aide d'un exemple : on veut par exemple répeter la phrase "vive Linux"
tant que la valeur d'une variable est comprise entre 0 et 10 (exclus).
Code : Bash
#!/bin/sh
i=0
for i in `seq 0 10`
do
echo "vive Linux !"
read i
done
echo "bye !"
read
Et voilà pour la boucle for 
V - Les fonctions en Bash :
Les fonctions sont très simples à faire en Bash, elles permettent
de ne pas répéter plusieurs fois le même bloc. Il faut indiquer
clairement lorque vous déclarez une fonction. On enchaîne avec plusieurs
exemples
...
Un exemple bête :
Code : Bash
#!/bin/sh
function hello # déclaration de la fonction
{
echo "Salut $1 !"
#le $1 sert à insérer le contenu d'une variable,
celui de la variable qui suivra l'appel de la fonction
}
echo "Comment t'appelles tu ?"
read name
hello $name
read
L'exemple utile de la fonction pause :
Code : Bash
function pause # déclaration de la fonction
{
echo "Appuyez sur une touche pour continuer ..."
read
}
pause # appel de la fonction
Voici quelques exercices pour vous entrainer, si vous avez besoin d'aide,
rendez-vous dans la catégorie Linux & Bash du forum.
Exercices :
n°1 - Le mini IDE en C (niveau 1) :
Ce programme doit vous proposer (par y ou n) de créer (avec un éditeur
de texte en console) un fichier.c puis doit vous proposer de le compiler.
Il est nécessaire pour la réalisation cet exercice, d'avoir lu l'article jusqu'au
test if. Si vous ne connaissez pas commandes, n'hésitez pas à consulter la liste.
solution
Idée d'amélioration : faites en sorte avec une boucle, que le script
ne se ferme pas tant que l'utilisateur n'appuie pas sur q.
solution
n°2 - Le mini IDE en C (niveau 2) :
Il faut cette fois créer un menu qui propose à l'utilisateur de
créer un programme en C, en C++ ou de créer un script en Bash,
il est donc nécessaire pour faire cet exercice, d'avoir lu l'artcile
jusqu'au test case.
solution
Idées d'amélioration : insérez dans le menu, une option quitter
et utilisez une boucle qui répète le programme à partir du menu
jusqu'à ce que l'utilisateur quitte. Vous pouvez aussi insérez des
warnings dans la compilation du programme en C (voir cet article
pour en savoir plus).
solution
D'autres exercices sont à venir ...


Commentaires
ok site : linuxinfosastuces.blog4ever.com | le 01/03/2009 à 12:29:32N'hésitez pas à laisser vos commentaires ainsi qu'une note sur cet article. Vous pouvez aussi corriger d'éventuelles erreurs. Cependant pour l'aide à la réalisation des exercices veuillez vous rendre sur le forum adéquat. Merci d'avance. Comme vous l'avez peut être remarqué, l'article a été refait en raison d'un bug. Il avait donc été crée le 2008-12-30 et été consulté 590 fois (il faudra donc que vous ajoutiez 590 au nombre de consultation actuel).