Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:script_shell [Le 01/10/2025, 10:53] – [La commande test] -e vs -f et `! -e` bcag2tutoriel:script_shell [Le 18/05/2026, 23:29] (Version actuelle) – [Méthode dans un terminal] typos krodelabestiole
Ligne 56: Ligne 56:
 ==== Méthode dans un terminal ==== ==== Méthode dans un terminal ====
  
-Il suffit de se placer dans le dossier où est le script, et de lancer : <code bash>bash nom_du_script</code> +Pour  utiliser un script, on peut le lancer avec la commande servant à l'interpréter. Pour utiliser l'[[#Les différents types de shells|interpréteur]] [[:bash]] (par défaut sur Ubuntu), ce sera la commande ''[[man>bash]]''
-mais pas toujours bash ( dépend du langage du script )+<code bash>bash /chemin/du/script.sh</code>
  
-ou si vous voulez l'exécuter par son  nom , il faut le rendre exécutable avec ''chmod''Pour ceci tapez la commande qui suit : <code bash>chmod +x nom_du_script</code>+La commande est à adapter selon l'application et selon le [[:chemins|chemin]] du scriptSi le script se trouve dans le [[:chemins#chemin_relatif|répertoire courant]], on peut se contenter de la commande : 
 +<code bash>bash script.sh</code>
  
-Puis vous pouvez exécuter le script en faisant : <code bash>./nom_du_script</code> +Grâce au [[#shebang]], on peut aussi interpréter un script simplement en l'appelant par son nom.\\ 
-mais pourquoi le ./ ?+Il faut avant tout le rendre exécutable avec ''chmod'' (voir //[[:Permissions]]//).\\ 
 +Pour ceci entrer la commande : 
 +<code bash>chmod +x script.sh</code> 
 + 
 +Puis exécuter le script avec : 
 +<code bash>./script.sh</code>
  
 === Le chemin ./ === === Le chemin ./ ===
  
-Il peut être intéressant d'ajouter un répertoire au "PATH" pour pouvoir exécuter ses scripts sans avoir à se placer dans le bon dossier. +Ce ''./'' dépend du [[:chemins|chemin]] du script : ''./'' signifie "[[:chemins#chemin_relatif|répertoire courant]]et permet au système d'appeler un script hors ''[[#$PATH]]''.
-Je m'explique, quand vous tapez une commande ("lspar exemple), le shell regarde dans le PATH qui lui indique où chercher le code de la commande.+
  
-Pour voir à quoi ressemble votre PATH, tapez dans votre console:+=== $PATH === 
 + 
 +La [[:variables_d_environnement|variable d'environnement]] ''[[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]]'' définit les répertoires où le système doit chercher les fichiers exécutables. 
 + 
 +En plaçant un fichier exécutable (comme un script) dans l'un de ces répertoires, il n'est pas nécessaire de spécifier son [[:chemins|chemin]] complet pour le lancer. Le nom du fichier suffit.\\ 
 +Ubuntu dispose d'un répertoire des [[:arborescence#binaires personnels]] à cet effet dans le [[:arborescence#répertoire personnel]] de chaque [[:utilisateur]], qu'on peut manipuler sans les [[:permissions administrateur]]. 
 + 
 +Pour voir à quoi ressemble ''$PATH''entrer la commande :
   echo $PATH   echo $PATH
  
-Cette commande chez moi donnait initialement :+Cette commande retourne par exemple :
   /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games   /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
  
-C'est à dire que le shell va aller voir si la définition de la commande tapée ("ls" pour continuer sur le même exemple) se trouve dans **/usr/local/bin** puis dans **/usr/bin**... jusqu'à ce qu'il la trouve.+C'est à dire que le système va aller voir si un script ou un exécutable se trouve dans ''/usr/local/bin'', puis dans ''/usr/bin'', puis dans ''/bin'', etc.
  
-Ajouter un répertoire au PATH peut donc être très pratique. Par convention, ce répertoire s'appelle **bin** et se place dans votre répertoire personnel. Si votre répertoire personnel est /home/toto, ce répertoire sera donc **/home/toto/bin**. +On peut aussi ajouter un répertoire particulier à la variable ''$PATH''.\\ 
-Pour pouvoir utiliser vos scripts en tapant directement leur nom (sans le "./") depuis n'importe quel répertoire de votre ordinateur, il vous suffit d'indiquer au shell de chercher aussi dans ce nouveau dossier en l'ajoutant au PATH+Pour ceci, il suffit d'entrer :
-Pour ceci, il suffit de faire :+
   export PATH=$PATH:$HOME/bin   export PATH=$PATH:$HOME/bin
 +où ''$HOME/bin'' est le répertoire concerné.
  
 La commande La commande
Ligne 87: Ligne 99:
   /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/toto/bin   /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/toto/bin
  
-et je peux lancer le script appelé "monScriptsitué dans "/home/toto/binen tapant directement :  monScript+et on peut lancer le script appelé ''monScript.sh'' situé dans ''/home/toto/bin'' en entrant directement :  
 +  monScript.sh
  
-<note tip>Cette procédure est pour une modification temporaire du PATH et qui sera donc effacée à la fin de la session. Pour rendre la modification permanente, ajouter la commande dans le fichier texte caché .bashrc se trouvant dans votre dossier personnel ainsi que dans le dossier /root.</note>+<note tip> 
 +Cette modification du ''$PATH'' est seulement temporaire et sera effacée à la fin de la [[:session utilisateur|session]].\\ 
 +Pour rendre la modification permanente, ajouter cette commande dans le fichier caché ''~/.bashrc'' se trouvant dans le [[:arborescence#répertoire personnel]]. 
 +</note>
  
-<note important>Dans les dernières versions de ubuntu (12.04 +) si le dossier $HOME/bin existe il est automatiquement ajouté au PATH. La commande est incluse dans le fichier ~/.profile lancé lors de toutes sessions (graphique ou console).</note>+<note important> 
 +En l'occurrence si le répertoire ''$HOME/bin'' existe il est automatiquement ajouté au ''$PATH''. La commande est incluse dans le fichier ''~/.profile'' lancé lors de toutes sessions (graphique ou console). 
 +</note>
  
 === Les différents types de shells === === Les différents types de shells ===
  
-Comme vous avez sûrement dû l'entendre, il existe différents types de shells ou en bon français, interpréteurs de commandes :+Il existe différents types de //shells//ou interpréteurs de commandes : 
 + 
 +  * ''[[wpfr>Debian_Almquist_shell|dash]]'' (//Debian Almquist shell//) : //shell// plus léger que bash, installé par défaut sur Ubuntu 
 +  * ''[[:bash]]'' (//Bourne Again SHell//) : conçu par le projet GNU, shell linux ; le //shell// par défaut sur Ubuntu 
 +  * ''rbash'' : un //shell// restreint basé sur ''bash''. Il existe de nombreuses variantes de ''bash'' 
 +  * ''csh'', ''tcsh'' : //shell// C, créés par Bill Joy de Berkeley 
 +  * ''zsh'', //shell// C écrit par Paul Falstad 
 +  * ''ksh'' : //shell// korn écrits par David Korn((''pdksh'' Public Domain Korn Shell <=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[wp>Korn_shell#History|Korn shell History]])) 
 +  * ''rc'' : //shell// C, lui aussi conçu par le projet GNU 
 +  * ''tclsh'' : //shell// utilisant Tcl 
 +  * ''wish'' : //shell// utilisant Tk 
 + 
 +Il existe encore beaucoup d'autres types de //shells//.\\ Pour savoir quel type de //shell// est utilisé sur une machine, entrer la commande ''[[man>ps]]''
 + 
 +La commande ''[[man>sh]]'' est en fait un [[:lien_physique_et_symbolique|lien symbolique]] vers l'interpréteur de commandes par défaut : ''/usr/bin/dash''
 + 
 +<note> 
 +On  peut aussi écrire des scripts dans d'autres langages interprétés : 
 +  * ''[[:python]]'' 
 +  * ''[[:php]]'' 
 +  * ''[[:nodejs|node]]'' pour [[wpfr>JavaScript]] 
 +  * ''[[wpfr>Perl_(langage)|perl]]'' 
 +  * etc. 
 +</note>
  
-  * [[wpfr>Debian_Almquist_shell|dash]] (//Debian Almquist shell//) : shell plus léger que bash, installé par défaut sur Ubuntu ; +=== Shebang ===
-  * [[:bash]] (//Bourne Again SHell//) : conçu par le projet GNU, shell linux ; le shell par défaut sur Ubuntu ; +
-  * rbash : un shell restreint basé sur bash. Il existe de nombreuses variantes de bash ; +
-  * csh, tcsh : shells C, créés par Bill Joy de Berkeley ; +
-  * zsh, shell C écrit par Paul Falstad ; +
-  * ksh (<=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[http://en.wikipedia.org/wiki/Korn_shell#History|Korn shell History]]): shells korn écrits par David Korn, pdksh (Public Domain Korn Shell <=> ksh88) ; +
-  * rc : shell C, lui aussi conçu par le projet GNU ; +
-  * tclsh : shell utilisant Tcl ; +
-  * wish : shell utilisant Tk .+
  
-Il existe bien entendu beaucoup d'autres types de shells.\\ Pour savoir quel type de shell est présent sur une machine, aller dans un terminal et taper la commande **ps**.+Le [[wpfr>shebang]] est la déclaration en commentaire à la première ligne du script qui informe le système du chemin de l'interpréteur à utiliser, précédé des caractères ''#!''.
  
-La commande **sh** est en fait un lien symbolique vers l'interpréteur de commandes par défaut **/bin/dash**.+Pour ''[[man>bash]]'' il sera de la forme : 
 +<file>#!/bin/bash</file>
  
 ===== Les variables ===== ===== Les variables =====
-Il faut savoir que en bash les variables sont toutes des chaînes de caractères.\\+Il faut savoir qu'en bash les variables sont toutes des chaînes de caractères.\\
 Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur : Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur :
 il suffit de lui donner un nom et une valeur avec l'affectation égale : il suffit de lui donner un nom et une valeur avec l'affectation égale :
Ligne 391: Ligne 425:
 fi fi
 </code> </code>
 +<note tip>Simple ou double crochets ?(((EN) https://stackoverflow.com/questions/13542832/what-is-the-difference-between-single-and-double-square-brackets-in-bash et \\ (FR) https://blog.stephane-robert.info/docs/admin-serveurs/linux/exploiter/scripts/conditions-bash/#--vs---vs-))\\  
 +Les crochets simples [] correspondent à des tests de condition conformes au shell POSIX.\\  
 +Les doubles permettent d'avantage d'opérations dont les expressions rationelles ([[wpfr>Expression_régulière|REGEX]])\\  
 +Préférez les crochets simples pour une meilleure compatibilité. 
 +</note>
 === Explication === === Explication ===