[PDF] Guide avancé décriture des scripts Bash: Une exploration en





Previous PDF Next PDF



Cours Shell Unix Commandes & Programmation

Cours Shell Unix Apparition des premiers clones Unix comme Linux et FreeBSD. ... Par défaut avec nohup (sous sh bash et ksh) les canaux de sortie et ...



Programmation système - Shell et Commandes UNIX

Shell Script shell Fichiers d'initialisation. Programmation syst`eme bash. Version améliorée de sh et csh. Fourni le plus souvent avec Linux. Zero Shell.



Scripts shell

Plan du cours. 1. Le shell : l'image générale. 2. Scripts shell : les bases bash : Bourne Again Shell. ? le shell par défaut sous la plupart de ...



Le shell Principales commandes

Le shell UNIX standard est sh. Nous n'étudierons que lui cette année. Bash supplante de plus en plus souvent sh (c'est le cas sur Linux).



Le shell bash

27 juil. 2015 Le Bourne-Again Shell (bash). ? Dans ce cours nous étudions le shell en mode texte bash. En mode texte car permet d'écrire des scripts !



Guide avancé décriture des scripts Bash: Une exploration en

26 déc. 2007 Guide avancé d'écriture des scripts Bash: Une exploration en profondeur de l'art de la programmation shell. Mendel Cooper. 5.1.04.



FORMATUX : Shell Bash

24 sept. 2019 L'idée de fournir aux stagiaires un support en PDF reprenant la totalité des cours dispensés pour leur permettre de réviser et approfondir les ...



LA PROGRAMMATION SHELL

Les scripts shell. Volume Horaire : Cours : 3 heures. TD : 1 heure 30 mn. 3.1 Introduction. Le shell est l'interface Homme/Machine des systèmes UNIX/LINUX.



Initiation `a Unix Cours 2 - Programmation Shell

Programmation shell: combinaison de commandes au sein d'un script dans le but d'automatiser certains tâches. ? Un Script shell correspond `a un fichier 



Shells Linux et Unix par la pratique

20 déc. 2013 Programmation système en C sous Linux. ... Pourquoi écrire un script shell ? ... cours d'exécution sans lancer de nouvelle instance.



[PDF] Scripts shell

Plan du cours 1 Le shell : l'image générale 2 Scripts shell : les bases 3 Structures de contrôle 4 Tableaux 5 Fonctions



[PDF] Cours Shell Unix Commandes & Programmation - X-Files

Cours Shell Unix 4 2 1 fichiers ordinaires (ordinary files) Par défaut avec nohup (sous sh bash et ksh) les canaux de sortie et d'erreur standards 



[PDF] Shell Bash - Supports formatux

24 sept 2019 · L'idée de fournir aux stagiaires un support en PDF reprenant la totalité des cours dispensés pour leur permettre de réviser et approfondir 



[PDF] Initiation `a Unix Cours 2 - Programmation Shell - Université dOrléans

Initiation `a Unix Cours 2 - Programmation Shell Université Henri Poincaré Master Génomique et Informatique Automne 2008 1 / 25 



[PDF] Le shell Principales commandes - IGM

