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édentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:script_shell [Le 31/12/2020, 17:19]
84.101.133.79 [Introduction aux scripts shell]
tutoriel:script_shell [Le 29/02/2024, 12:55] (Version actuelle)
Amiralgaby ancienne révision (Le 11/09/2022, 12:20) restaurée
Ligne 1: Ligne 1:
 {{tag>​programmation script shell console tutoriel}} {{tag>​programmation script shell console tutoriel}}
----+ 
 +----
  
 ====== Introduction aux scripts shell ====== ====== Introduction aux scripts shell ======
  
-Un script shell permet d'​automatiser une série d'​opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle. ​+Un script shell permet d'​automatiser une série d'​opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle.
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 33: Ligne 34:
 done done
 </​code>​ </​code>​
-=====Pour faire qu'un script soit exécutable ===== 
  
 +=====Pour faire qu'un script soit exécutable =====
 ==== Méthode graphique ==== ==== Méthode graphique ====
  
 Votre script est un simple fichier texte, par défaut il s'​ouvre donc avec l'​éditeur de texte défini par défaut (ex : [[:​gedit|Gedit]] dans une session Unity ou Gnome).\\ Votre script est un simple fichier texte, par défaut il s'​ouvre donc avec l'​éditeur de texte défini par défaut (ex : [[:​gedit|Gedit]] dans une session Unity ou Gnome).\\
-Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés.\\ +Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés.
 Pour cela faites un clic droit sur son icône, et dans l'​onglet "​Permissions"​ des "​Propriétés",​ cocher la case //"​autoriser l'​exécution du fichier comme un programme"//​. Pour cela faites un clic droit sur son icône, et dans l'​onglet "​Permissions"​ des "​Propriétés",​ cocher la case //"​autoriser l'​exécution du fichier comme un programme"//​.
  
Ligne 62: Ligne 63:
 Puis vous pouvez exécuter le script en faisant : <code bash>​./​nom_du_script</​code>​ Puis vous pouvez exécuter le script en faisant : <code bash>​./​nom_du_script</​code>​
 mais pourquoi le ./ ? mais pourquoi le ./ ?
 +
 === Le chemin ./ === === Le chemin ./ ===
  
Ligne 76: Ligne 78:
  
 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**. 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**.
-Pour pouvoir utiliser ​mes scripts en tapant directement leur nom (sans le "​./"​) depuis n'​importe quel répertoire de mon ordinateur, il me suffit d'​indiquer au shell de chercher aussi dans ce nouveau dossier en l'​ajoutant au 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 de faire : Pour ceci, il suffit de faire :
   export PATH=$PATH:​$HOME/​bin   export PATH=$PATH:​$HOME/​bin
Ligne 102: Ligne 104:
   * 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) ;   * 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 ;   * rc : shell C, lui aussi conçu par le projet GNU ;
-  * tclsh : shell utilisant Tcl ;                         +  * tclsh : shell utilisant Tcl ; 
-  * wish : shell utilisant Tk .      +  * 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**. 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**.
  
 La commande **sh** est en fait un lien symbolique vers l'​interpréteur de commandes par défaut : **/​bin/​dash**. La commande **sh** est en fait un lien symbolique vers l'​interpréteur de commandes par défaut : **/​bin/​dash**.
 +
 ===== Les variables ===== ===== Les variables =====
 Il faut savoir que en bash les variables sont toutes des chaînes de caractères.\\ Il faut savoir que 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 :
 <code bash> <code bash>
Ligne 177: Ligne 180:
 </​code>​ </​code>​
  
