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 07/10/2019, 14:07]
BugFollower [Les fonctions]
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>​+<​code ​bash>
 #!/bin/bash #!/bin/bash
 # This script will take an animated GIF and delete every other frame # This script will take an animated GIF and delete every other frame
Ligne 12: Ligne 13:
  
 # Make a copy of the file # Make a copy of the file
-cp $1 $2+cp "$1" "$2"
  
 # Get the number of frames # Get the number of frames
-numframes=`gifsicle $1 -I | grep -P "\d+ images" ​--only-matching ​| grep -P "\d+" ​--only-matching`+numframes=$(gifsicle ​--info "$1" \ 
 +              ​| grep --perl-regexp ​--only-matching ​'\d+ images'​ \ 
 +              | grep --perl-regexp ​--only-matching ​'​\d+'​)
  
 # Deletion # Deletion
 let i=0 let i=0
-while [[ $i -lt $numframes ​ ​]]; ​do+while test $i -lt $numframes 
 +do
     rem=$(( $i % 2 ))     rem=$(( $i % 2 ))
  
-    if $rem -eq 0 ]+    if test $rem -eq 0
     then     then
-        gifsicle $2 --delete "#"​$(($i/​2)) -o $2 +        gifsicle ​"$2" ​--delete "#"​$(($i/​2)) -o "$2"
     fi     fi
  
Ligne 30: 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 52: 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 nom_du_script</​code>​+Il suffit de se placer dans le dossier où est le script, et de lancer : <​code ​bash>bash nom_du_script</​code>​
 mais pas toujours bash ( dépend du langage du script ) mais pas toujours bash ( dépend du langage du script )
  
-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>​chmod +x nom_du_script</​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>​
  
-Puis vous pouvez exécuter le script en faisant : <​code>​./​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 73: 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 93: Ligne 98:
  
   * [[wpfr>​Debian_Almquist_shell|dash]] (//Debian Almquist shell//) : shell plus léger que bash, installé par défaut sur Ubuntu ;   * [[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 ;+  * [[: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 ;   * 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 ;   * csh, tcsh : shells C, créés par Bill Joy de Berkeley ;
Ligne 99: 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 115: Ligne 121:
 Attention: pas d'​espace ni avant ni après le signe "​="​ .\\ Attention: pas d'​espace ni avant ni après le signe "​="​ .\\
 Autre exemple avec une commande avec arguments : Autre exemple avec une commande avec arguments :
-<​code>​nbre_lignes=$(wc -l < fichier.ext)</​code>​+<​code ​bash>​nbre_lignes=$(wc -l < fichier.ext)</​code>​
 //​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ . //​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ .
  
Ligne 130: Ligne 136:
  
 Et avec des chemins de répertoires : Et avec des chemins de répertoires :
-<​code>​+<​code ​bash>
 chemin_de_base="/​home/​username/​un repertoire avec espaces"​ chemin_de_base="/​home/​username/​un repertoire avec espaces"​
 chemin_complet="​$chemin_de_base/​repertoire"​ chemin_complet="​$chemin_de_base/​repertoire"​
 </​code>​ </​code>​
-<note important>​Comme on le voit ci-dessus si on met une chaîne de caractères avec des espaces entre guillemets, la variable la prend bien mais attention à l'​utiliser aussi avec des guillemets… <​code>​rsync -av "​$chemin_complet"​ …</​code>​sinon les espaces reprennent leurs rôles de séparateur!</​note>​+<note important>​Comme on le voit ci-dessus si on met une chaîne de caractères avec des espaces entre guillemets, la variable la prend bien mais attention à l'​utiliser aussi avec des guillemets… <​code ​bash>rsync -av "​$chemin_complet"​ …</​code>​sinon les espaces reprennent leurs rôles de séparateur!</​note>​
 Des variables système permettent d'​accélérer la saisie et la compréhension. Des variables système permettent d'​accélérer la saisie et la compréhension.
 Pour voir les variables d'​environnement de votre système tapez simplement : Pour voir les variables d'​environnement de votre système tapez simplement :
Ligne 174: 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 191: Ligne 194:
 <code bash> <code bash>
 len=${#​tab[*]} ou echo ${#tab[@]} len=${#​tab[*]} ou echo ${#tab[@]}
- 
 </​code>​ </​code>​
  
Ligne 205: 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 214: 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 222: 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 258: Ligne 260:
 done done
 echo "Vous avez réussi !" echo "Vous avez réussi !"
 +</​code>​
 +
 +==== L'​arithmétique ====
 +<code bash>(( variable = 2 + $autre_var * 5 ))</​code>​
 +Exemple: besoin de définir des plages de valeurs (1 à 500 puis 501 à 1000 puis 1001 à 1500…)
 +<code bash>
 +id_per_step = 500
 +for (( i=0; i<8; i++ )); do
 + (( min_step_id = 1 + $i * $id_per_step ))
 + (( max_step_id = (( $i + 1 )) * $id_per_step ))
 + echo "​$min_step_id to $max_step_id "
 +done
 </​code>​ </​code>​
  
Ligne 362: 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 439: 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 540: 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 567: Ligne 580:
 case $reps in case $reps in
   help | hlp )   help | hlp )
