Vous êtes sur la page 1sur 22

MINISTERE DE LENSEIGNEMENT SUPERIEUR DE LA RECHERCHE SCIENTIFIQUE ET DE LA TECHNOLOGIE -*-*-*-*-*-*ECOLE CENTRALE DU LOGICIEL LIBRE ET DE TELECOMMUNICATIONS (EC2LT)

REPUBLIQUE DU SENEGAL -*-*-*-*-*-*-*-*-*-*-*-*Un Peuple Un But Une Foi

INITIATION A LA PROGRAMMATION SHELL

Prsente par : ALLIER HOEGUESTEN QUENTINY, tudiant en Master1 Tlcoms et Rseaux l'EC2LT

11/01/11

Table des matires A. Lenvironnement bash..............................................................3 a) Les variables en bash..................................................... 3 B) Les fichiers de configuration...................................................4 a) La famille bashrc ............................................................5 C. Les scripts..................................................................................5 a) Script shell.......................................................................5 D) Passage de paramtres un script .........................................6 a) Les expressions logiques ................................................8 E. Les boucles ................................................................................8 a) Test if................................................................................8 b) Test case.........................................................................10 F. Les paramtres dentre dun script .................................11 G. Calculs ...................................................................................12 H.QUELQUES EXERCICES ...................................................14

11/01/11

Introduction
Le shell est un interprteur de commandes. Plus qu'une simple couche isolante entre le noyau du systme d'exploitation et l'utilisateur, il est aussi un langage de programmation puissant. Un programme shell, appel un script, est un outil facile utiliser pour construire des applications en << regroupant >> des appels systme, outils, utilitaires et binaires compils. Virtuellement, le rpertoire entier des commandes UNIX, des utilitaires et des outils sont disponible partir d'un script shell. Si ce n'tait pas suffisant, les commandes shell internes, telles que les constructions de tests et de boucles, donnent une puissance et une flexibilit supplmentaires aux scripts. Les scripts shell conviennent exceptionnellement bien pour les tches d'administration du systme et pour d'autres routines rptitives ne rclamant pas les particularits d'un langage de programme structur complet. Ce rsum permettra d' initier un apprenant la programmation shell. Ainsi avant de programmer quelques notions seront d' abord expliques savoir l' objectif, points importants, environnement... Objectifs Connatre l'intrepreteur de commandes Bash Connatre les bases de la programmation du shell. Matriser le principe des scripts shell pour comprendre les scripts systme. Savoir programmer des expressions logiques et arithmtiques ainsi que des boucles. Points importants Automatiser les tches administratives avec des scripts bash est indispensable et trs efficace. Une bonne utilisation de Linux est indissociable des scripts

Mots cls $*, $#, $0, $1, $2, $!, $$, $?, ~/.profile, ~/.bashrc, ~/.bash_logout, ~/.inputrc, /bin/bash, /etc/bash_logout, /etc/bashrc, /etc/inputrc, /etc/profile, bash, case, do, done, else, env, esac, export, expr, fi, for, if, PATH, select, set, test, then, unset, while

A. Lenvironnement bash

a) Les variables en bash

Pour affecter un contenu une variable, on utilise la commande = de la manire suivante :

11/01/11

Attention ne pas mettre despace avant et aprs le signe = !!! Pour faire rfrence au contenu dune variable, on la prfixe par le signe $ .

Pour effacer le contenu dune variable, on utilise la commande unset. : unset ma_variable

Le shell utilise des variables pour tenir compte des paramtres de configuration spcifiques des utilisateurs appels variables denvironnement. Les variables HOME, DISPLAY, PWD en font partie. echo $HOME /usr/home/quentiny Lors de lutilisation dun programme, le shell utilise la variable denvironnement PATH pour retrouver le chemin daccs ce programme. On peut afficher le contenu de cette variable par la commande echo : ! echo $PATH exemple:

Pour quune variable soit visible de tous les shells (donc de toutes les commandes lances depuis le shell courant), il faut lexporter par la commande export. export MANPATH=/usr/share/docs Lors du dmarrage dune session shell, la plupart des variables denvironnement sont initialises et exportes partir des diffrents fichiers de configuration, tels que les fichiers bashrc et profile. 4 11/01/11

La commande env permet de dmarrer un shell avec des variables denvironnement dja positionnes des valeurs donnes. Ces variables denvironnement ont une dure de vie gale celle du shell dmarr. Par exemple, pour lancer la commande variable denvironnement ma_variable la valeur env ma_variable=ma_valeur ma_commande la a dure de vie et la visibilit de ma_variable dexcution de ma_commande.

B) Les fichiers de configuration


Il y a plusieurs types de fichiers de configuration, ceux qui sont lus au moment de la connexion (login) et ceux qui sont lus chaque lancement dun shell. Les fichiers lus au moment de la connexion au systme sont : - ~/.bash_profile, commun tous les utilisateurs (sil existe) ; - ~/.bash_profile ou ventuellement ~/.bash_login ou ~/.profile/, spcifiques chaque utilisateur. Ils servent gnralement dcrire lenvironnement de lutilisateur. Les fichiers lus chaque lancement de shell sont : - /etc/bashrc commun tous les utilisateurs (sil existe); - ~/.bashrc spcifique chaque utilisateur.

a) La famille bashrc
Les fichiers de la famille bashrc sont lus lanc (ex commandes xterm ou bash). Ils servent gnralement stocker les alias et les fonctions utilises communement. On peut dmarrer le shell bash avec diffrentes options lui indiquant les fichiers de configuration lire au dmarrage : bash login : force la lecture des fichiers de connexion famille profile ; bash norc : pas de lecture des fichiers bashrc bash noprofile : pas de lecture des fichiers profile Attention, toutes les nouvelles sessions de bash, puisquelles sont des processus fils, hritent des variables dfinies dans les fichiers profile lors de la connexion. Le fichier /etc/bash_logout, sil est prsent, bash lu avant la deconnexion tous les utilisateurs. Le fichier ~/.bash_logout, sil est prsent, est excut la fin de la session bash spcifique un utilisateur. Le fichier inputrc permet de reconfigurer le clavier pour ajuster le fonctionnement des touches comme par exemple la touche deffacement arrire. Le fichier gnral est dans /etc/inputrc, les fichiers personnels dans ~/.inputrc. 5 11/01/11

C. Les scripts a) Script shell


Un script shell est une liste dinstructions contenues dans un fichier. Exemple: Ouvrant un terminal ensuite utilisant un diteur; en prcisant le nom de votre script; en voici un exemple de capture(dans mon cas, le nom de mon script est: bon)

ensuite suivant la formule en crivant votre script dans le fichier comme ceci(dans cet exemple un script permettant de saluer les amies: #!/bin/bash # Un petit script bon echo 'bonjour les amies'

Pour pouvoir excuter ces instructions, deux conditions doivent tre remplies : la premire ligne doit contenir #!/bin/bash (pour un shell script utilisant bash); le fichier doit tre excutable (ex en utilisant la commande chmod +x) et lisible (ex avec les permissions 755) [root@allier~] # chmod +x mon_script [root@allier~] # ./mon_script Si toutes ces conditions ne sont pas remplies, il est toujours possible de forcer lexcution du script avec la commande bash. [root@allier~] # bash mon_script voici le resultat concret:

11/01/11

D) Passage de paramtres un script


Les variables passes au script sur la ligne de commande sont accessibles dans le script par les variables rserves $1 pour le premier argument, $2 pour le deuxime et ainsi de suite. noter quil existe un oprateur shift qui dcale ces paramtres : la valeur contenue dans $2 passe dans $1, celle contenue dans $3 passe dans $2 et ainsi de suite. Cela permet essentiellement dutiliser plus de 9 paramtres en entre.