-Exemple: un sleep interactif pour illustrer $! (Cf. [[:​tutoriel:​script_shell#​les_fonctions|les fonctions]]) . +Exemple: un sleep interactif pour illustrer $! (Cf. [[:​tutoriel:​script_shell#​les_fonctions|les fonctions]]).\\ 
- +
 Pour déclarer un tableau, plusieurs méthodes : Pour déclarer un tableau, plusieurs méthodes :
- 
 première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "​sh"​) : première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "​sh"​) :
 <code bash>​tab=("​John Smith" "Jane Doe"​)</​code>​ <code bash>​tab=("​John Smith" "Jane Doe"​)</​code>​
Ligne 194: Ligne 194:
 <code bash> <code bash>
 len=${#​tab[*]} ou echo ${#tab[@]} len=${#​tab[*]} ou echo ${#tab[@]}
- 
 </​code>​ </​code>​
  
Ligne 208: Ligne 207:
 ou encore ( C style ) : ou encore ( C style ) :
 <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</​code>​ <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</​code>​
- 
  
  
Ligne 217: Ligne 215:
 renverront la même réponse. renverront la même réponse.
  
-NB2 : les tableaux sont séparés par un séparateur défini : l'IFS.  +NB2 : les tableaux sont séparés par un séparateur défini : l'​IFS. 
-Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne. ​+Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne.
 Il peut être forcé sur un autre caractère. Il peut être forcé sur un autre caractère.
 <code bash>​IFS=$SEPARATEUR</​code>​ <code bash>​IFS=$SEPARATEUR</​code>​
Ligne 225: Ligne 223:
   * une ponctuation (pe : ',',​ '​.',​ '​-'​...)   * une ponctuation (pe : ',',​ '​.',​ '​-'​...)
   * un caractère spécial : ($'​\t'​ : tabulation, $'​\n'​ : saut de ligne,...)   * un caractère spécial : ($'​\t'​ : tabulation, $'​\n'​ : saut de ligne,...)
 +
 ==== Les arguments en ligne de commande ==== ==== Les arguments en ligne de commande ====
  
Ligne 274: Ligne 273:
 done done
 </​code>​ </​code>​
 +
 ===== Vocabulaire ===== ===== Vocabulaire =====
 ==== La commande test ==== ==== La commande test ====
Ligne 376: Ligne 376:
  
 Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ». Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ».
- 
- 
  
 <code bash> <code bash>
Ligne 453: Ligne 451:
 -n $A # Vérifie si A existe (contient une chaîne). -n $A # Vérifie si A existe (contient une chaîne).
 </​code>​ </​code>​
 +
 ==== Les structures while et until ==== ==== Les structures while et until ====
  
Ligne 554: Ligne 553:
 Et plein d'​autres encore... Et plein d'​autres encore...
  
-== On mélange tout ça ==+=== On mélange tout ça ===
  
 Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions,​ Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions,​
Ligne 612: Ligne 611:
 </​code>​ </​code>​
  
-== Remarque ==+=== Remarque ​===
  
 Comme vous l'avez remarqué, l'​indentation a une place importante dans Comme vous l'avez remarqué, l'​indentation a une place importante dans
Ligne 695: Ligne 694:
 </​code>​ </​code>​
   ​   ​
-Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n'​importe quoi à une fonction. ​+Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n'​importe quoi à une fonction.
  
-Les fonctions peuvent être définies n'​importe où dans le code du moment qu'elle sont définies avant d'​être utilisées. Même si en bash les variables sont globales, il est possible de les déclarer comme locales au sein d'un fonction en la précédant du mot clé local: local ma_fonction .+Les fonctions peuvent être définies n'​importe où dans le code du moment qu'elles sont définies avant d'​être utilisées. Même si en bash les variables sont globales, il est possible de les déclarer comme locales au sein d'une fonction en la précédant du mot clé local: local ma_fonction .
  
 Exemple: un sleep interactif : Exemple: un sleep interactif :
Ligne 832: Ligne 831:
 ===== Exemples et exercices ===== ===== Exemples et exercices =====
  
-Comme indiqué dans la [[script_shell#​liens|section liens]] de cette page, de très bon exemples et exercices illustrent le cours disponible sur cette page :\\  +Comme indiqué dans la [[script_shell#​liens|section liens]] de cette page, de très bon exemples et exercices illustrent le cours disponible sur cette page : 
-[[http://​abs.traduc.org/​abs-5.3-fr/​apm.html|Guide avancé d'​écriture des scripts Bash - Une exploration en profondeur de l'art de la programmation shell]]+[[https://​abs.traduc.org/​abs-5.3-fr/​apm.html|Guide avancé d'​écriture des scripts Bash - Une exploration en profondeur de l'art de la programmation shell]]
  
 Aux structures décrites ci-dessus, il est nécessaire,​ pour réaliser des scripts poussés, de connaître les commandes shell les plus usitées.\\ Vous en trouverez une présentation sur cette autre page du wiki : [[projets:​ecole:​scripting:​initiation_au_shell]] . Aux structures décrites ci-dessus, il est nécessaire,​ pour réaliser des scripts poussés, de connaître les commandes shell les plus usitées.\\ Vous en trouverez une présentation sur cette autre page du wiki : [[projets:​ecole:​scripting:​initiation_au_shell]] .
  
-La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**.\\ +La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**.
 Vous pourrez trouver une liste de scripts pouvant servir d'​exemples sur la page [[:​scripts_utiles|scripts utiles]] du wiki. Vous pourrez trouver une liste de scripts pouvant servir d'​exemples sur la page [[:​scripts_utiles|scripts utiles]] du wiki.
  
-Une fois vos armes faites, proposez vos contributions sur le topic du forum [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=204074|[VOS SCRIPTS UTILES]]] et rajoutez un lien dans la page du wiki ci-dessus.+Une fois vos armes faites, proposez vos contributions sur le topic du forum [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=204074|[VOS SCRIPTS UTILES]]] et rajoutez un lien dans la page du wiki ci-dessus.
  
 ===== L'art d'​écrire un script ===== ===== L'art d'​écrire un script =====
Ligne 850: Ligne 849:
   * Commencer par : <code bash>#​!/​bin/​bash   * Commencer par : <code bash>#​!/​bin/​bash
 # Version du script</​code>​ # Version du script</​code>​
-  * Créer des fonctions pour des actions précises : +  * Créer des fonctions pour des actions précises :<code bash>​nom_de_la_fonction()
-<code bash> +
-nom_de_la_fonction()+
 { {
 ... ...
  
-} +}</​code>​
-</​code>​+
   * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash>​$CHEMIN_DU_DOSSIER/​$NOM_DU_FICHIER</​code>​   * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash>​$CHEMIN_DU_DOSSIER/​$NOM_DU_FICHIER</​code>​
   * Utiliser les entrées de commandes pour les fonctions :<code bash>​nom_de_la_fonction $1 $2 $3 ....</​code>​   * Utiliser les entrées de commandes pour les fonctions :<code bash>​nom_de_la_fonction $1 $2 $3 ....</​code>​
Ligne 876: Ligne 872:
         exit 100         exit 100
     fi     fi
-}</​code>​ainsi après chaque commande vous pouvez donner des codes d'​exécutions différents.+}</​code>​ ainsi après chaque commande vous pouvez donner des codes d'​exécutions différents.
  
 <note tip>​Astuce : le plus important dans tout programme est l'​algorithme utilisé.</​note>​ <note tip>​Astuce : le plus important dans tout programme est l'​algorithme utilisé.</​note>​
Ligne 894: Ligne 890:
 ===== Liens ===== ===== Liens =====
  
-  * (fr) http://​marcg.developpez.com/​ksh/​ : Pour ceux qui souhaitent aller plus loin dans la conception de script shell. +  * (fr) https://​marcg.developpez.com/​ksh/​ : Pour ceux qui souhaitent aller plus loin dans la conception de script shell. 
-  * (fr) [[http://​abs.traduc.org/​abs-fr/​|Guide avancé d'​écriture des scripts Bash]] : Un très bon tutoriel concernant la réalisation du script shell. C'est l'un des plus complets et les mieux détaillés disponibles en français. Il contient également [[http://​abs.traduc.org/​abs-5.3-fr/​apa.html|des exemples de script complets]], une [[http://​abs.traduc.org/​abs-5.3-fr/​apb.html|carte de référence]] (variables, tests...). Ce site est un site qui vaut réellement le détour pour tous ceux qui cherchent à créer des scripts complets en utilisant au mieux les performances du shell.+  * (fr) [[https://​abs.traduc.org/​abs-fr/​|Guide avancé d'​écriture des scripts Bash]] : Un très bon tutoriel concernant la réalisation du script shell. C'est l'un des plus complets et les mieux détaillés disponibles en français. Il contient également [[http://​abs.traduc.org/​abs-5.3-fr/​apa.html|des exemples de script complets]], une [[http://​abs.traduc.org/​abs-5.3-fr/​apb.html|carte de référence]] (variables, tests...). Ce site est un site qui vaut réellement le détour pour tous ceux qui cherchent à créer des scripts complets en utilisant au mieux les performances du shell.
   * (fr) https://​openclassrooms.com/​courses/​reprenez-le-controle-a-l-aide-de-linux : Un tutoriel très complet pour linux qui comporte quelques parties sur la réalisation de scripts bash.   * (fr) https://​openclassrooms.com/​courses/​reprenez-le-controle-a-l-aide-de-linux : Un tutoriel très complet pour linux qui comporte quelques parties sur la réalisation de scripts bash.
   * (en) [[http://​www.ibm.com/​developerworks/​library/​l-bash-parameters.html|Bash parameters and parameter expansions]]. En anglais mais contient de nombreux exemples concernant la gestion et l'​analyse des paramètres.   * (en) [[http://​www.ibm.com/​developerworks/​library/​l-bash-parameters.html|Bash parameters and parameter expansions]]. En anglais mais contient de nombreux exemples concernant la gestion et l'​analyse des paramètres.
   * (fr ) [[ftp://​ftp-developpez.com/​eric-sanchis/​IntroProgBash.pdf|Introduction à Bash]]   * (fr ) [[ftp://​ftp-developpez.com/​eric-sanchis/​IntroProgBash.pdf|Introduction à Bash]]
-  * (fr ) [[http://​www.scotchlinux.tuxfamily.org/​]] exemples de scripts bash, quelques trucs utiles ( fonctions, fonctions comme paramètres... ) +  * (fr ) [[http://​www.scotchlinux.tuxfamily.org/​]] exemples de scripts bash, quelques trucs utiles ( fonctions, fonctions comme paramètres... )
   * (en) [[https://​www.shellcheck.net/​]] Permet de corriger la syntaxe du script (parenthèse oubliée, graphie incorrecte d'une commande, un "​if"​ sans son "​fi",​ un "while sans son "​do"​ ou son "​done",​ etc...).   * (en) [[https://​www.shellcheck.net/​]] Permet de corriger la syntaxe du script (parenthèse oubliée, graphie incorrecte d'une commande, un "​if"​ sans son "​fi",​ un "while sans son "​do"​ ou son "​done",​ etc...).
 +
 ---- ----
 +
 //​Contributeurs:​ [[:​utilisateurs:​Gapz]],​ [[:​utilisateurs:​Gloubiboulga]] ,​[[:​utilisateurs:​sparky]] et [[:​utilisateurs:​deax_one]]//​ //​Contributeurs:​ [[:​utilisateurs:​Gapz]],​ [[:​utilisateurs:​Gloubiboulga]] ,​[[:​utilisateurs:​sparky]] et [[:​utilisateurs:​deax_one]]//​
  
  • tutoriel/script_shell.1609431577.txt.gz
  • Dernière modification: Le 31/12/2020, 17:19
  • par 84.101.133.79