-     echo "propos de TS --> about"+     echo "À propos de TS --> about"
      echo "ls --> liste les fichiers"​      echo "ls --> liste les fichiers"​
      echo "rm --> détruit un fichier (guidé)"​      echo "rm --> détruit un fichier (guidé)"​
Ligne 598: 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 607: Ligne 620:
 ==== La structure for ==== ==== La structure for ====
  
-L'​instruction `for` exécute ce qui est dans son bloc un nombre de fois prédéfini. Sa syntaxe est la suivante :+L'​instruction `for` exécute ce qui est dans son bloc un nombre de fois prédéfini. Sa syntaxe est la suivante ​:
 <code bash> <code bash>
 for variable in valeurs; do for variable in valeurs; do
Ligne 614: Ligne 627:
 </​code>​ </​code>​
  
-Comme vous l'​aurez sans doute remarqué, on assigne une valeur différente à //​variable//​ à chaque itération. On peut aussi très facilement utiliser des fichiers comme "​valeur"​. Rien ne vaut un exemple :+ou le classique:​ 
 +<code bash> 
 +for (( i=$min; i<=$max; i++ )); do 
 +    instructions_avec_i # ou pas 
 +done 
 +</​code>​ 
 + 
 +Comme vous l'​aurez sans doute remarqué, on assigne une valeur différente à //​variable//​ à chaque itération. On peut aussi très facilement utiliser des fichiers comme "​valeur"​.\\ 
 +Rien ne vaut un exemple :
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 622: Ligne 643:
 </​code>​ </​code>​
  
-On peut voir une syntaxe un peu particulière : <code bash>​$(sort *.txt)</​code>​Ceci sert à +On peut voir une syntaxe un peu particulière : 
-indiquer que ce qui est entre les parenthèses est une commande à exécuter.+<code bash>​$(sort *.txt)</​code>​ 
 +Ceci sert à indiquer que ce qui est entre les parenthèses est une commande à exécuter.
  
-On peut aussi utiliser ​ +On peut aussi utiliser cette instruction simplement avec des nombres, cela permet de connaître le nombre d'​itérations :
-cette instruction simplement avec des nombres, cela permet de connaître le nombre d'​itérations :+
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 634: Ligne 655:
 </​code>​ </​code>​
  
-On peut très bien aussi utiliser d'​autres types de variables, comme par exemple des chaînes de  +On peut très bien aussi utiliser d'​autres types de variables, comme par exemple des chaînes de caractères :
-caractères :+
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 674: 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 701: Ligne 721:
  
  
-==== Extraire des sous chaines ​====+==== Extraire des sous-chaînes ​====
  
-Pour extraire une chaine ​d'​une ​chaine ​on utilise : **${ ''​chaine''​ : ''​position''​ : ''​nombre de caractères''​ }** (n'​oubliez pas le **:** qui sépare les "​paramètres"​).+Pour extraire une chaîne ​d'​une ​chaîne ​on utilise : **${ ''​chaîne''​ : ''​position''​ : ''​nombre de caractères''​ }** (n'​oubliez pas le **:** qui sépare les "​paramètres"​).
  
-<note important>​Dans la partie ''​chaine''​ pour faire référence à une variables ​**on ne met pas de $** ! Tandis que dans les autres options le $ est nécessaire (sauf si vous n'​utilisez pas de variable). Il y a de quoi s’emmêler les pinceaux. Si vous n'avez pas compris (ce n'est pas étonnant), les exemples de cette partie vous aideront beaucoup.</​note>​+<note important>​Dans la partie ''​chaîne''​ pour faire référence à une variable ​**on ne met pas de $** ! Tandis que dans les autres options le $ est nécessaire (sauf si vous n'​utilisez pas de variable). Il y a de quoi s’emmêler les pinceaux. Si vous n'avez pas compris (ce n'est pas étonnant), les exemples de cette partie vous aideront beaucoup.</​note>​
  