Dautres variables rserves sont accessibles lintrieur dun script : $0 : nom du script ; $* : liste des paramtres ;
$# : nombre de paramtres ; $$ : numro du processus en cours $? : valeur de retour de la dernire commande.

Exemple de script utilisant les paramtres #!/bin/bash # un autre script echo "mon script est $0" echo "il y a eu $# paramtres en entre" echo "le premier paramtre est $1" exemple de capture d cran:

le resultat donne ceci:

11/01/11

considrant maintenant deux paramtres tout en affichant le nombre de paramtre (s) et le nom du programme:

nous aurons au resultat:

a. Les expressions logiques


Les expressions logiques sont values laide de la fonction test, qui peut galement scrire [ ]. Le rsultat de l ' valuation est stock dans la variable $? qui contient : 0 si le rsultat est vrai; une valeur diffrent de 0 si le resultat est est faux. Par exemple Pour vrifier si le fichier /bin/bash existe : test -f /bin/bash ou [ -f /bin/bash ] Pour vrifier si le fichier ~/bin/mon_script est excutable : test -x ~/bin/mon_script ou [ -x /bin/mon_script ] Les expressions logiques peuvent tre combines par des oprateurs logiques && (ET/AND) et || (OU/OR). Il est galement possible d utiliser des connecteurs -a (ET/AND) et -o (OU/OR). Exemple: 8 Pour vrifier si les fichiers /etc/profile et /etc/bashrc existent : 11/01/11

test -f /etc/profile -a test -f /etc/bashrc ou test -f /etc/profile && test -f /etc/bashrc ou [ -f /etc/profile -a -f /etc/bashrc ]

Quelques options de la commande test :


-f : vrifie si le fichier est un fichier standard ; -d : vrifie si le fichier est un rpertoire ; -b : vrifie si le fichier est de type bloc ; -e : vrifie si le fichier existe indpendamment de son type ; -r : vrifie si le fichier est lisible ; -w : vrifie si le fichier est inscriptible ; -x : vrifie si le fichier est excutable. Dautres options seront donnes pour le traitement spcifique des nombres.

E. Les boucles a) Test if


Cette boucle sert pour les tests et branchements. Syntaxe (la partie else... est optionnelle) : if <condition> then <commande1> <commande2> ... else <commande1> <commande2> ... fi exemple:

resultat l cran:

11/01/11

#!/bin/sh if test -f monfichier.txt then echo " le fichier existe " fi

b) Test case Ce test permet de spcifier les commandes excuter valeurs prises par la variable passe en argument. Syntaxe : case <variable> in valeur1) commande1 ;; valeur2) commande2 ;; valeur3) commande3 ;; ... esac exemple:

10

11/01/11

resultat la sortie:

Cette boucle sert pour rpter les traitements un nombre de fois connu. Syntaxe: for <variable> in <liste> do commande1 commande2 commande3 ... done par exemple pour afficher les jours de la semaine : for jour in lundi mardi mercredi jeudi vendredi samedi dimanche do echo $jour done Cette boucle sert rpter les traitements un nombre de fois inconnu priori. Le test de continuit se fait au dbut de la boucle. La boucle continue tant que la condition est vraie. Syntaxe : while <condition> do <commande1> <commande2> ... done Pour faire le test de lecture dune valeur jusqu ce que lutilisateur entre la valeur 1 : #!/bin/sh i=0 while [ $i -ne "1" ] do read i done 11

b) Boucle for

d) Boucles while

11/01/11

Il existe une autre boucle, qui utilise le mot cl until la place de while. Elle diffre dans le traitement de la condition : la boucle est excute jusqu ce que la condition soit vraie. Le test est donc effectu en fin de boucle et la boucle est toujours excute au moins une fois.

F. Les paramtres dentre dun script


