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-
grammationshellMendelCooper
Guideavancé d'écrituredesscripts Bash:Uneexploration enprofondeurde l'artde laprogrammationshellMendelCooper
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
iPart1. 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
ii18.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
iiiM.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
ivPartiePart 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 MayerUneconnaissance 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; 23Beaucoupde 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.shounom_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?
3Chapitre2. Lancementavecun "#!»
Laprogrammation shellestun jukeboxdes années50... --Larry WallDansle 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. 4LIGNES=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_TRACESif[ `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." exit0Lancementavec un"#! »
51Certainssystè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-fChacunedes 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"#! »
64PortableOperatingSystemInterface,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 4Notezque 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"#! »
72.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"#! »
8PartiePart 2.Bases
Chapitre3. Caractèresspéciaux
Caractèresspéciaux setrouvantdans lesscriptset ailleursCommentaires.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. NoteBiensû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; echoiciif[ -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" ;;esacCommande" 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
111Unopé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$? #0Bouclesans fin:
while: dooperation-1operation-2...operation-ndone #Identique à:#while true#do #... #doneSertde bouche-troudansun testif/then:
ifcondition then: #Nerien faireetcontinuer elsefaire_quelque_chosefiSertde 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. NoteCelas'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/gamesInversele 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.shL'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
132UnPID,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] 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