{"id":1304,"date":"2022-10-30T16:55:12","date_gmt":"2022-10-30T15:55:12","guid":{"rendered":"https:\/\/www.webodesign.net\/?p=1304"},"modified":"2022-11-01T17:44:18","modified_gmt":"2022-11-01T16:44:18","slug":"scripting-shellbash-comment-automatiser-votre-systeme-linux","status":"publish","type":"post","link":"https:\/\/www.webodesign.net\/?p=1304","title":{"rendered":"Scripting ShellBash \u2013 comment Automatiser votre syst\u00e8me Linux"},"content":{"rendered":"\n<p><strong>Le scripting Shell interm\u00e9diaire<\/strong><\/p>\n\n\n\n<p>Permettra d&rsquo;utiliser \u00e0 bon escient les&nbsp;<em>codes erreurs&nbsp;<\/em>(exit code) et les fonctionnalit\u00e9s accessibles gr\u00e2ce \u00e0 l&rsquo;utilisation du&nbsp;<em>ET&nbsp;<\/em>(&amp;&amp;) et du&nbsp;<em>OU&nbsp;<\/em>(||).&nbsp;<strong>Vous mettrez ensuite en place vos premi\u00e8res fonctions<\/strong> notamment lors d&rsquo;un exercice v\u00e9rifiant l&rsquo;existence d&rsquo;un fichier, et vous utiliserez les&nbsp;<em>wildcards&nbsp;<\/em>(aussi appel\u00e9s m\u00e9ta-caract\u00e8res) pour rendre vos scripts beaucoup plus puissants !<\/p>\n\n\n\n<p><strong>Le scripting avanc\u00e9<\/strong>&nbsp;:<\/p>\n\n\n\n<p>Vous donnera les outils pour <strong>utiliser du code plus performant<\/strong>, par exemple gr\u00e2ce au&nbsp;<em>case<\/em>.&nbsp;Vous serez \u00e9galement capable de<strong>&nbsp;<em>g\u00e9n\u00e9rer vos propres logs&nbsp;<\/em>et d&rsquo;utiliser le<em>&nbsp;langage YAML<\/em>&nbsp;<\/strong>pour les fichiers de configuration.&nbsp;Enfin vous en verrez d&rsquo;avantages sur les <strong>variables<\/strong> (<em>unset<\/em>,&nbsp;<em>export<\/em>,&nbsp;<em>typeset<\/em>,&nbsp;<em>readonly<\/em>, etc&#8230;) et sur la <strong>commande&nbsp;<em>sed<\/em><\/strong>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-4922db96 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-columns is-layout-flex wp-container-6\">\n<div class=\"wp-block-column is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow\">\n<p class=\"has-vivid-cyan-blue-color has-text-color has-medium-font-size\"><strong>Un script<\/strong><\/p>\n\n\n\n<ul><li>Contient une s\u00e9rie de commandes.<\/li><li>Ces commandes sont ex\u00e9cut\u00e9es par un interpr\u00e9teur (le shell pour les scripts que nous allons voir) les unes apr\u00e8s les autres.<\/li><li>Tout ce que vous pouvez taper en ligne de commande peut \u00eatre inclus dans un script.<\/li><\/ul>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-medium-font-size\"><strong>Rendre un script ex\u00e9cutable<\/strong><\/p>\n\n\n\n<p>Il est important de mettre les droits sur le fichier contenant le script de mani\u00e8re \u00e0 ce que celui-ci devienne ex\u00e9cutable :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">chmod a+x script.sh<\/code><\/pre>\n\n\n\n<p>Ex\u00e9cuter un script<\/p>\n\n\n\n<p>Pour ex\u00e9cuter un script, vous avez le choix de, soit vous trouver dans le r\u00e9pertoire o\u00f9 se situe votre script, soit d\u2019utiliser le chemin absolu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Chemin absolu : \n\/home\/jordan\/script.sh \n \n# Chemin relatif (si je suis dans le m\u00eame r\u00e9pertoire que le script): \n.\/script.sh<\/code><\/pre>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-medium-font-size\"><strong>Le Shebang !<\/strong><\/p>\n\n\n\n<p>Au d\u00e9but de chaque script bash, il est important de faire figurer le shebang :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n# Remarque : Il en existe d&#039;autres\n#!\/bin\/sh\n#!\/bin\/csh \n#!\/bin\/zsh\n#!\/usr\/bin\/python<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-0bb84248\"><h3 class=\"uagb-heading-text\">Les variables<\/h3><\/div>\n\n\n\n<ul><li>Les variables sont sensibles \u00e0 la casse et par convention, on les met toujours en majuscules.<\/li><li>Attention aux nom de variables : les variables ne peuvent contenir que des underscores, majuscules, minuscules et chiffres (avec la condition de ne pas commencer par un chiffre)<\/li><li>Attention \u00e0 ne pas mettre d&rsquo;espace entre la variable, le signe = et les \u00ab\u00a0.<\/li><li>Pour utiliser les variables et afficher le contenu associ\u00e9, il faut faire pr\u00e9c\u00e9der le nom de la variable par un $.<\/li><li>Lorsque vous souhaitez inclure une variable dans un mot par exemple, vous pouvez utiliser les { }<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\nPRENOM=&quot;Robert&quot;\nNOM=&quot;CHART&quot;\necho &quot;Bonjour $PRENOM ${NOM}, bienvenue !&quot;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">.\/script.sh\nBonjour Robert CHART, bienvenue !\n# Remarque : sans les accolades, la virgule apr\u00e8s NOM aurait engendr\u00e9 une erreur.<\/code><\/pre>\n\n\n\n<p>Lorsque vous souhaitez inclure une variable dans un mot par exemple, vous pouvez utiliser les { }<\/p>\n\n\n\n<p>Assigner les sorties de commande \u00e0 une variable :<\/p>\n\n\n\n<ul><li>il faut mettre la variable entre parenth\u00e8ses<\/li><li>ou utiliser la back cote ( ` : alt+7) \u00e0 la place de $( )<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">.\/script.sh\necho ${MACHINE}! # renvoi debian!\nLISTE=`ls -l`\necho $LISTE # renvoi le r\u00e9sultat de la commande ls<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-8ec56acf\"><h3 class=\"uagb-heading-text\">Les tests<\/h3><\/div>\n\n\n\n<p>Lorsque vous tapez une commande, vous pouvez prendre le temps d\u2019analyser la r\u00e9ponse du syst\u00e8me et prendre une d\u00e9cision en fonction de cette r\u00e9ponse. Il est tout \u00e0 fait possible d\u2019effectuer les m\u00eames \u00e9tapes avec le scripting Shell gr\u00e2ce aux tests dont la syntaxe est la suivante :<\/p>\n\n\n\n<p>[ voici-la-condition-du-teste-a-verifier ] ( il est important de respecter les espaces apr\u00e8s le [ et avant le ] )<br><\/p>\n\n\n\n<pre title=\"V\u00e9rifie si le fichier \/home\/jordan\/bonjour existe\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">.\/script.sh\n[ -e \/home\/jordan\/bonjour ]<\/code><\/pre>\n\n\n\n<ul><li>La commande nous retourne la valeur 0 (True) si le fichier existe<\/li><li>La commande nous retourne la valeur 1 (False) si le fichier n&rsquo;existe pas<\/li><\/ul>\n\n\n\n<div class=\"wp-block-uagb-blockquote uagb-block-dc79f02d uagb-blockquote__skin-quotation uagb-blockquote__align-left uagb-blockquote__style-style_2 uagb-blockquote__stack-img-none\"><blockquote class=\"uagb-blockquote\"><span class=\"uagb-blockquote__icon\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\"><path d=\"M7.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.357-0.056 0.724-0.086 1.097-0.086zM25.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.358-0.056 0.724-0.086 1.097-0.086z\"><\/path><\/svg><\/span><div class=\"uagb-blockquote__content\"><br>Pour avoir la liste des tests possibles taper : \u00ab\u00a0help test\u00a0\u00bb<\/div><footer><div class=\"uagb-blockquote__author-wrap uagb-blockquote__author-at-left\"><cite class=\"uagb-blockquote__author\">Author Name<\/cite><\/div><\/footer><\/blockquote><\/div>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong><em>Parmi les op\u00e9rateur principaux nous avons :<\/em><\/strong><br>\u2022 -e : 0 (True) si le fichier existe<br>\u2022 -d : 0 (True) s&rsquo;il s&rsquo;agit d&rsquo;un dossier<br>\u2022 -r : 0 (True) si le fichier est disponible en lecture pour l&rsquo;utilisateur<br>\u2022 -s : 0 (True) si le fichier existe et n&rsquo;est pas vide<br>\u2022 -w : 0 (True) si le fichier est disponible en \u00e9criture pour l&rsquo;utilisateur<br>\u2022 -x : 0 (True) si le fichier est disponible en ex\u00e9cution pour l&rsquo;utilisateur<\/p>\n\n\n\n<pre class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\nPRENOM=&quot;Robert&quot;\nNOM=&quot;CHART&quot;\n[ -z $PRENOM ]\necho $?\n\u2014&gt;.\/script.sh\n\u2014&gt;1\n[ -n $PRENOM ]\necho $?\n\u2014&gt;.\/script.sh\n\u2014&gt;0\n[ $PRENOM = $NOM ]\necho $?\n\u2014&gt;.\/script.sh\n\u2014&gt;0<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-blockquote uagb-block-27961804 uagb-blockquote__skin-quotation uagb-blockquote__align-left uagb-blockquote__style-style_2 uagb-blockquote__stack-img-none\"><blockquote class=\"uagb-blockquote\"><span class=\"uagb-blockquote__icon\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\"><path d=\"M7.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.357-0.056 0.724-0.086 1.097-0.086zM25.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.358-0.056 0.724-0.086 1.097-0.086z\"><\/path><\/svg><\/span><div class=\"uagb-blockquote__content\">Ne pas oublier de mettre des espaces avant et apr\u00e8s le signe =<br>Le test d\u2019\u00e9galit\u00e9 renvoie 0 si les deux cha\u00eenes sont identiques et 1 si elles ne le sont pas<br>Si l\u2019on veut tester la diff\u00e9rence on utilise !=<\/div><footer><div class=\"uagb-blockquote__author-wrap uagb-blockquote__author-at-left\"><cite class=\"uagb-blockquote__author\">Author Name<\/cite><\/div><\/footer><\/blockquote><\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-7a1ccb4e\"><h3 class=\"uagb-heading-text\">Les tests sur les chiffres<\/h3><\/div>\n\n\n\n<p>De la m\u00eame mani\u00e8re on il est possible de comparer deux nombres entre eux.<br>chiffre1 -eq chiffre2 : 0 si chiffre1 est \u00e9gal \u00e0 chiffre2<br>Pareil avec : -ne, -lt, -le, -gt, -ge<\/p>\n\n\n\n<p>\u2022 chiffre1 \u2013eq chiffre2 : 0 si chiffre1 est \u00e9gal \u00e0 chiffre2<br>\u2022 chiffre1 \u2013ne chiffre2 : 0 si chiffre1 est diff\u00e9rent de chiffre2<\/p>\n\n\n\n<p>\u2022 chiffre1 \u2013lt chiffre2 : 0 si chiffre1 est plus petit que chiffre2<br>\u2022 chiffre1 \u2013le chiffre2 : 0 si chiffre1 est plus petit ou \u00e9gal que<br>chiffre2<\/p>\n\n\n\n<p>\u2022 chiffre1 \u2013gt chiffre2 : 0 si chiffre1 est plus grand que chiffre2<br>\u2022 chiffre1 \u2013ge chiffre2 : 0 si chiffre1 est plus grand ou \u00e9gal que<br>chiffre2<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-5a764fe4\"><h3 class=\"uagb-heading-text\">Le code retour d\u2019une commande<\/h3><\/div>\n\n\n\n<ul><li>En g\u00e9n\u00e9ral, la valeur de retour d\u2019une commande lorsqu\u2019elle c\u2019est ex\u00e9cut\u00e9 correctement est 0.<\/li><li>Ne pas h\u00e9siter \u00e0 se servir du manuel (commande man) pour prendre connaissance de l\u2019utilisation d\u00e9taill\u00e9e d\u2019une commande.<\/li><li>Le code retour d\u2019une fonction est disponible avec $? (echo $?)<\/li><\/ul>\n\n\n\n<pre title=\"Utilisation du code retour\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n\nHOTE=$1 \nNOMBRE_DE_PAQUETS=$2 \nping \u2013c $NOMBRE_DE_PAQUETS $HOTE\n\nif [ &quot;$?&quot; \u2013ne &quot;0&quot; ]\nthen \n echo &quot;L&#039;hote $HOTE n&#039;est pas joignable&quot;  \nelse \n echo &quot;L&#039;hote $HOTE est joignable&quot; \nfi <\/code><\/pre>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-medium-font-size\"><strong><em>Cr\u00e9er son propre code retour :<\/em><\/strong><\/p>\n\n\n\n<ul><li>Il est tout \u00e0 fait possible de dire \u00e0 votre script que dans certaines conditions, il quitte avec un code erreur diff\u00e9rent de 0.<\/li><li>En effet, s&rsquo;il s&rsquo;est correctement ex\u00e9cut\u00e9, il sortira avec un code \u00e9gal \u00e0 0 (ou \u00e9gal \u00e0 celui de la derni\u00e8re commande ex\u00e9cut\u00e9e), mais vous pouvez lui sp\u00e9cifier un code diff\u00e9rent avec la commande :<br>exit 1<br>exit 2<\/li><li>Attention, car d\u00e9s que la commande exit est utilis\u00e9e, le script s&rsquo;arr\u00eate.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-99a429b1\"><h3 class=\"uagb-heading-text\">Les conditions<\/h3><\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-cbf02864\"><h3 class=\"uagb-heading-text\">Les if \/ elif \/ else<\/h3><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">if [ condition-est-vraie ] \nthen \n  command \nelif [ condition-est-vraie ]\nthen\n  command\nelse  \n  command \nfi <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\nCHIFFRE1=&#039;16&#039;\nCHIFFRE2=&#039;17&#039;\nif [ $CHIFFRE1 \u2013lt $CHIFFRE2 ] \nthen \n  echo &quot;$CHIFFRE1 est plus petit que $CHIFFRE2&quot;  \nelif [ $CHIFFRE1 \u2013gt $CHIFFRE2 ]\nthen \n  echo &quot;$CHIFFRE1 est plus grand que $CHIFFRE2&quot; \nelse \n  echo &quot;$CHIFFRE1 est \u00e9gal \u00e0 $CHIFFRE2&quot; \nfi\n.\/script.sh \n-&gt; 16 est plus petit que 17<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-584e38e4\"><h3 class=\"uagb-heading-text\">Le case (alternative au if)<\/h3><\/div>\n\n\n\n<pre title=\"Syntaxe du case\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">case &quot;$VARIABLE&quot; in\n    premier_cas)\n\tCommand1\n\tCommand2\n\t;;\n    deuxieme_cas)\n\tCommand1\n\tCommand2\n\t;;\n    *)\n\tCommand autre\n\texit 1\n\t;;\nesac<\/code><\/pre>\n\n\n\n<pre title=\"Syntaxe du case\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">case &quot;$VARIABLE&quot; in\n    premier_cas)\n\tCommand1\n\tCommand2\n\t;;\n    deuxieme_cas)\n\tCommand1\n\tCommand2\n\t;;\n    *)\n\tCommand autre\n\texit 1\n\t;;\nesac<\/code><\/pre>\n\n\n\n<pre title=\"Exemple\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">case &quot;$1&quot; in\n    start|START)\n# ou [sS][tT][aA][rR][tT] )\n        \/etc\/init.d\/apache2 start  \n        ;; \n    stop|STOP) \n# ou [sS][tT][oO][pP] )\n        kill $(cat \/var\/run\/apache2\/apache2.pid) \n        ;; \n    *) \n        echo &quot;Merci d&#039;indiquer start ou stop&quot; \n        exit 1 \n        ;; \nesac<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-de4826fa\"><h3 class=\"uagb-heading-text\">Les boucles<\/h3><\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-f5fe10cc\"><h3 class=\"uagb-heading-text\">La boucle for<\/h3><\/div>\n\n\n\n<pre title=\"Syntaxe de la boucle for\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">for VARIABLE in OBJET1 OBJET2 OBJET3 OBJETn\n\tCommand1\n\tCommand2\ndone <\/code><\/pre>\n\n\n\n<pre title=\"Exemple : la boucle for\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">CHIFFRES=&quot;10 11 12 13&quot;\nCOULEURS=&quot;rouge vert noir bleu&quot;\nfor CHIFFRE in $CHIFFRES\n\techo &quot;Chiffre : $CHIFFRE&quot;\ndone\nfor COULEUR in $COULEURS\n\techo &quot;La couleur est : $COULEUR&quot;\ndone\n.\/script.sh <\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-fd9c8743\"><h3 class=\"uagb-heading-text\">La boucle while<\/h3><\/div>\n\n\n\n<pre title=\"Syntaxe de la boucle while\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">while [ condition-est-vrai ]\ndo \n\tCommand1\n\tCommand2\ndone<\/code><\/pre>\n\n\n\n<pre title=\"Exemple\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash \n \nwhile [ -z $PRENOM ]\ndo\n read \u2013p &quot;Quel est votre prenom ?&quot; PRENOM \nDone \nEcho &quot;Votre prenom est $PRENOM&quot;<\/code><\/pre>\n\n\n\n<pre title=\"Ex\u00e9cution du script\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">.\/script.sh \n \nQuel est votre prenom ? \nQuel est votre prenom ? \nQuel est votre prenom ? Robert\nVotre prenom est Robert<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-5287c407\"><h3 class=\"uagb-heading-text\">Les param\u00e8tres de position<\/h3><\/div>\n\n\n\n<p>Les param\u00e8tres de position stockent le contenu des diff\u00e9rents \u00e9l\u00e9ments de la ligne de commande utilis\u00e9e pour lancer le script.<\/p>\n\n\n\n<ul><li>Il en existe 10 : <strong>$0<\/strong> jusqu\u2019\u00e0 <strong>$9<\/strong><\/li><li>Le script lui-m\u00eame est stock\u00e9 dans la variable <strong>$0<\/strong><\/li><li>Le premier param\u00e8tre est stock\u00e9 dans la variable <strong>$1<\/strong><br>\u2026<\/li><li>Il est possible d\u2019acc\u00e9der \u00e0 toutes les variables de position \u00e0 partir du $1 gr\u00e2ce au caract\u00e8re \u00ab\u00a0<strong>$@<\/strong>\u00ab\u00a0<\/li><li>Il existe diff\u00e9rents caract\u00e8res int\u00e9ressants \u00e0 utiliser concernant les variables de positionnement.<br><strong>$#<\/strong> : r\u00e9cup\u00e8re le nombre de param\u00e8tres (\u00e0 partir du $1)<br><strong>$*<\/strong> : r\u00e9cup\u00e8re la liste des param\u00e8tres<\/li><li>Pour acc\u00e9der aux valeurs sup\u00e9rieures \u00e0 9, on peut utiliser la commande \u00ab\u00a0<strong>shift<\/strong>\u00a0\u00bb qui va d\u00e9caler les valeurs des param\u00e8tres<\/li><\/ul>\n\n\n\n<div class=\"wp-block-group has-foreground-color has-text-color has-background is-layout-flow\" style=\"background-color:#cacaca;border-radius:20px;margin-top:10px;margin-bottom:10px;padding-top:3px;padding-right:3px;padding-bottom:3px;padding-left:3px\">\n<div class=\"wp-block-uagb-icon-list uagb-block-89325e1c\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-01b4a536\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">En lan\u00e7ant le script :<br>.\/script.sh argument1 argument2<br>Alors<br>$0 contient script.sh<br>$1 contient argument1<br>$2 contient argument2<br>Remarque :<br>echo \u00ab\u00a0le premier argument \u00e0 pour valeur $1\u00a0\u00bb<br>echo \u00ab\u00a0le second argument \u00e0 pour valeur $2\u00a0\u00bb<br>Est \u00e9quivalent \u00e0<br>echo \u00ab\u00a0le premier argument \u00e0 pour valeur $1\u00a0\u00bb<br>shift<br>echo \u00ab\u00a0le second argument \u00e0 pour valeur $1\u00a0\u00bb<\/span><\/div>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-4f02af78\"><h3 class=\"uagb-heading-text\">Entr\u00e9es utilisateurs<\/h3><\/div>\n\n\n\n<ul><li>La commande read : elle permet d\u2019accepter les donn\u00e9es du STDIN (entr\u00e9e standard), c\u2019est \u00e0 dire va permettre \u00e0 l\u2019utilisateur d\u2019entrer des donn\u00e9es.<\/li><li>Si l\u2019on veut afficher du texte pour pr\u00e9ciser \u00e0 l\u2019utilisateur quel genre de donn\u00e9es nous souhaitons qu\u2019il entre, on peut \u00e9galement utiliser l\u2019option \u00ab\u00a0-p\u00a0\u00bb.<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">echo &quot;Quel est votre pr\u00e9nom ?&quot;\nread PRENOM \n# Est \u00e9gal \u00e0\nread -p &quot;Quel est votre pr\u00e9nom ?&quot; PRENOM<\/code><\/pre>\n\n\n\n<div class=\"wp-block-group has-foreground-color has-text-color has-background is-layout-flow\" style=\"background-color:#cacaca;border-radius:20px;margin-top:10px;margin-bottom:10px;padding-top:3px;padding-right:3px;padding-bottom:3px;padding-left:3px\">\n<div class=\"wp-block-uagb-icon-list uagb-block-0bc37860\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-fe6e2da9\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Remarques :<br>&#8211; La plupart du temps l\u2019entr\u00e9e standard fait r\u00e9f\u00e9rence \u00e0 des donn\u00e9es que l\u2019utilisateur va taper au clavier.<br>&#8211; Cependant cette entr\u00e9e standard peut aussi provenir d\u2019autres sources de comme l\u2019output d\u2019une autre commande.<\/span><\/div>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-85467376\"><h3 class=\"uagb-heading-text\">Utilisation du &amp;&amp; : op\u00e9rateur AND (ET) logique<br>Utilisation du || : op\u00e9rateur OR (OU) logique<\/h3><\/div>\n\n\n\n<ul><li>Le &amp;&amp; permet d\u2019ex\u00e9cuter une deuxi\u00e8me commande uniquement lorsque la premi\u00e8re a renvoy\u00e9 un code erreur \u00e9glise \u00e0 0 (signifiant qu\u2019elle s\u2019est bien ex\u00e9cut\u00e9e).<\/li><li>permet d\u2019ex\u00e9cuter une deuxi\u00e8me commande uniquement lorsque la premi\u00e8re a renvoy\u00e9 un code erreur diff\u00e9rent de 0 (signifiant qu\u2018elle ne s\u2019est pas ex\u00e9cut\u00e9 de la bonne mani\u00e8re).<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">remi@vmi000000:~$ sudo ping -c 1 8.8.8.8 &amp;&amp; echo &quot;L&#039;HOTE EST JOIGNABLE&quot;\nPING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=4.68 ms\n--- 8.8.8.8 ping statistics ---\n1 packets transmitted, 1 received, 0% packet loss, time 0ms\nrtt min\/avg\/max\/mdev = 4.675\/4.675\/4.675\/0.000 ms\nL&#039;HOTE EST JOIGNABLE\n\nremi@vmi000000:~$ sudo ping -c 1 www.sitebidon.fr || echo &quot;L&#039;HOTE EST INJOIGNABLE&quot;\nping: www.sitebidon.fr: Name or service not known\nL&#039;HOTE EST INJOIGNABLE<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-00087be6\"><h3 class=\"uagb-heading-text\">Les fonctions<\/h3><\/div>\n\n\n\n<p>Il existe deux mani\u00e8res de coder une fonction :<\/p>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\"># d\u00e9clarer une fonction en utilisant le mot &quot;function&quot;\nfunction ma-fonction() {\n\tCommand1\n\tCommand2\n}\n\n# D\u00e9clarer une fonction sans d\u00e9clarer le mot &quot;function&quot; :\nma-fonction () {\n\tCommand1\n\tCommand2\n}\n\n# Pour appeler la fonction : retaper son nom sans les parenth\u00e8ses\nma-fonction<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-92a953b4\"><h3 class=\"uagb-heading-text\">Le passage des param\u00e8tres \u00e0 une fonction<\/h3><\/div>\n\n\n\n<ul><li>Le passage des param\u00e8tres fonctionne de la m\u00eame mani\u00e8re que les scripts.<\/li><li>Le premier param\u00e8tre est stock\u00e9 dans le $1, le second dans le $2, etc\u2026<\/li><li>Attention, le $0 continue \u00e0 faire r\u00e9f\u00e9rence au nom du script lui m\u00eame.<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash \nfunction internet() { \nping -c $1 $2\n \nif [ $? -eq 0 ] \nthen \n        echo &quot;La connectivit\u00e9 vers internet est \u00e9tablie&quot;\nelse\n        echo &quot;Pas de connectivit\u00e9 vers internet&quot;\nfi \n} \n\nInternet &quot;1&quot; &quot;8.8.8.8&quot;<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-9130577e\"><h3 class=\"uagb-heading-text\">Notions de variables globales et locales<\/h3><\/div>\n\n\n\n<ul><li>les variables globales peuvent tout \u00e0 fait \u00eatre utilis\u00e9es dans les fonctions \u00e0 condition qu\u2019elles \u00e9t\u00e9 d\u00e9clar\u00e9es avant la fonction<\/li><li>les variables d\u00e9clar\u00e9es dans une fonction ne peuvent \u00eatre utilis\u00e9es qu\u2019une fois que la fonction a \u00e9t\u00e9 ex\u00e9cut\u00e9e<\/li><li>Pour d\u00e9clarer des variables locales (n\u2019existes que dans la fonction) on utilise \u00ab\u00a0local\u00a0\u00bb<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\nVARIABLE=&quot;Jordan&quot;\n \nfunction demonstration() { \n  echo &quot;La variable $VARIABLE est utilisable&quot; \n  local VARIABLE_IN_FUNCTION=&quot;1&quot; \n}\n \ndemonstration \n# VARIABLE_IN_FUNCTION n&#039;est pas utilisable<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-a42ae7ca\"><h3 class=\"uagb-heading-text\">Code retour d&rsquo;une fonction<\/h3><\/div>\n\n\n\n<ul><li>si le code retour n\u2019a pas \u00e9t\u00e9 d\u00e9fini, alors c\u2019est le code retour de la derni\u00e8re variable ex\u00e9cut\u00e9e dans la fonction qui sera celui de la fonction par d\u00e9faut<\/li><li>Le code retour d\u2019une fonction est comprise entre 0 et 255<\/li><li>On peut y acc\u00e9der gr\u00e2ce \u00e0 la commande $?<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\nfunction internet_connectivity() {\n  ping \u2013c 1 8.8.8.8 &amp;&amp; return 0 \n} \n\ninternet_connectivity\n\nif [ $? \u2013eq 0 ] \nthen \n  echo &quot;Connectivit\u00e9 vers internet&quot; \nfi<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-02a8f899\"><h3 class=\"uagb-heading-text\">Exercice d&rsquo;application 1<\/h3><\/div>\n\n\n\n<p>R\u00e9aliser le script respectant les r\u00e8gles suivantes :<\/p>\n\n\n\n<ul><li>Script auquel on passe en argument une liste de fichiers.<\/li><li>Le script va d&rsquo;abord v\u00e9rifier que l&rsquo;utilisateur a bien saisi des arguments au moment de lancer le script. Si ce n&rsquo;est pas le cas, alors le script sort avec une erreur 2.<\/li><li>Le script va v\u00e9rifier si ces fichiers existent ou n&rsquo;existent pas et nous afficher la r\u00e9ponse \u00e0 l&rsquo;\u00e9cran.<\/li><li>Les commandes doivent \u00eatre int\u00e9gr\u00e9es \u00e0 des fonctions. On souhaite deux fonctions distinctes, une pour la v\u00e9rification du nombre d&rsquo;arguments et l&rsquo;autre pour la v\u00e9rification de l&rsquo;existence des<br>fichiers.<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n\n# Recuperation des noms des fichiers\nFICHIERS=$@\nNOMBRE_ARGUMENTS=$#\n\n# Verification que l&#039;utilisateur a bien saisi des arguments\nfunction verification_arguments(){\n    if [ $NOMBRE_ARGUMENTS -eq 0 ]\n    then\n        echo &quot;Attention, vous n&#039;avez pas saisi les noms de fichiers !&quot;\n        exit 2\n    fi\n}\n# On verifie que le fichier passe en argument n&#039;existe pas deja\nfunction verification_fichier_existe(){\n    for FICHIER in $FICHIERS\n    do\n        ls $FICHIER 2&gt; \/dev\/null\n        if [ $? -eq 0 ]\n        then\n            echo &quot;Le fichier $FICHIER existe&quot;\n        else\n            echo &quot;Le fichier $FICHIER n&#039;esiste pas&quot;\n        fi\n    done\n}\nverification_arguments\nverification_fichier_existe $FICHIERS<\/code><\/pre>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">remi@vmi000000:~$ nano exercice1.sh\nremi@vmi000000:~$ sudo chmod a+x exercice1.sh\n\nremi@vmi000000:~$ .\/exercice1.sh\nAttention, vous n avez pas saisi les noms de fichiers !\n\nremi@vmi000000:~$ .\/exercice1.sh ess.txt\nLe fichier ess.txt n esiste pas\n\nremi@vmi000000:~$ .\/exercice1.sh essai.txt\nessai.txt\nLe fichier essai.txt existe<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-84ab9da5\"><h3 class=\"uagb-heading-text\">Les WILDCARDS<\/h3><\/div>\n\n\n\n<ul><li>il s\u2019agit d\u2019un caract\u00e8re ou d\u2019une cha\u00eene de caract\u00e8res qui vont \u00eatre utilis\u00e9s pour prendre un certain nombre de valeurs<\/li><li>On parle de Globbing wildcards lorsqu\u2019ils vont matcher avec une liste de fichiers ou de r\u00e9pertoires<\/li><li>Ils peuvent \u00eatre utilis\u00e9s avec la plupart des commandes comme le ls ou le rm<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>[Classes de]<br>Caract\u00e8res <\/th><th class=\"has-text-align-left\" data-align=\"left\">Observation<\/th><\/tr><\/thead><tbody><tr><td>*<\/td><td class=\"has-text-align-left\" data-align=\"left\">match avec tous les caract\u00e8res (ou l\u2019absence de caract\u00e8res) qu\u2019il n\u2019y en ait qu\u2019un seul ou plusieurs<\/td><\/tr><tr><td><code>?<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">match avec un seul caract\u00e8re<\/td><\/tr><tr><td>[&#8230;]<\/td><td class=\"has-text-align-left\" data-align=\"left\">Les classes de caract\u00e8res : il est possible de cr\u00e9er des patterns de recherche tr\u00e8s sp\u00e9cifiques en utilisant les classes de caract\u00e8res. Le matching va se faire avec un ou plusieurs des caract\u00e8res inclus entre les crochets de la classe.<br>Exemple : ls -l t[aio]t[ai] \u2014&gt; tata titi (sur tata titi tutu tuto)<\/td><\/tr><tr><td>!<\/td><td class=\"has-text-align-left\" data-align=\"left\">Exclusion d&rsquo;un certain nombre de caract\u00e8res<br>Exemple : ls -l t[aiou]t!u \u2014&gt; tata titi tuto<br>Exemple : ls -l t[!au]t[!u] \u2014&gt; titi toto<\/td><\/tr><tr><td><code>[x-y]<\/code>*<\/td><td class=\"has-text-align-left\" data-align=\"left\">On peut \u00e9galement cr\u00e9er une plage de caract\u00e8res gr\u00e2ce aux classes<br>Exemples :<br>[1-3]* : match avec tous les fichiers commen\u00e7ant par 1, 2 ou 3<br>a-c]* : match avec tous les fichiers commandant par a, b ou c<\/td><\/tr><tr><td><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>Classes de caract\u00e8res pr\u00e9d\u00e9finies<\/strong><\/td><\/tr><tr><td><code>[[:alpha:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Toutes les lettres de l&rsquo;alphabet (minuscules et majuscules)<\/td><\/tr><tr><td><code>[[:alnum:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Toutes les lettres de l&rsquo;alphabet (minuscules et majuscules) ainsi que tous les chiffres (0 \u00e0 9)<\/td><\/tr><tr><td><code>[[:digit:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Tous les chiffres de 0 \u00e0 9<\/td><\/tr><tr><td><code>[[:upper:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Toutes les lettres de l&rsquo;alphabet en majuscule<\/td><\/tr><tr><td><code>[[:lower:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Toutes les lettres de l&rsquo;alphabet en minuscule<\/td><\/tr><tr><td><code>[[:space:]]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Tous les caract\u00e8res d&rsquo;espacement (espace, tabulation, nouvelle ligne, etc\u2026)<\/td><\/tr><tr><td>Exemples<\/td><td class=\"has-text-align-left\" data-align=\"left\">Dans un dossier on les fichiers :<br>tata, titi, tutu, toto, 1robert, 2robert, rob, robert1, robert2, t1t1<br>ls -ls [[:digit:]]robert renvoi les fichiers 1robert et 2robert<br>ls -ls robert[[:digit:]] renvoi les fichiers robert1 et robert2<br>ls -ls t[[:alpha:]]t? renvoi les fichiers tata, titi, toto, tutu<br>ls -ls t[[:alnum:]]t? renvoi les fichiers tata, titi, toto, tutu, t1t1<\/td><\/tr><tr><td><code>\\?<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Pour effectuer des recherches sur des fichiers qui comportent un caract\u00e8re de type wildcard, il faut utiliser le caract\u00e8re d\u2019\u00e9chappement anti-\/ avant le wildcard<br>Exemple : on ne peut pas cr\u00e9er un fichier t?t? avec la commande touch (car le caract\u00e8re ? est du type wildcard). Pour le faire, on devra entrer : touch t\\?t\\?<br>ls -l t?t? renvoi les fichiers tata, titi, toto, tutu, t1t1<br>ls -l t\\?t\\? renvoi le fichier t?t?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-8b24cfa9\"><h3 class=\"uagb-heading-text\">Exercice d&rsquo;application 2<\/h3><\/div>\n\n\n\n<ul><li>Faire un script prenant deux arguments :<\/li><li>Premier argument : nom d&rsquo;un fichier<\/li><li>Deuxi\u00e8me argument : peut prendre plusieurs valeurs comme :<ul><li>copy (copie le fichier dans le r\u00e9pertoire \/tmp\/script)<\/li><li>delete (supprime le fichier)<\/li><li>read (lire le fichier).<\/li><\/ul><\/li><li>Il faudra cr\u00e9er une fonction qui v\u00e9rifiera que le fichier rentr\u00e9 en argument existe bien, et utiliser les case pour les diff\u00e9rentes possibilit\u00e9s.<\/li><\/ul>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n\n# On verifie que le fichier passe en argument existe\nfunction verification_fichier_existe(){\n    ls $1 2&gt; \/dev\/null\n    case $? in\n        0)\n            echo &quot;Le fichier $FICHIER existe bien&quot;\n            return 0\n            ;;\n        *)\n            echo &quot;Le fichier $FICHIER n&#039;esiste pas&quot;\n            return 1\n            ;;\n    esac\n}\n\n# Verifie si l&#039;utilisateur a bien indique un nom de fichier\nif [ -z $1 ] || [ -z $2 ] \nthen\n    echo &quot;Attention a preciser un nom de fichier et l&#039;action&quot;\n    echo &quot;Actions disponibles : copy, delete, ou read&quot;\n    exit 1\nfi\n\n# Execution de la fonction de verification\nverification_fichier_existe $1\nif [ $? -ne 0 ] \nthen\n    exit 2\nfi\n\n# Actions a executer\ncase &quot;$2&quot; in\n    copy)\n        mkdir \/tmp\/script 2&gt; \/dev\/null\n        cp $1 \/tmp\/script\n        if [ $? -eq 0 ] \n        then\n            echo &quot;Le fichier $1 a bien ete copie dans \/tmp\/script\/&quot;\n        else\n            echo &quot;Une ereeur a eu lieu au moment de la copie&quot;\n            exit 3\n        fi\n        ;;\n    delete)\n        rm $1\n        if [ $? -eq 0 ] \n        then\n            echo &quot;Le fichier $1 a bien ete supprime&quot;\n        else\n            echo &quot;Une ereeur a eu lieu au moment de la suppression&quot;\n            exit 4\n        fi\n        ;;\n    read)\n        cat $1\n        if [ $? -eq 0 ] \n        then\n            exit 0\n        else\n            echo &quot;Une ereeur a eu lieu au moment de la lecture&quot;\n            exit 5\n        fi\n        ;;\nesac\n<\/code><\/pre>\n\n\n\n<pre title=\"Syntaxe de la commande read\" class=\"wp-block-code has-background-color has-text-color\"><code lang=\"bash\" class=\"language-bash\">remi@vmi00:~$ .\/exercice2.sh\nAttention a preciser un nom de fichier et l&#039;action\nActions disponibles : copy, delete, ou read\n\nremi@vmi00:~$ .\/exercice2.sh tutu read\nLe fichier  n&#039;esiste pas\n\nremi@vmi00:~$ .\/exercice2.sh toto read\ntoto\nLe fichier  existe bien\nSalut l&#039;artiste\n\nremi@vmi00:~$ .\/exercice2.sh tutu copy\nLe fichier  n&#039;esiste pas\n\nremi@vmi00:~$ .\/exercice2.sh toto copy\ntoto\nLe fichier  existe bien\nLe fichier toto a bien ete copie dans \/tmp\/script\/\nremi@vmi00:~$ ls \/tmp\/script\ntoto\n\nremi@vmi00:~$ .\/exercice2.sh toto delete\ntoto\nLe fichier  existe bien\nLe fichier toto a bien ete supprime\nremi@vmi00:~$ ls toto\nls: cannot access &#039;toto&#039;: No such file or directory<\/code><\/pre>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow\" style=\"flex-basis:170px\">\n\n<div class=\"cleanlogin-container\">\t\t\n\n\t<form class=\"cleanlogin-form\" method=\"post\" action=\"https:\/\/www.webodesign.net\/?page_id=2385\" onsubmit=\"submit.disabled = true; return true;\">\n\t\t\t\n\t\t<fieldset>\n\n\t\t\t\t\t\t<div class=\"cleanlogin-field\">\n                <label for=\"log\">Identifiant<\/label>\n\t\t\t\t<input class=\"cleanlogin-field-username\" type=\"text\" name=\"log\" placeholder=\"Identifiant\" aria-label=\"Identifiant\">\n\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"cleanlogin-field\">\n                <label for=\"pwd\">Mot de passe<\/label>\n\t\t\t\t<input class=\"cleanlogin-field-password\" type=\"password\" id=\"pwd\" name=\"pwd\" placeholder=\"Mot de passe\" aria-label=\"Mot de passe\">\n                <i class=\"bi bi-eye-slash\" id=\"togglePassword\"><\/i>\n\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t<input type=\"hidden\" name=\"clean_login_wpnonce\" value=\"e994c14fba\">\n            \n\t\t\t\t\t<\/fieldset>\n\t\t\n\t\t<fieldset>\n\t\t\t<input class=\"cleanlogin-field\" type=\"submit\" value=\"Se connecter\" name=\"submit\">\n\t\t\t<input type=\"hidden\" name=\"action\" value=\"login\">\n\t\t\t\n\t\t\t<div class=\"cleanlogin-field cleanlogin-field-remember\">\n\t\t\t\t<input type=\"checkbox\" id=\"rememberme\" name=\"rememberme\" value=\"forever\">\n\t\t\t\t<label for=\"rememberme\">Se souvenir de moi\u00a0?<\/label>\n\t\t\t<\/div>\n\t\t<\/fieldset>\n\n\t\t\n\t\t<div class=\"cleanlogin-form-bottom\">\n\t\t\t\n            \n\t\t\t\t\t\t\t\t\t\n\t\t<\/div>\n\t\t\n\t<\/form>\n\n<\/div>\n\n<script>\nconst togglePassword = document.querySelector('#togglePassword');\nconst password = document.querySelector('#pwd');\n\ntogglePassword.addEventListener('click', function (e) {\n    const type = password.getAttribute('type') === 'password' ? 'text' : 'password';\n    password.setAttribute('type', type);\n    this.classList.toggle('bi-eye');\n});\n<\/script>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-115caaf6 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-columns is-layout-flex wp-container-13\">\n<div class=\"wp-block-column is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow\">\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-8adcd776\"><h3 class=\"uagb-heading-text\">Premi\u00e8res configurations syst\u00e8me<\/h3><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-4e6eb72a\"><h3 class=\"uagb-heading-text\">Premier contacts<\/h3><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-ede1828d\"><h3 class=\"uagb-heading-text\">Premier contacts<\/h3><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-fb4c1ee6\"><h3 class=\"uagb-heading-text\">Comment fonctionne un VPS<\/h3><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-5c9c92ca\"><h3 class=\"uagb-heading-text\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Instalation de la commande sudo<\/mark><\/h3><\/div>\n\n\n\n<p><\/p>\n\n\n\n<pre title=\"Script pour la cr\u00e9ation d'un utilisateur\" class=\"wp-block-code has-background-color has-text-color\" style=\"border-radius:20px;border-width:2px\"><code lang=\"bash\" class=\"language-bash line-numbers\">remi ALL=(ALL) NOPASSWD:ALL\n%sudo   ALL=(ALL:ALL) NOPASSWD:ALL\npuis on sauvegarde(Ctrl+o)\/quit(Ctrl+x)\n# On termine en red\u00e9marrant le service sudo:\n\/etc\/init.d\/sudo restart\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-blockquote uagb-block-656366f6 uagb-blockquote__skin-quotation uagb-blockquote__align-left uagb-blockquote__style-style_2 uagb-blockquote__stack-img-none\"><blockquote class=\"uagb-blockquote\"><span class=\"uagb-blockquote__icon\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\"><path d=\"M7.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.357-0.056 0.724-0.086 1.097-0.086zM25.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.358-0.056 0.724-0.086 1.097-0.086z\"><\/path><\/svg><\/span><div class=\"uagb-blockquote__content\">apt update, upgrade, dist-upgrade et full-upgrade : quelles sont les diff\u00e9rences ? quel terme utiliser en fonction de se que l&rsquo;on cherche \u00e0 faire : Lire l&rsquo;article suivant&#8230;<br>E t en prime un lien vers un article de l&rsquo;h\u00e9bergeur Contabo intitul\u00e9 : <a rel=\"noreferrer noopener\" href=\"https:\/\/contabo.com\/blog\/debian-ubuntu-upgrade\/\" data-type=\"URL\" data-id=\"https:\/\/contabo.com\/blog\/debian-ubuntu-upgrade\/\" target=\"_blank\">\u00ab\u00a0Debian et Ubuntu Upgrade\u00a0\u00bb<\/a><\/div><footer><div class=\"uagb-blockquote__author-wrap uagb-blockquote__author-at-left\"><cite class=\"uagb-blockquote__author\">Author Name<\/cite><\/div><\/footer><\/blockquote><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-icon-list uagb-block-a1d2cb32\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-e49a01a6\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 256 512\"><path d=\"M256 448c0 17.67-14.33 32-32 32H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h64V123.8L49.75 154.6C35.02 164.5 15.19 160.4 5.375 145.8C-4.422 131.1-.4531 111.2 14.25 101.4l96-64c9.828-6.547 22.45-7.187 32.84-1.594C153.5 41.37 160 52.22 160 64.01v352h64C241.7 416 256 430.3 256 448z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Une adresse IP qui identifie votre <em>h\u00f4te<\/em> sur le r\u00e9seau o\u00f9 il est connect\u00e9.<br>La commande \u00ab\u00a0<strong>ip address\u00a0\u00bb<\/strong> ou \u00ab\u00a0<strong>ip a<\/strong>\u00a0\u00bb en raccourci, permet d&rsquo;afficher les interfaces r\u00e9seau avec les adresses IP associ\u00e9es.<\/span><\/div>\n<\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-group has-foreground-color has-text-color has-background is-layout-flow\" style=\"background-color:#cacaca;border-radius:20px;margin-top:10px;margin-bottom:10px;padding-top:3px;padding-right:3px;padding-bottom:3px;padding-left:3px\">\n<div class=\"wp-block-uagb-icon-list uagb-block-ccbb2ee2\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-86e58817\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">La commande retourne l&rsquo;interface \u00ab\u00a0<em>lo<\/em>\u00a0\u00bb qui correspond \u00e0 l&rsquo;interface de \u00ab\u00a0<em>loopback<\/em>\u00a0\u00bb (boucle locale), ainsi que l&rsquo;interface \u00ab\u00a0eth0\u00a0\u00bb correspondante \u00e0 la carte r\u00e9seau connect\u00e9e \u00e0 mon r\u00e9seau local. On peut voir que l&rsquo;adresse IP actuelle sur cette carte est \u00ab\u00a0<em>38.242.201.85\/20<\/em>\u00ab\u00a0.<\/span><\/div>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-icon-list uagb-block-eef0309c\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-6b8417ed\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 320 512\"><path d=\"M320 448c0 17.67-14.33 32-32 32H32c-13.08 0-24.83-7.953-29.7-20.09c-4.859-12.12-1.859-26 7.594-35.03l193.6-185.1c31.36-30.17 33.95-80 5.812-113.4c-14.91-17.69-35.86-28.12-58.97-29.38C127.4 95.83 105.3 103.9 88.53 119.9L53.52 151.7c-13.08 11.91-33.33 10.89-45.2-2.172C-3.563 136.5-2.594 116.2 10.48 104.3l34.45-31.3c28.67-27.34 68.39-42.11 108.9-39.88c40.33 2.188 78.39 21.16 104.4 52.03c49.8 59.05 45.2 147.3-10.45 200.8l-136 130H288C305.7 416 320 430.3 320 448z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Un masque de sous-r\u00e9seau qui indique la partie de votre adresse qui caract\u00e9rise le r\u00e9seau local sur lequel votre h\u00f4te est connect\u00e9, et lui permet de d\u00e9terminer, pour n&rsquo;importe quelle adresse IP, si celle-ci fait ou non partie du r\u00e9seau local<\/span><\/div>\n\n\n\n<div class=\"wp-block-uagb-icon-list-child uagb-block-69bf2bff\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 320 512\"><path d=\"M320 344c0 74.98-61.02 136-136 136H103.6c-46.34 0-87.31-29.53-101.1-73.48c-5.594-16.77 3.484-34.88 20.25-40.47c16.75-5.609 34.89 3.484 40.47 20.25c5.922 17.77 22.48 29.7 41.23 29.7H184c39.7 0 72-32.3 72-72s-32.3-72-72-72H80c-13.2 0-25.05-8.094-29.83-20.41C45.39 239.3 48.66 225.3 58.38 216.4l131.4-120.4H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h240c13.2 0 25.05 8.094 29.83 20.41c4.781 12.3 1.516 26.27-8.203 35.19l-131.4 120.4H184C258.1 208 320 269 320 344z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Une passerelle par d\u00e9faut qui indique l&rsquo;adresse IP \u00e0 laquelle il faut transmettre les paquets IP destin\u00e9s \u00e0 des h\u00f4tes situ\u00e9s hors du r\u00e9seau local, pour qu&rsquo;ils soient <em>rout\u00e9s<\/em> vers le r\u00e9seau local de leur destinataire.<br>Afin de conna\u00eetre la passerelle par d\u00e9faut utilis\u00e9e actuellement par notre machine, plusieurs solutions sont possibles. La commande suivante retourne les routes locales, ainsi que la route par d\u00e9faut, ce qui donne l&rsquo;adresse IP de la passerelle.<br><strong>ip route show<\/strong><\/span><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group has-border-color has-background-color has-text-color has-background is-layout-flow\" style=\"background-color:#282c34;border-color:#cccccc;border-radius:20px;border-width:5px;font-size:17px;margin-bottom:15px;padding-top:3px;padding-right:3px;padding-bottom:3px;padding-left:3px\">\n<div class=\"wp-block-uagb-icon-list uagb-block-27d409f3\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-fd65cf8f\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M160 416H96c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h64c17.67 0 32-14.33 32-32S177.7 32 160 32H96C42.98 32 0 74.98 0 128v256c0 53.02 42.98 96 96 96h64c17.67 0 32-14.33 32-32S177.7 416 160 416zM502.6 233.4l-128-128c-12.51-12.51-32.76-12.49-45.25 0c-12.5 12.5-12.5 32.75 0 45.25L402.8 224H192C174.3 224 160 238.3 160 256s14.31 32 32 32h210.8l-73.38 73.38c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0l128-128C515.1 266.1 515.1 245.9 502.6 233.4z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">robert@vmi000000:~$ ip route show<br>default via 38.242.192.1 dev eth0 onlink<br>38.242.192.0\/20 via <strong>38.242.192.1<\/strong> dev eth0<\/span><\/div>\n\n\n\n<div class=\"wp-block-uagb-icon-list-child uagb-block-2c16f89f\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Dans mon cas, la passerelle est \u00ab\u00a038.242.201.1\u00a0\u00bb.<\/span><\/div>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-icon-list uagb-block-a0e5ee5e\"><div class=\"uagb-icon-list__wrap\">\n<div class=\"wp-block-uagb-icon-list-child uagb-block-f0fb04e8\"><span class=\"uagb-icon-list__source-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M384 334.2c0 17.67-14.33 32-32 32h-32v81.78c0 17.67-14.33 32-32 32s-32-14.33-32-32v-81.78H32c-10.97 0-21.17-5.625-27.05-14.89c-5.859-9.266-6.562-20.89-1.875-30.81l128-270.2C138.6 34.33 157.8 27.56 173.7 35.09c15.97 7.562 22.78 26.66 15.22 42.63L82.56 302.2H256V160c0-17.67 14.33-32 32-32s32 14.33 32 32v142.2h32C369.7 302.2 384 316.6 384 334.2z\"><\/path><\/svg><\/span><span class=\"uagb-icon-list__label\">Une ou plusieurs adresses de serveurs DNS auxquels le syst\u00e8me ira demander les correspondances entre noms de domaine (<em>www.webOdesign<\/em>.net) et adresses IP (38.242.201.85).<br>Pour la trouver, il faut regarder le contenu du fichier \u00ab\u00a0<em><strong>\/etc\/resolv.conf<\/strong><\/em>\u00ab\u00a0<\/span><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained\" style=\"font-size:14px;margin-bottom:10px;padding-top:0px;padding-bottom:5px\">\n<pre class=\"wp-block-code has-background-color has-text-color uag-hide-tab uag-hide-mob\" style=\"border-radius:15px;border-width:5px;padding-top:5px;padding-bottom:5px\"><code lang=\"bash\" class=\"language-bash\">robert@vmi000000:~$ sudo cat \/etc\/resolv.conf\nDynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)\nDO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\n127.0.0.53 is the systemd-resolved stub resolver.\nrun &quot;resolvectl status&quot; to see details about the actual nameservers.\nnameserver 161.97.189.51\nnameserver 161.97.189.52<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-background-color has-text-color uag-hide-desktop\" style=\"border-radius:15px;border-width:5px;padding-top:5px;padding-bottom:5px\"><code lang=\"bash\" class=\"language-bash\">robert@vmi000000:~$ sudo cat \/etc\/resolv.conf\nrun &quot;resolvectl status&quot; see details about nameservers.\nnameserver 161.97.189.51\nnameserver 161.97.189.52<\/code><\/pre>\n<\/div>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow\" style=\"flex-basis:170px\">\n<p><\/p>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p><em><strong>Les bases du scripting Shell<\/strong>\u00a0:<\/em><br \/>Permet \u00e0 ceux qui n&rsquo;ont jamais d\u00e9velopp\u00e9 de pouvoir<strong> comprendre le fonctionnement du scripting <\/strong>et d<strong>&lsquo;\u00eatre capable de mettre en place leurs premiers scripts<\/strong> gr\u00e2ce \u00e0 une m\u00e9thode pas \u00e0 pas et \u00e0 quelques exercices et quizz permettant d&rsquo;asseoir les connaissances acquises.\u00a0Vous y verrez notamment \u00e0 quoi correspond le\u00a0<em>Shebang<\/em>, comment\u00a0<em>ex\u00e9cuter vos scripts<\/em>, et qu&rsquo;est-ce que sont les\u00a0<em>variables<\/em>.\u00a0Vous mettrez ensuite en place vos premiers tests avec les conditions\u00a0<em>If\u00a0<\/em>et les boucles\u00a0<em>For<\/em>\u00a0et\u00a0<em>While<\/em>. Vous pourrez<em>\u00a0demander \u00e0 l&rsquo;utilisateur de saisir des donn\u00e9es\u00a0<\/em>que votre script sera capable d&rsquo;interpr\u00e9ter et d&rsquo;utiliser par la suite&#8230;<\/p>\n","protected":false},"author":3,"featured_media":1401,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"qubely_global_settings":"","qubely_interactions":"","_uag_custom_page_level_css":""},"categories":[18,21],"tags":[],"qubely_featured_image_url":{"full":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"portraits":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",540,281,false],"thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-150x150.jpg",150,150,true],"medium":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-300x156.jpg",300,156,true],"medium_large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-768x400.jpg",768,400,true],"large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"1536x1536":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"2048x2048":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"qubely_landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"qubely_portrait":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",540,281,false],"qubely_thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",140,73,false]},"qubely_author":{"display_name":"R\u00e9mi","author_link":"https:\/\/www.webodesign.net\/?author=3"},"qubely_comment":0,"qubely_category":"<a href=\"https:\/\/www.webodesign.net\/?cat=18\" rel=\"category\">Formations<\/a> <a href=\"https:\/\/www.webodesign.net\/?cat=21\" rel=\"category\">Formations Linux<\/a>","qubely_excerpt":"Les bases du scripting Shell\u00a0:Permet \u00e0 ceux qui n'ont jamais d\u00e9velopp\u00e9 de pouvoir comprendre le fonctionnement du scripting et d'\u00eatre capable de mettre en place leurs premiers scripts gr\u00e2ce \u00e0 une m\u00e9thode pas \u00e0 pas et \u00e0 quelques exercices et quizz permettant d'asseoir les connaissances acquises.\u00a0Vous y verrez notamment \u00e0 quoi correspond le\u00a0Shebang, comment\u00a0ex\u00e9cuter vos\u2026","uagb_featured_image_src":{"full":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-150x150.jpg",150,150,true],"medium":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-300x156.jpg",300,156,true],"medium_large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux-768x400.jpg",768,400,true],"large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"1536x1536":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"2048x2048":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"qubely_landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",940,490,false],"qubely_portrait":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",540,281,false],"qubely_thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2022\/10\/Scripting-Shell-Bash-Automatiser-votre-systeme-Linux.jpg",140,73,false]},"uagb_author_info":{"display_name":"R\u00e9mi","author_link":"https:\/\/www.webodesign.net\/?author=3"},"uagb_comment_info":0,"uagb_excerpt":"Les bases du scripting Shell\u00a0:Permet \u00e0 ceux qui n'ont jamais d\u00e9velopp\u00e9 de pouvoir comprendre le fonctionnement du scripting et d'\u00eatre capable de mettre en place leurs premiers scripts gr\u00e2ce \u00e0 une m\u00e9thode pas \u00e0 pas et \u00e0 quelques exercices et quizz permettant d'asseoir les connaissances acquises.\u00a0Vous y verrez notamment \u00e0 quoi correspond le\u00a0Shebang, comment\u00a0ex\u00e9cuter vos\u2026","_links":{"self":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/1304"}],"collection":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1304"}],"version-history":[{"count":46,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/1304\/revisions"}],"predecessor-version":[{"id":1402,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/1304\/revisions\/1402"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/media\/1401"}],"wp:attachment":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}