Bash supplante de plus en plus souvent sh (c'est le cas sur Linux) Il consiste en un mélange de sh de quelques fonctions du csh et d'autres du Korn shell ( 



Cours Linux Shell Bash Niveau débutant

Shell bash – niveau débutant introduction les distributions cours linux shell bash niveau débutant pdf actuelles de gnu/linux offrent à l'utilisateur un 



Supports de cours gratuit sur script shell - pdf - BestCours

Support de cours PDF à télécharger gratuitement sur les commandes de base pour le système Unix-Linux Shell et architecture support de formation en 77p Taille 



[PDF] Scripts shell - fnac-staticcom

Scripts shell Programmez sous Unix/Linux (sh ksh bash) Exercices et corrigés 174 QCM 80 travaux pratiques et leurs corrigés



Programmation Shell Linux cours à télécharger en pdf - CoursPDFnet

Télécharger cours Interpréteurs de commandes Shell pour les Systèmes d'exploitation Linux fichier PDF gratuit - fichier de type pdf et de taille 89 64 Ko 



[PDF] Programmation Shell Lignes de commandes et - limsi

Dans le cadre du cours utilisation d'un UNIX : Linux mod`ele format etc ) Gedit (gedit) scripts shell qui exécute la suite de commandes

  • Comment écrire un script shell sur Linux ?

    Script Shell (bash, zsh, ksh, dash,…), pour lire un fichier texte, ligne par ligne : read-file.sh. #variable du fichier fichier="test.

Guideavancé d'écrituredesscripts Bash

Uneexploration enprofondeurde l'artdela pro-

grammationshell

MendelCooper

Guideavancé d'écrituredesscripts Bash:Uneexploration enprofondeurde l'artde laprogrammationshell

MendelCooper

5.1.04

Publiéle 26décembre2007

Résumé

Cetutoriel nesupposeaucune connaissancedela programmationdescripts, maispermetune progressionrapidevers unniveauin-

termédiaire/avancéd'instructions touten seplongeantdans depetitesastuces duroyaumed'UNIX ®.Il estutilecomme livre,

commemanuel permettantd'étudierseul, etcommeréférence etsourcede connaissancesurles techniquesdeprogrammation de

scripts.Les exercicesetles exemplesgrandementcommentés invitentàune participationactivedu lecteuravecen têtel'idéeque

laseule façonpourvraiment apprendrelaprogrammation descriptsest d'écriredes scripts.

Celivre estadaptéà uneutilisationen classeentant qu'introductiongénéraleaux conceptsdela programmation.

Ladernière miseàjour decedocument ,comme une"archive tar»compressée avecbzip2incluant àlafois lesourceSGML etle

HTMLgénéré, peutêtretéléchargée àpartirdu sitepersonnelde l'auteur.UneversionPDF estaussi disponible(sitemiroir du

PDF).Voir lejournaldes modificationspourun historiquedesrévisions.

Dédicace

PourAnita, lasourcede toutemagie

i

Part1. Introduction.. ... .....................................................................................................................................1

1.Pourquoi laprogrammationShell ?.. ... ... ... ................................................................................................2

2.Lancement avecun" #!». ... ... ... ... ...........................................................................................................4

2.1.Appeler lescript. ... ... .....................................................................................................................7

2.2.Exercices préliminaires.. ... .............................................................................................................8

Part2. Bases.. ... .............................................................................................................................................9

3.Caractères spéciaux.. ... ..........................................................................................................................10

4.Introduction auxvariableset auxparamètres. ... ... ... ... .................................................................................28

4.1.Substitution devariable. ... ... ..........................................................................................................28

4.2.Affectation devariable. ... ... ...........................................................................................................30

4.3.Les variablesBashne sontpastypées ... ... ... ... ... ................................................................................32

4.4.Types spéciauxdevariables ... ... ... ..................................................................................................33

5.Guillemets etapostrophes. ... ... ................................................................................................................37

5.1.Placer lesvariablesentre guillemets.. ... ... ... ......................................................................................37

5.2.Échappement ... ............................................................................................................................38

6.Sortie etcodede sortie(oud'état) ... ... ... ... ... .............................................................................................44

7.Tests ... ...............................................................................................................................................46

7.1.Constructions detests. ... ... .............................................................................................................46

7.2.Opérateurs detestde fichiers.. ... ... ... ...............................................................................................52

7.3.Autres opérateursdecomparaison ... ... ... ..........................................................................................54

7.4.Tests if/thenimbriqués. ... ... ...........................................................................................................59

7.5.Tester votreconnaissancedes tests.. ... ... ... .......................................................................................59

8.Opérations etsujetsen relation.. ... ... ... .....................................................................................................61

8.1.Opérateurs ... ...............................................................................................................................61

8.2.Constantes numériques.. ... .............................................................................................................67

Part3. Aprèsl'approchebasique ... ... ... ...............................................................................................................69

9.Les variablesrevisitées. ... ... ...................................................................................................................70

9.1.Variables internes.. ... ....................................................................................................................70

9.2.Manipuler leschaînesde caractères.. ... ... ... ......................................................................................87

9.3.Substitution deparamètres. ... ... ......................................................................................................94

9.4.Typer desvariables: declareoutypeset.........................................................................................102

9.5.Références indirectes.. ... .............................................................................................................104

9.6.$RANDOM :générerun nombrealéatoire. ... ... ... ... .........................................................................107

9.7.La constructionendouble parenthèse.. ... ... ... ..................................................................................117

10.Boucles etbranchements. ... ... .............................................................................................................119

10.1.Boucles ... ...............................................................................................................................119

10.2.Boucles imbriquées.. ... ..............................................................................................................130

10.3.Contrôle deboucles. ... ... ............................................................................................................130

10.4.Tests etbranchements. ... ... .........................................................................................................133

11.Substitution decommandes. ... ... ..........................................................................................................141

12.Expansion arithmétique.. ... .................................................................................................................147

13.Récréation ... ....................................................................................................................................148

Part4. Commandes.. ... .................................................................................................................................149

14.Commandes internesetintégrées ... ... ... .................................................................................................159

14.1.Commandes decontrôledes jobs.. ... ... ... ......................................................................................184

15.Filtres externes,programmeset commandes.. ... ... ... ................................................................................189

15.1.Commandes debase. ... ... ...........................................................................................................189

15.2.Commandes complexes.. ... ........................................................................................................194

15.3.Commandes dedateet d'heure.. ... ... ... .........................................................................................203

15.4.Commandes d'analysedetexte ... ... ... ...........................................................................................206

15.5.Commandes pourlesfichiers etl'archivage. ... ... ... ... .......................................................................226

15.6.Commandes decommunications. ... ... ...........................................................................................242

15.7.Commandes decontrôledu terminal.. ... ... ... ..................................................................................257

15.8.Commandes mathématiques.. ... ..................................................................................................258

15.9.Commandes diverses.. ... ............................................................................................................266

16.Commandes systèmeetd'administration ... ... ... .......................................................................................279

16.1.Analyser unscriptsystème ... ... ... ................................................................................................307

Part5. Thèmesavancés. ... ... ..........................................................................................................................309

17.Expressions rationnelles.. ... ................................................................................................................310

17.1.Une brèveintroductionaux expressionsrationnelles. ... ... ... ... ...........................................................310

17.2.Remplacement ... ......................................................................................................................313

18.Documents enligne. ... ... ....................................................................................................................315

ii

18.1.Chaînes enligne. ... ... ................................................................................................................324

19.Redirection d'E/S(entrées/sorties). ... ... .................................................................................................327

19.1.Utiliser exec............................................................................................................................330

19.2.Rediriger lesblocsde code.. ... ... ... ..............................................................................................333

19.3.Applications ... .........................................................................................................................337

20.Sous-shells ... ...................................................................................................................................339

21.Shells restreints.. ... ...........................................................................................................................344

22.Substitution deprocessus. ... ... .............................................................................................................346

23.Fonctions ... ......................................................................................................................................349

23.1.Fonctions complexesetcomplexité desfonctions. ... ... ... ... ...............................................................351

23.2.Variables locales.. ... .................................................................................................................361

23.3.Récursion sansvariableslocales ... ... ... .........................................................................................363

24.Alias ... ............................................................................................................................................366

25.Constructeurs delistes. ... ... ................................................................................................................368

26.Tableaux ... ......................................................................................................................................371

28.Des Zérosetdes Nulls.. ... ... ... ............................................................................................................402

29.Débogage ... .....................................................................................................................................405

30.Options ... ........................................................................................................................................414

31.Trucs etastuces. ... ... .........................................................................................................................416

32.Écrire desscriptsavec style.. ... ... ... ......................................................................................................423

32.1.Feuille destylenon officielled'écriturede scripts.. ... ... ... ... ... ..........................................................423

33.Divers ... ..........................................................................................................................................426

33.1.Shells etscriptsinteractifs etnoninteractifs ... ... ... ... ... ....................................................................426

33.2.Précédence desopérateurs. ... ... ...................................................................................................427

33.3.Scripts d'appel.. ... .....................................................................................................................429

33.4.Tests etcomparaisons: alternatives.. ... ... ... ...................................................................................433

33.5.Récursion ... .............................................................................................................................433

33.6." Coloriser»des scripts.. ... ... ... ..................................................................................................435

33.7.Optimisations ... .......................................................................................................................447

33.8.Astuces assorties.. ... .................................................................................................................448

33.9.Problèmes desécurité. ... ... .........................................................................................................457

33.10.Problèmes deportabilité. ... ... ....................................................................................................458

33.11.Scripts sousWindows. ... ... .......................................................................................................458

34.Bash, version2et 3.. ... ... ... ................................................................................................................460

34.1.Bash, version2. ... ... ..................................................................................................................460

34.2.Bash, version3. ... ... ..................................................................................................................464

35.Notes finales.. ... .....................................................................................................................................467

35.1.Note del'auteur. ... ... .......................................................................................................................467

35.2.À proposdel'auteur ... ... ... ...............................................................................................................467

35.3.Où trouverdel'aide ... ... ... ................................................................................................................467

35.4.Outils utiliséspourproduire celivre. ... ... ... ... ......................................................................................467

35.5.Remerciements ... ...........................................................................................................................468

35.6.Avis denon-responsabilité. ... ... ........................................................................................................470

Bibliographie. .............................................................................................................................................471

A.Contribution descripts. ... ... .......................................................................................................................472

B.Cartes deréférence. ... ... ............................................................................................................................611

C.Petit guidesurSed etAwk. ... ... ... ... ............................................................................................................616

C.1.Sed ... ............................................................................................................................................616

C.2.Awk ... ...........................................................................................................................................619

D.Codes desortieayant unesignificationparticulière ... ... ... ... ... ..........................................................................622

E.Une introductiondétailléesur lesredirectionsd'entrées/sorties ... ... ... ... ... ...........................................................623

F.Options enlignede commande.. ... ... ... .........................................................................................................625

F.1.Options standardsenligne decommande. ... ... ... ... .................................................................................625

F.2.Options enlignede commandedeBash ... ... ... ... ... .................................................................................626

G.Fichiers importants.. ... ..............................................................................................................................627

H.Répertoires systèmeimportants. ... ... ............................................................................................................628

I.Localisation ... ..........................................................................................................................................630

J.Commandes d'historique.. ... ........................................................................................................................633

K.Un exempledefichier .bashrc................................................................................................................634

L.Convertir desfichiersbatch DOSenscripts shell.. ... ... ... ... ... ...........................................................................644

Guideavancé d'écrituredesscripts Bash

iii

M.Exercices ... ............................................................................................................................................647

M.1.Analyse descripts. ... ... ....................................................................................................................647

M.2.Écriture descripts. ... ... ....................................................................................................................648

N.Historique desrévisions. ... ... .....................................................................................................................656

O.Sites miroirs.. ... .......................................................................................................................................659

P.Liste dechosesà faire.. ... ... ... .....................................................................................................................660

Q.Droits d'utilisation.. ... ...............................................................................................................................662

R.Copyright ... ............................................................................................................................................664

S.Table ASCII.. ... .......................................................................................................................................666

T.Index ... ..................................................................................................................................................667

Guideavancé d'écrituredesscripts Bash

iv

PartiePart 1.Introduction

Leshell estuninterpréteur decommandes.Plus qu'unesimplecouche isolanteentrele noyaudusystème d'exploitationet

l'utilisateur,il estaussiun langagedeprogrammation puissant.Unprogramme shell,appeléun script,est unoutilfacile àutiliser

pourconstruire desapplicationsen "regroupant» desappelssystème, outils,utilitaireset binairescompilés.Virtuellement, leré-

pertoireentier descommandesUNIX, desutilitaireset desoutilsest disponibleàpartir d'unscriptshell. Sicen'était passuffisant,

lescommandes shellinternes,telles quelesconstructions detestset deboucles,donnent unepuissanceet uneflexibilitésupplé-

mentairesaux scripts.Lesscripts shellconviennentparticulièrement bienpourles tâchesd'administrationdu systèmeetpour

d'autresroutines répétitivesneréclamant paslesparticularités d'unlangagede programmationstructurécomplet.

1Ilssont connussousle nomdecommandes intégrées159, c'est-à-diredesfonctionnalités internesaushell. 2Bienque larécursionestpossibledans unscriptshell 362,elle tendàêtre lenteetsonimplémentationestsouventlerésultatd'un codesale363 .

Chapitre1. Pourquoilaprogrammation Shell?

Aucunlangage deprogrammationn'est parfait.Iln'existe mêmepasun langagemeilleurque d'autre;il n'yaque deslangagesen

adéquationou peuconseilléspour desbutsparticuliers. --Herbert Mayer

Uneconnaissance fonctionnelledela programmationshellest essentielleàquiconque souhaitedevenirefficace enadministration

desystème, mêmepourceux quinepensent pasavoirà écrireunscript unjour.Pensez qu'audémarragede lamachineLinux, des

scriptsshell durépertoire/etc/rc.dsontexécutés pourrestaurerla configurationdusystème etpermettrela miseenfonction-

nementdes services.Unecompréhension détailléedeces scriptsdedémarrage estimportantepour analyserlecomportement d'un

système,et éventuellementlemodifier.

Écriredes scriptsshelln'est pasdifficileà apprendrecar,d'une part,lesscripts peuventêtreconstruits parpetitessections et,

d'autrepart, iln'ya qu'unassezpetit nombred'opérateurset d'options1spécifiquesau shellàconnaître. Lasyntaxeest simpleet

directe,similaire àunesuite d'appelsdedifférents utilitairesenligne decommandeet iln'existeque peude" règles»à apprendre.

Laplupart despetitsscripts fonctionnentdupremier coupetle débogage,mêmedes pluslongs,est assezsimple.

Unscript shellestune méthode"rapide etsale» pourprototyperune applicationcomplexe.Avoir mêmeunsous-ensemble limité

defonctionnalités dansunscript shellestsouvent unepremièreétape utilelorsd'un projetdedéveloppement. Decettefaçon, la

structurede l'applicationpeutêtre testéeetles problèmesmajeurstrouvés avantd'effectuerle codagefinalen C,C++,Javaou

Perl432.

Laprogrammation shellramèneà laphilosophieclassique desUNIX,c'est àdire,casser desprojetscomplexes ensous-tâchesplus

simpleset assemblerdescomposants etdesutilitaires. Beaucoupconsidèrentque cetteapprochede larésolutionde problèmeest

meilleureou, dumoins,plus abordablequel'utilisation delangagesde nouvellegénérationpuissamment intégrécommePerl,qui

essaientde toutfairepour toutlemonde maisauprix devousforcer àchangervotre processusderéflexion pourvousadapter à

l'outil.

D'aprèsHerbert Mayer," unlangageutiledoitcomprendredes tableaux,despointeurs etunmécanisme génériquepourconstruire

desstructures dedonnées.» Suivantcescritères, leslangagesdes scriptsshellne sontpas" utiles».Peut-être quesi.

Quandne pasutiliserles scriptsshell

•pour destâchesdemandant beaucoupderessources etparticulièrementlorsque larapiditéest unfacteur(tri, hachage,récursion

2...);

•pour desprocéduresimpliquant desopérationsmathématiques nombreusesetcomplexes, spécialementpourde l'arithmétique

àvirgule flottante,descalculs àprécisionarbitraire oudesnombres complexes(optezplutôt pourleC++oule FORTRAN

dansce cas); •pour uneportabilitéinter-plateformes (utilisezleC ouJavaà laplace);

•pour desapplicationscomplexes oùuneprogrammation structuréeestnécessaire (typagedevariables, prototypagedefonc-

tions,etc.) ; •pour desapplicationscritiques surlesquellesvous misezvotreavenir ouceluide lasociété;

•pour dessituationsoù lasécuritéest importante,oùvous avezbesoinde garantirl'intégritéde votresystèmeet devousproté-

gercontre lesintrusionset levandalisme; •pour desprojetsconsistant endenombreux composantsavecdes dépendancesinter-verrouillées;

•lorsque desopérationsimportantes surdesfichiers sontrequises( Bashestlimité àunaccès fichierensérie, ligneparligne, ce

quiest particulièrementmaladroitet inefficace); •si lesupportnatif destableauxmultidimensionnels estnécessaire; •si vousavezbesoin destructuresde données,tellesque deslisteschaînées oudesarbres ; •si vousavezbesoin degénérerou demanipulerdes graphiquesouune interfaceutilisateur(GUI) ; •lorsqu'un accèsdirectau matérielestnécessaire ; •lorsque vousavezbesoin d'accéderàun port,àun socketd'entrée/sortie; •si vousavezbesoin d'utiliserdesbibliothèques ouuneinterface propriétaire; 2

3Beaucoupde fonctionnalitésdeksh88,et mêmequelquesunes delaversion miseàjour ksh93,ont étéintégréesà Bash.4Parconvention, lesscriptsshell écritsparl'utilisateur, compatiblesavecle shellBourne,sont nommésavecl'extension .sh.Les scriptssystème,tels queceuxtrouvés dans/etc/rc.d,ne suiventpas

cettenomenclature.

•pour desapplicationspropriétaires, àsourcesfermées (lessourcesdes shellssontforcément visiblespartout lemonde).

Dansl'un descasci-dessus, considérezl'utilisationd'un langagedescripts pluspuissant,peut-être Perl,Tcl,Python,Ruby,voire

unlangage compilédehaut niveautelque C,C++ouJava.Même danscecas, prototyperl'applicationavec unscriptshell peut

toujoursêtre uneétapeutile audéveloppement.

Nousutiliserons Bash,unacronyme pour"Bourne-Again shell»et uncalemboursur ledésormaisclassique Bourneshellde Ste-

phenBourne. Bashestdevenu unstandarddefacto pourla programmationdescripts surtousles typesd'UNIX.La plupartdes

principesdiscutés danscelivre s'appliquentégalementà l'écrituredescripts avecd'autresshells telsquele KornShell ,duquel dé-

riventcertaines desfonctionnalitésde Bash,3,le shellC etses variantes(notezque laprogrammationen shellC n'estpas recom-

mandéeà causedecertains problèmesinhérents,comme indiquéenoctobre 1993surun messageUsenet parTom Christiansen).

Cequi suitestun tutorielsurl'écriture descriptsshell. Ilesten grandepartiecomposé d'exemplesillustrantdifférentes fonctionna-

litésdu shell.Lesscripts enexempleont ététestés,autant quepossible,et certainsd'entreeux peuventmêmeêtre utilesdansla

vraievie. Lelecteurpeut joueravecle codedesexemples dansl'archivedes sources(nom_script.shou

nom_script.bash),4leurdonner ledroitd'exécution (chmodu+rx nom_du_script)et lesexécuterpour voircequ'il

sepasse. Silessources del'archivene sontpasdisponibles, alorscopier/collerà partirdela versionHTMLoupdf(laversion ori-

ginaledispose d'uneversiontexte, disponibleàcette adresse)contrairement àlatraduction française).Sachezque certainsscripts

présentésici introduisentdesfonctionnalités avantqu'ellene soientexpliquéeset quececipourrait réclamerdulecteur deliretem-

porairementplus avantpourdes éclaircissements. Saufmention contraire,l'auteurdece livreaécrit lesscriptsd'exemples quisuivent.

Pourquoila programmationShell?

3

Chapitre2. Lancementavecun "#!»

Laprogrammation shellestun jukeboxdes années50... --Larry Wall

Dansle casleplus simple,unscript n'estriende plusqu'uneliste decommandessystème enregistréesdansun fichier.Àtout le

moins,cela évitel'effortde retapercetteséquence particulièredecommandes àchaquefois qu'elledoitêtre appelée.

Exemple2.1. cleanup:Un scriptpournettoyer lesjournauxde tracedans/var/log #cleanup #À exécuterentant queroot,bien sûr. cd/var/log cat/dev/null >messagescat/dev/null >wtmpecho"Journaux nettoyés."

Iln'y ariend'inhabituel ici,seulementun ensembledecommandes quipourraienttout aussibienêtre appeléesl'uneaprès l'autreà

partirde lalignede commandesurla consoleoudans uneémulationxterm.Les avantagesdeles placerdansun scriptvontbien

au-delàde nepasavoir àlesretaper. Lescriptdevient unoutiletpeut facilementêtremodifié oupersonnalisépour uneapplication

particulière. Exemple2.2. cleanup:Un scriptdenettoyage amélioré #!/bin/bash#En-tête propred'unscript Bash. #Nettoyage, version2

#À exécuterentant queroot,bien sûr#Insérez ducodeici pourafficherles messagesd'erreuret sortirsi#l'utilisateur n'estpasroot.

REP_TRACES=/var/log#Les variablessontpréférées auxvaleurscodées endur.cd$REP_TRACES cat/dev/null >messagescat/dev/null >wtmp echo"Journaux nettoyés." exit# Labonneméthode pour"sortir"d'un script. Maintenant,cela commenceàressembler àunvrai script.Maisnous pouvonsallerencore plusloin... Exemple2.3. cleanup:Une versionamélioréeet généraliséedesscripts précédents #!/bin/bash#Nettoyage, version3.

#Attention :#----------- #Ce scriptutiliseun nombredefonctionnalités quiserontexpliquées bien#+après. #Après avoirterminéla premièremoitiéde celivre,il nedevraitplus comporter#+de mystère.

REP_TRACES=/var/logUID_ROOT=0# Seulslesutilisateurs avecun$UID valant0ont lesdroitsde root. 4

LIGNES=50# Nombredelignes sauvegardéespardéfaut. E_XCD=66# Onnepeut paschangerde répertoire?E_NONROOT=67# Codedesortie sinonroot.

#À exécuterentant queroot,bien sûr.if[ "$UID"-ne"$UID_ROOT" ]thenecho"Vous devezêtreroot pourexécuterce script."exit$E_NONROOT fi

if[ -n"$1"] #Teste siunargument estprésenten lignedecommande (nonvide).thenlignes=$1elselignes=$LIGNES# Pardéfaut,s'il n'estpasspécifié surlaligne decommande.fi

#Stephane Chazelassuggèrece quisuit,#+une meilleurefaçonde vérifierlesarguments enlignede commande,#+mais c'estunpeu tropavancéà cestadedu tutoriel.##E_MAUVAISARGS=65 #Argumentnon numérique(mauvaisformat del'argument)##case "$1"in#"" )lignes=50;;#*[!0-9]*) echo"Usage:`basename $0`Nbre_de_Ligne_a_Garder";exit $E_MAUVAISARGS;;#* )lignes=$1;;#esac ##*Passer auchapitre"Boucle" pourcomprendretout ceci.

cd$REP_TRACES

if[ `pwd`!="$REP_TRACES" ]#ou if["$PWD" !="$REP_TRACES"] #Pas dans/var/log? thenecho"Impossible d'allerdans$REP_TRACES." exit$E_XCD fi# Doublevérificationdu bonrépertoire,pour nepasposer problèmeavecle #journal detraces.

#bien plusefficace:##cd /var/log||{ #echo "Impossibled'allerdans lerépertoire.">&2 #exit $E_XCD;#}

tail-n $lignesmessages> mesg.temp#Sauvegarde ladernièresection dujournal#de traces.mvmesg.temp messages#Devient lenouveaujournal detraces.

#cat /dev/null>messages #*Plus nécessaire,carla méthodeci-dessusest plussûre. cat/dev/null >wtmp# ':>wtmp' et'>wtmp' ontlemême effet.echo"Journaux nettoyés." exit0

Lancementavec un"#! »

5

1Certainssystèmes UNIX(ceuxbasés sur4.2BSD)prétendent codercenombre magiquesurquatre octets,réclamantune espaceaprèsle !,#!/bin/sh .Néanmoins, d'aprèsSven Mascheck,c'est proba-

blementun mythe.2Laligne #!d'unscript shellestla premièrechoseque l'interpréteurdecommande (shoubash)voit. Commecetteligne commenceavecun #,ilsera correctementinterprétéen tantquecommentaire

lorsquel'interpréteur decommandesexécutera finalementlescript. Lalignea déjàétéutilisé pourappelerl'interpréteur decommandes.

Enfait, silescript inclutuneligne #!supplémentaire,alors bashl'interprèteracomme uncommentaire.

#!/bin/bash echo"Partie 1duscript." a=1 #!/bin/bash#Ceci nelance*pas* unnouveauscript. echo"Partie 2duscript." echo$a #Valeurde $aesttoujours 1.

3Cecipermet destoursde passe-passe.

#!/bin/rm#Script sesupprimantlui-même.

#Rien deplusne sembleseproduire lorsquevouslancez ceci...sion enlève#+le faitquele fichierdisparait.

QUOIQUECESOIT=65

echo"Cette lignenes'affichera jamais."

exit$QUOIQUECESOIT #Importepeu. Lescriptne seterminerapas ici.#Tester unecho$? aprèslafin duscript.#Vous obtiendrez0,au lieude65.

Dela mêmemanière,essayer delancerun fichierREADMEavecun #!/bin/moreaprèsl'avoir renduexécutable.Le résultatestun fichierdedocumentation s'affichantlui-même.(Un documentenligne 315

utilisantcat estcertainementune meilleurealternative-- voirExemple18.3, "Messagemulti-lignes enutilisantcat»).

#Un codederetour zéroduscript indiqueunsuccès aushell.

Commevous pouveznepas vouloirsupprimertoutes lestracessystème, cettevariantedu scriptconservela dernièresectiondes

tracesintacte. Vousdécouvrirezen permanencedenouvelles façonspouraffiner desscriptsprécédemment écritsetaméliorer ain-

sileur efficacité.

Lesha-bang(#!) enen-têtede cefichierindique àvotresystème quecefichier estunensemble decommandespour l'interpréteur

indiqué.Les caractères#!sont codéssurdeux octets1etcorrespondent enfaità unnombremagique ,un marqueurspécialqui dé-

signeun typedefichier, oudansce cas,unscript shellexécutable(lancez manmagic pourplus dedétailssur cethèmefasci-

nant).Tout desuiteaprès lesha-bangsetrouve unchemin.C'est lecheminvers leprogrammequi interprètelescommandes dece

script,qu'il soitunshell, unlangagede programmationouun utilitaire.Ensuite,cet interpréteurdecommande exécutelescom-

mandesdu script,encommençant audébut(ligne aprèsle#!), enignorantles commentaires.2 #!/bin/sh#!/bin/bash#!/usr/bin/perl#!/usr/bin/tcl#!/bin/sed-f #!/usr/awk-f

Chacunedes lignesd'en-têtedu scriptci-dessusappelle uninterpréteurde commandedifférent,qu'il soit/bin/sh,le shellpar

défaut( bashdansun systèmeLinux)ou autrechose.

Lancementavec un"#! »

6

4PortableOperatingSystemInterface,an attempttostandardize UNIX-likeOSes (NdT:interface desystèmesd'exploitation portables,unessai pourstandardiserles UNIX).Lesspécifications POSIX

sontdisponibles surlesiteOpen Group.5SiBashestvotre shellpardéfaut, alors#!n'est pasnécessaire.Par contre,sivous lancezunscript àpartird'un shelldifférent,comme tcsh,alors vousaurezbesoinde #!.6Attention: appelerunscript Bashavecshnom_script désactiveles extensionsspécifiquesà Bash,etdonc lescriptpeut nepasfonctionner. 7Pourpouvoir êtrelancé,un scriptabesoin dudroitde lecture(read)en plusdecelui d'exécution,carle shellabesoin delelire. 8Pourquoine passimplementappeler lescriptavec nom_script?Si lerépertoireoù vousvoustrouvez ($PWD) estdéjàcelui oùsetrouve nom_script,pourquoi celanefonctionne-t'il pas?Cela

échoueparce que,pourdes raisonsdesécurité, lerépertoirecourant (./)n'est pasincluspar défautdansle $PATHdel'utilisateur. Ilestdonc nécessaired'appelerle scriptdefaçon explicitedansle réper-

toirecourant avec./nom_script.

Utiliser#!/bin/sh,par défautBourneShell danslaplupart desvariantescommerciales d'UNIX,rendle scriptportableaux ma-

chinesnon-Linux, malheureusementenfaisant lesacrificedes fonctionnalitésspécifiquesà Bash.Le scriptseconformera néan-

moinsau standardshdePOSIX 4

Notezque lechemindonné à"sha-bang »doitêtre correct,sinonun messaged'erreur-- habituellement"Command notfound» -

-sera leseulrésultat dulancementdu script.

#!peut êtreomissi lescriptconsiste seulementenun ensembledecommandes systèmegénériques,sans utiliserdedirectives shell

interne.Le secondexemple,ci-dessus, requiertle#! initialcarla ligned'affectationdes variables,lignes=50,utilise une

constructionspécifique aushell.5Notezencore que#!/bin/shappellel'interpréteur shellpardéfaut, quiest/bin/bashsur

unemachine Linux.

Astuce

Cetutoriel encourageuneapproche modulairedela constructiond'unscript. Preneznoteet collectionnezdesas-

tucessous formede" blocssimples» decodepouvant êtreutilespour defutursscripts. Àlalongue, vouspouvez

obtenirune bibliothèqueassezétendue deroutinesbien conçues.Commeexemple, ledébutdu scriptsuivantteste

sile scriptaété appeléavecle bonnombrede paramètres. E_MAUVAIS_ARGS=65parametres_scripts="-a-h -m-z"#-a =all,-h =help,etc.

if[ $#-ne$Nombre_arguments_attendus ]thenecho"Usage: `basename$0`$parametres_scripts" #`basename $0`estle nomdufichier contenantlescript. exit$E_MAUVAIS_ARGS fi

Denombreuses fois,vousécrirez unscriptréalisant unetâcheparticulière. Lepremierscript decechapitre enest

unexemple. Plustard,il pourraitvousarriver degénéraliserle scriptpourfaire d'autrestâchessimilaires. Rempla-

cerles constanteslittérales(" codéesendur »)pardes variablesestune étapedanscette direction,commele faitde

remplacerles blocsdecode répétitifspardes fonctions349.

2.1.Appeler lescript

Aprèsavoir écritlescript, vouspouvezl'appeler avecshnom_script 6,ou avecbashnom_script (iln'est pasrecom-

mandéd'utiliser shnom_script carcela désactivelalecture destdin623à l'intérieurduscript). Ilestbien plusaiséde rendre

lescript directementexécutableavec unchmod. Soit chmod555 nom_script(donneles droitsdelecture/exécution àtoutle monde)7 soit chmod+rx nom_script(donneles droitsdelecture etd'exécutionà toutlemonde) chmodu+rx nom_script(donneles droitsdelecture etd'exécutionseulement àsonpropriétaire)

Maintenantque vousavezrendu lescriptexécutable, vouspouvezle testeravec./nom_script8.S'il commenceparune ligne

"sha-bang »,appelerle scriptappellele boninterpréteurde commande.

Enfin,après lestestset ledébogagefinal, vousvoudrezcertainement ledéplacerdans /usr/local/bin(entant queroot,bien

sûr),pour lerendreutilisable parvouset partousles autresutilisateursdu système.Lescript pourraalorsêtre appeléentapant

simplementnom_script[ENTER] surla lignedecommande.

Lancementavec un"#! »

7

2.2.Exercices préliminaires

1.Les administrateurssystèmeécrivent souventdesscripts pourautomatisercertaines tâches.Donnezquelques exemplesoùde

telsscripts sontutiles.

2.Écrivez unscriptqui, lorsdeson exécution,donnela dateetl'heure ,laliste detousles utilisateursconnectéset letempspassé

depuisle lancementdusystème (uptime) dusystème.Enfin, lescriptdoit sauvegardercetteinformationdansunjournal.

Lancementavec un"#! »

8

PartiePart 2.Bases

Chapitre3. Caractèresspéciaux

Caractèresspéciaux setrouvantdans lesscriptset ailleurs

Commentaires.Leslignes commençantavecun #(à l'exceptionde#! )sontdes commentairesetne serontpasexécutées.

#Cette ligneestun commentaire. Lescommentaires peuventapparaîtreaprès lafind'une commande. echo"Un commentairevasuivre." #Uncommentaire ici.#^ Notezl'espaceblanc devant# Lescommentaires peuventaussisuivre unblancau débutd'uneligne. #Une tabulationprécèdece commentaire.

Attention

Uncommentaire nepeutpas êtresuivid'une commandesurla mêmeligne.Il n'existepasde façondeterminer

lecommentaire pourquele "vraicode »commencesur lamêmeligne. Utilisezunenouvelle lignepourla commandesuivante. Note

Biensûr, un#échappé 38dansune instructionechonecommence pasuncommentaire. Delamême manière,

un# apparaîtdanscertaines constructionsdesubstitution deparamètres etdansles expressionsnumériques

constantes67.

echo"Le #icine commencepasun commentaire."echo'Le #icine commencepasun commentaire.'echoLe \#icine commencepasun commentaire.echoLe #icicommence uncommentaire.

echo${PATH#*:} #Substitutionde paramètres,pasun commentaire.echo$(( 2#101011))# Conversiondebase, pasuncommentaire.

#Merci, S.C. Lescaractères standardsdeguillemet etd'échappement37 ("'\) échappentle#. Certainesopérations defiltragede motiffontaussi appelau#. Séparateurde commande[point-virgule].Permetde placerdeuxcommandes ouplussur lamêmeligne. echobonjour; echoici

if[ -x"$nomfichier"]; then#Notez que"if"et "then"doiventêtre séparés.#Pourquoi ?echo"Le fichier$nomfichierexiste."; cp$nomfichier$nomfichier.sauve elseecho"Le fichier$nomfichierest introuvable.";touch$nomfichier fi;echo "Testdufichier terminé."

Notezque le"; »aparfois besoind'êtreéchappé 38. Finde lignedansune sélectionparcas case[doublepoint-virgule]. 10 case"$variable" inabc)echo "\$variable=abc" ;;xyz)echo "\$variable=xyz" ;;esac

Commande" point»[point]. Équivalentau source(voirl' Exemple14.22," "Inclure» unfichierdedonnées»). C'estune

commandeintégrée 159deBash.

"point »,commecomposant d'unnomde fichier.Lorsde l'utilisationdenoms defichiers,un pointestle préfixed'unfi-

chier" caché»,un fichierquels nemontrehabituellement pas.

bash$touch.fichier_caché bash$ls-l total10 -rw-r--r--1 bozobozo4034 Jul1822:04 donnée1.carnet_d_adresses-rw-r--r--1 bozobozo4602 May2513:58 donnée1.carnet_d_adresses.bak-rw-r--r--1 bozobozo877 Dec172000 boulot.carnet_d_adresse

bash$ls-al total14 drwxrwxr-x2 bozobozo1024 Aug2920:54 ./drwx------52 bozobozo3072 Aug2920:51 ../-rw-r--r--1 bozobozo4034 Jul1822:04 donnée1.carnet_d_adresses-rw-r--r--1 bozobozo4602 May2513:58 donnée1.carnet_d_adresses.bak-rw-r--r--1 bozobozo877 Dec172000 boulot.carnet_d_adresse-rw-rw-r--1 bozobozo0 Aug2920:54 .fichier_caché

Ence quiconcerneles nomsdesrépertoires, unseul pointreprésentele répertoirecourantet deuxpoints desuiteindiquentle

répertoireparent. bash$pwd/home/bozo/projets bash$cd. bash$pwd/home/bozo/projets bash$cd.. bash$pwd/home/bozo/ Lepointapparaîtsouvent commerépertoirede destinationd'unecommande demouvementde fichiers. bash$cp/home/bozo/travail_en_cours/débarras/* .

Filtraged'un caractèreparle "point». Pourle filtragedecaractères 310ausein d'uneexpressionrationnelle 310,un"point»

correspondà unseulcaractère.

Citationpartielle 28[guillemetdouble]."CHAÎNE"empêchel'interprétation delaplupart descaractèresspéciaux présents

dansla CHAÎNE.Voir aussileChapitre 5,Guillemetset apostrophes.

Citationtotale [guillemetsimple].'CHAÎNE'empêchel'interprétation detousles caractèresspéciauxprésents dansla

CHAÎNE.Ces guillemetssontplus puissantsque". Voiraussile Chapitre5,Guillemets etapostrophes.

Caractèresspéciaux

11

1Unopérateurestun agentquiexécute uneopération.L'exemple habituelestl' opérateurarithmétique, +- */.Avec Bash,ily acroisemententre lesconceptsd' opérateuretde motsclés159 .

Opérateurvirgule .L'opérateurvirgule 1relieune suited'opérationsarithmétiques. Toutessontévaluées, maisseulle résul-

tatde ladernièreest renvoyé. let"t2 =((a= 9,15/ 3))"#Initialise "a=9" et"t2= 15/3". Échappement38[antislash].Unmécanisme d'échappementpourles caractèresseuls.

\X"échappe »lecaractère X.Cela apoureffet de"mettre Xentreguillemets »,etest équivalentà'X'.Le \peutêtre utilisé

pourmettre "et' entreguillemets,ce quipermetde lesécriresous formelittérale.

Voirle Chapitre5,Guillemets etapostrophespour uneexplicationplus détailléedescaractères échappés.

Séparateurdans lechemind'un fichier[barreoblique]. Sépareles composantsd'unnom defichier(comme dans/

home/bozo/projets/Makefile). C'estaussi l'opérateurarithmétique dedivision.

Substitutionde commandes141[guillemet inversé].Laconstruction `commande`rendla sortiedecommandedisponible

pourl'affecter àunevariable. Connusousle nomdeguillemets inversés141.

Commandenul [deux-points].Ils'agit del'équivalentshell d'un"NOP »(noop ,c'est-à-dire "pasd'opération »).Ellepeut

êtreconsidérée commeunsynomyme pourlacommande intégréetrue. Lacommande" :»est elle-mêmeunecommande inté-

grée159Bashetson étatdesortie 44est" vrai»(0). :echo$? #0

Bouclesans fin:

while: dooperation-1operation-2...operation-ndone #Identique à:#while true#do #... #done

Sertde bouche-troudansun testif/then:

ifcondition then: #Nerien faireetcontinuer elsefaire_quelque_chosefi

Sertde bouche-trouquandon attenduneopération binaire,voirl' Exemple8.2," Utiliserdesopérations arithmétiques»et les

paramètrespar défaut.

:${nom_utilisateur=`whoami`} #${nom_utilisateur=`whoami`} donneuneerreur sanslesdeux-points entoutdébut #sauf si"nom_utilisateur"est unecommande,intégrée ounon...

Sertde bouche-trouquandon attendunecommande dansundocument enligne315 .Voirl' Exemple18.10," Documentenligne

Caractèresspéciaux

12 "anonyme »».

Évalueune suitedevariables enutilisantla substitutiondeparamètres (commedansl' Exemple9.16," Utiliserlasubstitution

etles messagesd'erreur» ).

:${HOSTNAME?} ${USER?}${MAIL?}#Affiche unmessaged'erreur #+si unevariabled'environnement (ouplusieurs)n'est pasinitialisée.

Expansionde variable/remplacement d'unesous-chaîne.

Encombinaison avecl'opérateur deredirection>, tronqueunfichieràlataille zérosansmodifier sesdroits.Crée lefichiers'il

n'existaitpas auparavant. :> données.xxx#Fichier "données.xxx"maintenantvide

#Même effetquecat /dev/null>données.xxx#Néanmoins, celanecrée pasunnouveau processus,car":" estunecommande intégrée.

Voiraussi l'Exemple15.14, "Utilisertailpoursurveiller lejournaldes tracessystème» .

Encombinaison avecl'opérateurde redirection>>,elle n'apasd'effet surunfichier cibledéjàexistant (:>> nou-

veau_fichier).Crée lefichiers'il n'existaitpas. Note

Celas'applique auxfichiersréguliers, maispasaux tubes,auxliens symboliquesetà certainsfichiersspéciaux.

Peutservir àcommencerune lignedecommentaire bienquece nesoitpas recommandé.Utiliser# pouruncommentaire

désactivela vérificationd'erreurpour lerestede laligne,donc vouspouvezy mettrepratiquementn'importe quoi.Enre-

vanche,ce n'estpasle casavec:. :Ceci estuncommentaire quigénèreune erreur,(if [$x-eq 3]). Le" :»sert aussideséparateur dechamp,dans /etc/passwdetdans lavariable$PATH . bash$echo$PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games

Inversele sensd'untest oud'unétat desortie.L'opérateur! inversel'état desortie44 delacommandeàlaquelleil estappli-

qué(voir l'Exemple6.2, "Inverseruneconditionenutilisant !»). Ilinverseaussi lasignificationd'un opérateurdetest. Par

exemple,cela peutchangerle sensd'unégal(=)enundifférent(!= ).L'opérateur! estunmot-clé 159Bash.

Dansun autrecontexte,le !apparaîtaussi danslesréférences indirectesdevariable .

Dansun contexteencoredifférent, àpartirde lalignede commande,le !appellele mécanismed'historique deBash (voir

l'AnnexeJ,Commandesd'historique ).Notezque cemécanismeest désactivédanslesscripts.

Joker[astérisque]. Lecaractère *sertde "joker» pourl'expansiondes nomsdefichiers dansleremplacement .Utiliséseul,

ilcorrespond àtousles nomsdefichiers d'unrépertoiredonné. bash$echo* abs-book.sgmladd-drive.sh agram.shalias.sh

L'astérisque* représenteuncaractère répétéplusieursfois (ouzéro)dans uneexpressionrationnelle 310.

Opérateurarithmétique .Dansle contextedesopérations arithmétiques,*indique lamultiplication.

Ledouble astérisque**indique l'opérateurexponentiel . Opérateurde test.Àl'intérieur decertainesexpressions, le?indique untestpour unecondition.

Caractèresspéciaux

13

2UnPID,ou identifiantde processus,est unnuméroaffecté àunprocessus encoursd'exécution. LesPIDdesprocessus sontvisiblesavec lacommandeps .

Définition: unprocessusestun programmeencours d'exécution,quelquefois mêmeappeléun job.quotesdbs_dbs45.pdfusesText_45
[PDF] programme national de santé bucco dentaire en milieu scolaire pdf

[PDF] cours bash pdf

[PDF] incipit la peste bac francais

[PDF] programmation shell linux

[PDF] incipit de la peste ouverture

[PDF] incipit la peste texte

[PDF] exercice corrigé programmation shell

[PDF] programmation bash pdf

[PDF] prêche du père paneloux commentaire

[PDF] diabète au maroc 2016

[PDF] note d'intention projet

[PDF] la princesse de clèves livre audio

[PDF] la princesse de clèves extrait

[PDF] princesse de montpensier lettres volées

[PDF] publicité radio