La lecture dune valeur peut se faire par le passage de paramtres sur la ligne de commande (cf. prcdemment lutilisation des variables $1, $2, etc.) ou en lisant une entre au clavier depuis le script avec la commande read. Pour lire le nom dune personne dans la variable nom et afficher son contenu : #!/bin/sh echo 'Entrez votre nom' read nom Lentre au clavier lue avec la commande read peut ensuite traiter avec la commande case vue prcdemment. #!/bin/sh echo ''entrez votre choix'' 1) echo " menu un ";; 2) echo " menu deux ";; 3) echo " menu trois "; esac

G. Calculs
Il est possible de comparer des nombres en utilisant la commande test, vue prcdemment, avec les options suivantes : -lt pour infrieur (<) ; -gt pour suprieur (>) ; -le pour infrieur ou gal (<=) ; -ge pour suprieur ou gal (>=) ; -eq pour gal (=) ; -ne pour diffrent de (!=). Pour tester le nombre de paramtres en entre : exemple:

12

11/01/11

on obtiendra au resultat:

La commande expr permet deffectuer les quatre oprations arithmtiques de base, avec les oprateurs suivants : + pour laddition ; - pour la soustraction ; \* pour la multiplication ; / pour la division. 13 11/01/11

Par exemple: la commande expr 1 + 2 renvoie 3 .

H) QUELQUES EXERCICES
Quelques scripts shell 1- Un programme qui lit un entier positif n et qui fait la somme de 1 n.

Une fois lanc le programme entrez un nombre positif. Voici le resultation:

2-Un programme qui permet de donner un nombre positif et de l afficher.

14

11/01/11

voici le resultat:

3- Un programme qui compte le nombre de fichier dans un dossier et qui donne le nombre de fichiers ordinaires et de dossiers.

15

11/01/11

Voici le resultat aprs avoir lanc le script vous pouvez aussi donner un argument(ex un repertoire, un dossier).

4-Un programme permettant de rcuprer tous les utilisateurs de votre machine et de rediriger dans un fichier, le fichier est prciser.

16

11/01/11

On aura au resultat

5-a- puis on va recrer ces utilisateurs recuprer sur une autre machine. 5-b- Bien avant cela testant d'abord localement. 5-b: on a

rsultat:

NB : les utilisateurs rcupers sont dja cr sur votre machine cette action provoquera les changements
des mots de passe de vos utilisateurs ainsi si vous voulez tester crez un fichier avec d' autres utilisateurs.

5.a: alors voici le script permettant de recrer ces utilisateurs rcupres (exo4) sur une autre machine distante.(en utilisant l'outil expect installer) 17 NB: le fichier ncessite le droit d'excution (commande: chmod a+x [nomscript] et

prciser l adresse du destinataire et son mot de passe dans le script. Ici l' adresse est 192.168.1.51 et le mot de passe est passer.

le resultat nous donne ceci: la machine est :

18

11/01/11

6-Un programme permettant la gestion des utilisateurs (ajout, modification, supression)

19

11/01/11

aprs l'excution du programme il faut choisir 1 ou 2 ou 3 qui permet respectivement d' ajouter, supprimer, modifier et suivre les instructions du programme.

20

11/01/11

conclusion:
Aujourdhui, beaucoup d'equipements Telecoms peuvent s'interfacer avec les systmes UNIX, il est important pour un tudiant en Tlcoms de maitriser la programmation Shell pour pouvoir automatiser certaines taches , surveiller et exploiter des donnes de ces equipements. C'est pourquoi, nous avons ecrit cet article pour permettre tout tudiant dans le domaine de TIC de finir par maitriser cette pratique. Car l'essentiel n'est pas de tout savoir necessairement ; mais d'etre au courant, et la volont aidant, on finit par tout maitraiser. Nous avons droul l'algo classique d'apprentissage d'un langage de programmation : entre-sortie, variables, intructions conditionnelles, boucles. Le prochain article que je vous propose traitera de la gestion des sous-programmes, des fichiers et de l'intgration des programmes shell pour la gestion des tlphones IP Cisco serie 79XX.

22

11/01/11