{"id":22,"date":"2013-03-10T15:37:06","date_gmt":"2013-03-10T14:37:06","guid":{"rendered":"http:\/\/sam-soul.fr\/Info\/?p=22"},"modified":"2013-03-10T15:37:06","modified_gmt":"2013-03-10T14:37:06","slug":"bash","status":"publish","type":"post","link":"http:\/\/les-fougs.com\/wordpress\/2013\/03\/10\/bash\/","title":{"rendered":"BASH"},"content":{"rendered":"<p>Bash est un surdou\u00e9, un shell plein de ressources.<\/p>\n<p>De fa\u00e7on native (built-in on dit), bash sait faire beaucoup de choses sympas. Si on lui adjoint des commandes efficaces, on arrive \u00e0 un traitement d\u2019une puissance tr\u00e8s honorable !<\/p>\n<h2>La base<\/h2>\n<div>CTRL+A : aller au d\u00e9but de la ligne<br \/>\nCTRL+R : retrouver une commande que vous avez tapez avant en tapant quelques lettres<br \/>\nCTRL+E : aller \u00e0 la fin de la ligne<br \/>\nexport a=2<\/div>\n<div><\/div>\n<div>\n<div>\n<h2>Les combos<\/h2>\n<p>Pour faire des choses amusantes, il nous faut utiliser des \u201cpipes\u201d. (prononcer pa\u00efpes)<br \/>\nLes symboles &gt; pour cr\u00e9er et cat &gt;&gt; pour \u201cappender\u201d.<\/p>\n<p>cat toto.txt | less<\/p>\n<p>on envoie le contenu de toto.txt \u00e0 la commande less qui elle va l\u2019afficher page par page. En l\u2019occurrence aucun int\u00e9ret puisque faire directement less toto.txt fera la m\u00eame chose en moins de texte.<\/p>\n<p>Par contre \u00e7a :<\/p>\n<p>cat toto.txt | sort | uniq | less<\/p>\n<p>C\u2019est int\u00e9ressant, car on liste le contenu du fichier toto.txt, on en envoie le r\u00e9sultat \u00e0 la commande sort qui va trier par ordre alphab\u00e9tique, ensuite ce r\u00e9sultat tri\u00e9 va vers la commande uniq qui d\u00e9doublonne le r\u00e9sultat et enfin vers la commande less qui affiche le r\u00e9sultat page par page. Tout ca en une ligne.<\/p>\n<p>On aurait d\u2019ailleurs pu finir cette chaine de flux par un &gt; pour l\u2019\u00e9crire dans un fichier :<\/p>\n<p>cat toto.txt | sort | uniq &gt; toto_tri\u00e9_et_d\u00e9doublonn\u00e9.txt<\/p>\n<p>la plupart du temps | sert \u00e0 chainer les commandes et &gt; \u00e0 \u00e9crire dans un fichier (ou \u00e0 la fin de celui-ci avec &gt;&gt;).<\/p>\n<p>Allons-y un peu plus franchement. Admettons qu\u2019un fichier liste.txt contienne plein de pr\u00e9noms les uns \u00e0 la suite des autres en vrac, m\u00eame pas un par ligne, juste s\u00e9par\u00e9s par des espaces et que l\u2019on veuille les trier dans l\u2019ordre alphab\u00e9tique.<\/p>\n<p>Une petite boucle bash :<br \/>\nexport a=`cat liste.txt`<br \/>\nfor i in $a; do echo $i | sort &gt;liste_tri\u00e9e.txt; done<\/p>\n<p>On ins\u00e8re le r\u00e9sultat de la commande \u201ccat liste.txt\u201d dans la variable a. Ensuite on fait une boucle sur un compteur i au sein de la variable a, on affiche le r\u00e9sultat et ensuite on trie et on ins\u00e8re dans le fichier.<\/p>\n<p>Parfois le s\u00e9parateur n\u2019est pas pratique et un utilitaire tr\u00e8s puissant, appel\u00e9 AWK, peut vous aider. La synthaxe est complexe mais le r\u00e9sultat est sympa, voici un exemple :<\/p>\n<p>awk -F : \u2018{print $1 \u201d \u201d $4}\u2019 \/etc\/passwd<\/p>\n<p>on consid\u00e8re \u201c:\u201d comme le s\u00e9parateur et on affiche $1 (le premier item) puis un espace \u201d \u201d puis $4 (le 4\u00b0 item selon le s\u00e9parateur \u201c:\u201d.<\/p>\n<h2>Cr\u00e9er un script bash<\/h2>\n<div>\n<p>Le \u201cshebang\u201d, pour sh bang, lancer un shell. C\u2019est comme cela qu\u2019on appel le fait de lancer Bash, tout script bash commence par :<\/p>\n<p>#!\/bin\/bash<\/p>\n<p>Ensuite on ins\u00e8re son traitement, si on veut prendre en compte les param\u00e8tres de la ligne de commande,<\/p>\n<p>$0 = nom du script, $1 = 1\u00b0 param\u00e8tre, $2 = 2\u00b0 param\u00e8tres etc\u2026<\/p>\n<p># !\/bin\/bash<br \/>\nPATH=\/usr\/local\/bin;\/bin;\/sbin;\/usr\/local\/sbin;\/usr\/bin<br \/>\necho $0 est lanc\u00e9 avec les param\u00e8tres $1 et $2<\/p>\n<p>case \u201c$1\u2033 in<br \/>\nstart)<br \/>\necho starting<br \/>\n;;<\/p>\n<p>case \u201c$1\u2033 in<br \/>\nstop)<br \/>\necho stopping<br \/>\n;;<\/p>\n<p>case \u201c$1\u2033 in<br \/>\n*)<br \/>\necho rien \u00e0 faire je ne comprends que start ou stop<br \/>\n;;<\/p>\n<p>Evidemment, l\u00e0 \u00e7a manque d\u2019int\u00e9r\u00eat, il faut lui faire faire des vraies choses au script mais bon, c\u2019est un squelette qui fonctionne, \u00e0 vous de le peupler.<\/p>\n<h2>Faire d\u00e9marrer un script au moment du boot et le couper \u00e0 son arr\u00eat<\/h2>\n<div>\n<p>Le placer dans \/etc\/init.d et ensuite faire un lien dans \/etc\/rc3.d et un autre dans \/etc\/rc6.d :<\/p>\n<p>cp script.sh \/etc\/init.d<br \/>\nln -s \/etc\/init.d\/script.sh \/etc\/rc3.d\/S99_myscript<br \/>\nln -s \/etc\/init.d\/script.sh \/etc\/rc3.d\/K99_myscript<br \/>\nln -s \/etc\/init.d\/script.sh \/etc\/rc6.d\/S99_myscript<br \/>\nln -s \/etc\/init.d\/script.sh \/etc\/rc6.d\/K99_myscript<\/p>\n<p>si vous avez le case avec les start et stop dans le script, le syst\u00e8me lancera automatiquement le start tout \u00e0 la fin du boot et stoppera juste au red\u00e9marrage.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bash est un surdou\u00e9, un shell plein de ressources. De fa\u00e7on native (built-in on dit), bash sait faire beaucoup de choses sympas. Si on lui adjoint des commandes efficaces, on arrive \u00e0 un traitement d\u2019une puissance tr\u00e8s honorable ! La base CTRL+A : aller au d\u00e9but de la ligne CTRL+R : retrouver une commande que &hellip; <a href=\"http:\/\/les-fougs.com\/wordpress\/2013\/03\/10\/bash\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;BASH&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[51],"tags":[],"_links":{"self":[{"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/posts\/22"}],"collection":[{"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":0,"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/posts\/22\/revisions"}],"wp:attachment":[{"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/media?parent=22"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/categories?post=22"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/les-fougs.com\/wordpress\/wp-json\/wp\/v2\/tags?post=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}