{"id":6969,"date":"2024-05-21T12:31:21","date_gmt":"2024-05-21T12:31:21","guid":{"rendered":"https:\/\/hengowebsite.luong.fr\/?page_id=6969"},"modified":"2024-06-07T16:08:02","modified_gmt":"2024-06-07T16:08:02","slug":"programmation-shell-et-filtres","status":"publish","type":"page","link":"https:\/\/hengowebsite.luong.fr\/?page_id=6969","title":{"rendered":"PROGRAMMATION SHELL ET FILTRES"},"content":{"rendered":"<h2>3.3 Aiguillages<\/h2>\n<h3>3.3.1 Instruction case<\/h3>\n<p>&nbsp;<\/p>\n<h5>Script de base<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p>case $# in<br \/>\n1|2) echo \u00ab\u00a0On a recu 1 ou 2 arguments\u00a0\u00bb<br \/>\necho \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb<br \/>\n;;<br \/>\n3) echo \u00ab\u00a0On a recu 3 arguments\u00a0\u00bb<br \/>\necho \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb<br \/>\n;;<br \/>\n*) echo \u00ab\u00a0Mauvais appel, il faut 1 ou 2 ou 3 arguments\u00a0\u00bb<br \/>\nexit 1<br \/>\n;;<\/p>\n<p>esac<br \/>\necho \u00ab\u00a0Suite du traitement\u00a0\u00bb<\/p>\n<p># ?(expr1|expr2|&#8230;) Au plus une apparition d&rsquo;une des expressions<br \/>\n# *(expr1|expr2|&#8230;) Un nombre quelconque d&rsquo;apparitions (\u00e9ventuellement aucune)<br \/>\n# +(expr1|expr2|&#8230;) Un nombre quelconque d&rsquo;apparitions (au moins une)<br \/>\n# @(expr1|expr2|&#8230;) Exactement une des expressions<br \/>\n# !(expr1|expr2|&#8230;) Aucune des expressions<\/p>\n<p>&nbsp;<\/p>\n<h5>Variante du script de base<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p>Argument=$1<br \/>\n[ B$Argument = B ] &amp;&amp; Argument=null<\/p>\n<p>case $Argument in<br \/>\necho) echo \u00ab\u00a0On a recu 1 ou 2 arguments\u00a0\u00bb<br \/>\necho \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb<br \/>\n;;<br \/>\narg) echo \u00ab\u00a0On a recu 3 arguments\u00a0\u00bb<br \/>\necho \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb<br \/>\n;;<br \/>\n*) echo \u00ab\u00a0Mauvais appel, il faut 1 ou 2 ou 3 arguments\u00a0\u00bb<br \/>\nexit 1<br \/>\n;;<\/p>\n<p>esac<br \/>\necho \u00ab\u00a0Suite du traitement\u00a0\u00bb<\/p>\n<p># ?(expr1|expr2|&#8230;) Au plus une apparition d&rsquo;une des expressions<br \/>\n# *(expr1|expr2|&#8230;) Un nombre quelconque d&rsquo;apparitions (\u00e9ventuellement aucune)<br \/>\n# +(expr1|expr2|&#8230;) Un nombre quelconque d&rsquo;apparitions (au moins une)<br \/>\n# @(expr1|expr2|&#8230;) Exactement une des expressions<br \/>\n# !(expr1|expr2|&#8230;) Aucune des expressions<\/p>\n<hr>\n<h3>3.3.2 Instruction select du Korn-Shell<\/h3>\n<p>&nbsp;<\/p>\n<h5>Script de base<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p>PS3=\u00a0\u00bbTapez votre choix : \u00a0\u00bb<\/p>\n<p>select i in \u00ab\u00a0Liste\u00a0\u00bb \u00ab\u00a0Ajout\u00a0\u00bb \u00ab\u00a0Modification\u00a0\u00bb \u00ab\u00a0Sortie\u00a0\u00bb<br \/>\ndo<br \/>\ncase $REPLY in<br \/>\n1|2|3) echo $i<br \/>\n;;<br \/>\n4) echo $i<br \/>\nexit 0<br \/>\n;;<br \/>\n*) echo \u00ab\u00a0Choix impossible\u00a0\u00bb<br \/>\n;;<br \/>\nesac<br \/>\ndone<\/p>\n<p>select f in *<br \/>\ndo<br \/>\nread cmd?\u00a0\u00bbEntrez votre commande:\u00a0\u00bb<br \/>\n$cmd $f<br \/>\ndone<\/p>\n<p>&nbsp;<\/p>\n<h5>Variante du script de base<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p>PS3=\u00a0\u00bbTapez votre choix : \u00a0\u00bb<\/p>\n<p>select i in \u00ab\u00a0status\u00a0\u00bb \u00ab\u00a0stop\u00a0\u00bb \u00ab\u00a0start\u00a0\u00bb \u00ab\u00a0sortie\u00a0\u00bb<br \/>\ndo<br \/>\ncase $REPLY in<br \/>\n1) service smbd $i<br \/>\n;;<br \/>\n2) service smbd $i<\/p>\n<p>;;<br \/>\n3) service smbd $i<br \/>\n;;<br \/>\n4) echo $i<br \/>\nexit 0<br \/>\n;;<br \/>\n*) echo \u00ab\u00a0Choix impossible\u00a0\u00bb<br \/>\n;;<br \/>\nesac<br \/>\ndone<\/p>\n<p>select f in *<br \/>\nudo<br \/>\nread cmd?\u00a0\u00bbEntrez votre commande:\u00a0\u00bb<br \/>\n$cmd $f<br \/>\ndone<\/p>\n<hr>\n<h3>3.4.2 Redirections particuli\u00e8res de l&rsquo;entr\u00e9e standard: Script en ligne<\/h3>\n<p>&nbsp;<\/p>\n<h5>Script de base 1<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p># Affiche du texte et r\u00e9alise les expansions de variable et commandes si besoin<br \/>\ncat &lt;&lt; fin<br \/>\nCeci est l&rsquo;entr\u00e9e standard de la commande<br \/>\nType du terminal = $TERM<br \/>\nIl est $(date +%H:%M )<\/p>\n<p>fin<\/p>\n<h5>&nbsp;<\/h5>\n<h5>Variante du script de base 1<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p># Affiche du texte et r\u00e9alise les expansions de variable et commandes si besoin<br \/>\ncat &lt;&lt; fin<br \/>\nCeci est l&rsquo;entr\u00e9e standard de la commande<br \/>\nType du terminal = $TERM<br \/>\nIl est $(date +%H:%M )<br \/>\nIl est $(date +%c )<br \/>\nIl est $(date +[%d-%m-%Y:%H:%M] )<\/p>\n<p>fin<\/p>\n<p>&nbsp;<\/p>\n<h5>Script de base 2<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<\/p>\n<p># Affiche du texte et NE REALISE PAS les expansions de variables, NI les commandes<\/p>\n<p>cat &lt;&lt; \\fin<br \/>\nCeci est l&rsquo;entr\u00e9e standard de la commande<br \/>\nType du terminal = $TERM<br \/>\nIl est $(date +%H:%M )<\/p>\n<p>fin<\/p>\n<hr>\n<h3>3.4.3 Gestion des Entr\u00e9es\/Sorties: Compl\u00e9ments<\/h3>\n<p>&nbsp;<\/p>\n<h5>Script de base<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/sh<br \/>\n:<br \/>\n:<br \/>\n#Ouverture du 1er fichier en lecture<br \/>\nexec 3&lt; fic1<br \/>\n#Ouverture du 2eme fichier en ecriture<br \/>\nexec 4&gt; fic2<br \/>\n#Lecture ligne par ligne du 1er fichier<\/p>\n<p>while read &lt;&amp;3 ligne<br \/>\ndo<br \/>\n#Ecriture sur la sortie standard<\/p>\n<p>echo $ligne<br \/>\necho \u00ab\u00a0Copier(o\/n &#8211; lecture vide pour sortir)? \\c\u00a0\u00bb<br \/>\n#Lecture depuis l&rsquo;entr\u00e9e standard<br \/>\nread rep<br \/>\nif test -z \u00ab\u00a0$rep\u00a0\u00bb ; then<br \/>\nbreak<br \/>\nfi<br \/>\nif test \u00ab\u00a0$rep\u00a0\u00bb = o<br \/>\nthen<br \/>\n#Ecriture dans le 2eme fichier<br \/>\necho $ligne &gt;&amp;4 $ligne<br \/>\nfi<br \/>\ndone<br \/>\n:<br \/>\n:<\/p>\n<p>&nbsp;<\/p>\n<h5>Script de base &#8211; Exemple de syntaxe dans le cas particulier des commandes internes <em>read\/print<\/em> du Korn-Shell<\/h5>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<br \/>\n:<br \/>\n:<br \/>\n#Ouverture du 1er fichier en lecture<br \/>\nexec 3&lt; fic1<br \/>\n#Ouverture du 2eme fichier en ecriture<br \/>\nexec 4&gt; fic2<br \/>\n#Lecture ligne par ligne du 1er fichier<\/p>\n<p>while read -u3 ligne<br \/>\ndo<br \/>\n#Ecriture sur la sortie standard<\/p>\n<p>print $ligne<br \/>\nprint \u00ab\u00a0Copier(o\/n &#8211; lecture vide pour sortir)? \\c\u00a0\u00bb<br \/>\n#Lecture depuis l&rsquo;entr\u00e9e standard<br \/>\nread rep<br \/>\nif test -z \u00ab\u00a0$rep\u00a0\u00bb ; then<br \/>\nbreak<br \/>\nfi<br \/>\nif test \u00ab\u00a0$rep\u00a0\u00bb = o<br \/>\nthen<br \/>\n#Ecriture dans le 2eme fichier<br \/>\nprint $ligne -u4 $ligne<br \/>\nfi<br \/>\ndone<br \/>\n:<br \/>\n:<\/p>\n<hr>\n<hr>\n<h2>5. Outils avanc\u00e9s du Shell: sed et awk<\/h2>\n<p>&nbsp;<\/p>\n<h5>Exercice<\/h5>\n<p>\u00c0 partir d&rsquo;un fichier texte, mettre en forme les pr\u00e9noms en minuscules avec la premi\u00e8re lettre en majuscule, et mettre les noms en majuscules.<\/p>\n<p>&nbsp;<\/p>\n<p>roger MARTIN 12000 cd1<br \/>\nrene duval 500 cd1<br \/>\nmarie pervenche 12010 cd3<br \/>\nMarcel dupond 600 cd2<br \/>\npaul MARTIN 10000 cd4<br \/>\nroger MARTIN 12500 cd1<br \/>\nRene DUVAL 510 cd1<br \/>\nmarie pervenche 13000 cd3<br \/>\nmarie MARTIN 13000 cd3<br \/>\nSophie Martinez 6512 cd2<br \/>\nSylvie Martinelli 45678 cd2<br \/>\nPaul Legrand 4560 cd5<br \/>\nmichel DUVAL 54500 cd1<br \/>\nMireille Duvalier 12345 cd2<br \/>\nPaul LEGRAND 14560 cd5<br \/>\nRene Pervenche 5400 cd3<br \/>\nPaul Martinez 5600 cd2<br \/>\nAndre dupond 650 cd5<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Script pour mettre les noms en majuscules et les pr\u00e9noms en minuscules avec la premi\u00e8re lettre en majuscules:<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>#! \/usr\/bin\/ksh<br \/>\n[ -f exemple.txt.MODIF6 ] &amp;&amp; cp \/dev\/null exemple.txt.MODIF6<\/p>\n<p>cat exemple.txt | while read line<br \/>\ndo<br \/>\nPRENOM=$(echo $line | cut -d\u00a0\u00bb \u00a0\u00bb -f1)<br \/>\nNOM=$(echo $line | cut -d\u00a0\u00bb \u00a0\u00bb -f2)<br \/>\nNOMBRE=$(echo $line | cut -d\u00a0\u00bb \u00a0\u00bb -f3)<br \/>\nCD=$(echo $line | cut -d\u00a0\u00bb \u00a0\u00bb -f4)<br \/>\nNOM=$(echo $NOM | tr \u00ab\u00a0[a-z]\u00a0\u00bb \u00ab\u00a0[A-Z]\u00a0\u00bb)<br \/>\nPRENOM=$(echo $PRENOM | tr \u00ab\u00a0[A-Z]\u00a0\u00bb \u00ab\u00a0[a-z]\u00a0\u00bb)<br \/>\nPRENOM=$(echo -e \u00ab\u00a0$PRENOM\u00a0\u00bb | sed &lsquo;s\/^.\/\\u&amp;\/&rsquo;)<\/p>\n<p>echo \u00ab\u00a0$PRENOM $NOM $NOMBRE $CD\u00a0\u00bb &gt;&gt; exemple.txt.MODIF6 &amp;&amp; sleep 2<br \/>\ndone<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Permet de v\u00e9rifier si le fichier de destination existe, et de le purger le cas \u00e9ch\u00e9ant pour enregistrer les donn\u00e9es en sortie:<\/strong><\/li>\n<\/ul>\n<p>[ -f exemple.txt.MODIF6 ] &amp;&amp; cp \/dev\/null exemple.txt.MODIF6<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Permet de mettre les noms en majuscules:<\/strong><\/li>\n<\/ul>\n<p>NOM=$(echo $NOM | tr \u00ab\u00a0[a-z]\u00a0\u00bb \u00ab\u00a0[A-Z]\u00a0\u00bb)<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Permet de mettre les pr\u00e9noms en minuscules:<\/strong><\/li>\n<\/ul>\n<p>PRENOM=$(echo $PRENOM | tr \u00ab\u00a0[A-Z]\u00a0\u00bb \u00ab\u00a0[a-z]\u00a0\u00bb)<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Permet de mettre la premi\u00e8re lettre du pr\u00e9nom en majuscule:<\/strong><\/li>\n<\/ul>\n<p>PRENOM=$(echo -e \u00ab\u00a0$PRENOM\u00a0\u00bb | sed &lsquo;s\/^.\/\\u&amp;\/&rsquo;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>3.3 Aiguillages 3.3.1 Instruction case &nbsp; Script de base &nbsp; #! \/usr\/bin\/ksh case $# in 1|2) echo \u00ab\u00a0On a recu 1 ou 2 arguments\u00a0\u00bb echo \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb ;; 3) echo \u00ab\u00a0On a recu 3 arguments\u00a0\u00bb echo \u00ab\u00a0On enchaine apres l&rsquo;aiguillage\u00a0\u00bb ;; *) echo \u00ab\u00a0Mauvais appel, il faut 1 ou 2 ou 3 arguments\u00a0\u00bb [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0},"_links":{"self":[{"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/pages\/6969"}],"collection":[{"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6969"}],"version-history":[{"count":8,"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/pages\/6969\/revisions"}],"predecessor-version":[{"id":6988,"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=\/wp\/v2\/pages\/6969\/revisions\/6988"}],"wp:attachment":[{"href":"https:\/\/hengowebsite.luong.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}