-Par exemple pour savoir ce que l'on aime manger en fonction de sa langue (vous êtes alors vraiment ultra geek 8-O !)+Par exemple pour savoir ce que l'on aime manger en fonction de sa langue (vous êtes alors vraiment ultra geek 8-O !) :
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 722: Ligne 742:
 #Noter que $LANG n'a pas le préfixe '​$'​. ${$LANG:​0:​2} ne fonctionne pas ! #Noter que $LANG n'a pas le préfixe '​$'​. ${$LANG:​0:​2} ne fonctionne pas !
 </​code>​ </​code>​
-puis +puis : 
-<​code>​+<​code ​bash>
 $ ./​favoritefood $ ./​favoritefood
 Vous aimez les moules frites ! Vous aimez les moules frites !
Ligne 733: Ligne 753:
 :'-( :'-(
 </​code>​ </​code>​
-Ce code illustre un moyen de faire des scripts multilingues+Ce code illustre un moyen de faire des scripts multilingues ​.
  
-Une variante permet de tronquer uniquement le début de la chaine. C'est **${ ''​chaine''​ : ''​nombre de caractères''​}**  +Une variante permet de tronquer uniquement le début de la chaîne. C'est **${ ''​chaîne''​ : ''​nombre de caractères''​}** ​.\\ 
-Le tout peut s'​illustrer par un (vraiment) petit exemple+Le tout peut s'​illustrer par un (vraiment) petit exemple ​:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
-#truncbegin <chaine> <​nombre>​+#truncbegin <chaîne> <​nombre>​
 echo ${1:$2} echo ${1:$2}
 #Noter bien que echo ${1:2} tronquerait les 2 premiers caractères (et non le nombre indiqué par le 2e paramètre). #Noter bien que echo ${1:2} tronquerait les 2 premiers caractères (et non le nombre indiqué par le 2e paramètre).
 </​code>​ </​code>​
-puis  +puis : 
-<​code>​+<​code ​bash>
 $ ./​truncbegin "Hello world !" 5 $ ./​truncbegin "Hello world !" 5
 world ! world !
Ligne 759: Ligne 779:
 echo -e '​\033[A;​B;​Cm toto \033[0m'​ echo -e '​\033[A;​B;​Cm toto \033[0m'​
 </​code>​ </​code>​
-Dans la commande passée ci-dessus, nous pouvons constater qu’il y a 3 paramètres présentsA, B et C.+Dans la commande passée ci-dessus, nous pouvons constater qu’il y a 3 paramètres présentsA, B et C.\\
 A : correspond à un effet affecté au texte affiché A : correspond à un effet affecté au texte affiché
 B : correspond à la couleur du texte B : correspond à la couleur du texte
Ligne 768: Ligne 788:
 === Présentation des différentes valeurs Effet === === Présentation des différentes valeurs Effet ===
  
-Nous allons commencer par les différents effets ​possible ​:+Nous allons commencer par les différents effets ​possibles ​:
  
 ^Code^Effet^ ^Code^Effet^
Ligne 791: Ligne 811:
 === Présentation des différentes valeurs des couleurs === === Présentation des différentes valeurs des couleurs ===
  
-Maintenant que nous avons présenté les différents effets possibles d’attribuer à du texte, nous allons nous attaquer aux couleurs. Chaque couleur ​à 2 valeurs,la première utilisée pour la couleur du texte, et la seconde pour la couleur du fond.+Maintenant que nous avons présenté les différents effets possibles d’attribuer à du texte, nous allons nous attaquer aux couleurs.\\ 
 +Chaque couleur ​2 valeurs, la première utilisée pour la couleur du texte, et la seconde pour la couleur du fond.
 ^Couleur^Couleur texte^Couleur fond^ ^Couleur^Couleur texte^Couleur fond^
 |Noir|30|40| |Noir|30|40|
Ligne 810: 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'exemple ​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 828: 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 854: 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 872: 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.1570450042.txt.gz
  • Dernière modification: Le 07/10/2019, 14:07
  • par BugFollower