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 21/04/2018, 14:23]
elleji [Écrire un script]
tutoriel:script_shell [Le 29/02/2024, 12:55] (Version actuelle)
Amiralgaby ancienne révision (Le 11/09/2022, 12:20) restaurée
Ligne 5: Ligne 5:
 ====== 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>
-===== Écrire un script ===== +
- +
-Si vous voulez écrire un script, vous avez deux possibilités : +
-  * soit vous tapez dans un shell toutes les commandes +
-  * ou alors vous rassemblez toutes les instructions copiées, +
- +
-À titre d'​exemple,​ saisissez ces quelques lignes dans votre éditeur préféré : +
- +
-<​code>​+
 #!/bin/bash #!/bin/bash
-Indique au système que l'​argument qui suit est le programme utilisé pour exécuter ce fichier +This script will take an animated GIF and delete every other frame 
-En règle générale, les "#" servent à mettre en commentaire le texte qui suit comme ici +Accepts two parameters: input file and output file 
-echo Mon premier script +Usage./<scriptfilenameinput.gif output.gif
-echo Liste des fichiers ​: +
-ls -la +
-</code>+
  
-Le résultat de ce script est d'​écrire à l'​écran « Mon premier script », puis +# Make a copy of the file 
-en dessous « Liste des fichiers :​ »,​ et enfin la liste des fichiers avec la +cp "​$1"​ "​$2"​
-commande ''​`ls -la`''​. ​+
  
-Comme vous l'avez compris, la commande ​''​`echo`''​ sert à écrire +# Get the number of frames 
-quelque chose à l'écran.+numframes=$(gifsicle --info "​$1"​ \ 
 +              | grep --perl-regexp --only-matching ​'\d+ images' ​\ 
 +              | grep --perl-regexp --only-matching '\d+')
  
-<note warning>​Cependant il vous faudra faire extrêmement attention à tous ces morceaux de code. Leur utilisation sans connaissance de votre part pourrait vous faire perdre de précieuses données. +# Deletion 
-exemple: surtout ne pas lancer cette commande rm -Rf /* qui supprime TOUS vos fichiers !!!! +let i=0 
-</​note>​+while test $i -lt $numframes 
 +do 
 +    ​rem=$(( $i % 2 ))
  
 +    if test $rem -eq 0
 +    then
 +        gifsicle "​$2"​ --delete "#"​$(($i/​2)) -o "​$2"​
 +    fi
 +
 +    let i=i+1 
 +done
 +</​code>​
  
-=====Pour ​exécuter ​un script ===== +=====Pour ​faire qu'un script ​soit exécutable ​=====
-il faut le rendre éxé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 51: Ligne 49:
    
 Sous [[:​Lubuntu]],​ si cette méthode ne fonctionne pas, vous devez d'​abord effectuer l'​opération suivante :\\ Sous [[:​Lubuntu]],​ si cette méthode ne fonctionne pas, vous devez d'​abord effectuer l'​opération suivante :\\
-  - Dans le menu principal, allez sur //Outils système// et faites un //clic droit -> Propriétés//​ sur le raccourci vers le terminal. Notez le contenu du champs ​//​Commande//​ et annulez.+  - Dans le menu principal, allez sur //Outils système// et faites un //clic droit -> Propriétés//​ sur le raccourci vers le terminal. Notez le contenu du champ //​Commande//​ et annulez.
   - Ouvrez votre gestionnaire de fichier [[:​pcmanfm|PCManFM]] et allez dans le menu supérieur sur //éditer -> Préférences//​ puis dans la fenêtre qui s'​ouvre sélectionnez //​Avancé//​.   - Ouvrez votre gestionnaire de fichier [[:​pcmanfm|PCManFM]] et allez dans le menu supérieur sur //éditer -> Préférences//​ puis dans la fenêtre qui s'​ouvre sélectionnez //​Avancé//​.
-  - Remplacez le contenu du champs ​//Terminal emulator// par le contenu du champs ​//​Commande//​ que vous avez pris soin de noter à la première étape.+  - Remplacez le contenu du champ //Terminal emulator// par le contenu du champ //​Commande//​ que vous avez pris soin de noter à la première étape.
   - Vous pouvez ensuite suivre la méthode graphique indiquée ci-dessus pour exécuter vos scripts shell.   - Vous pouvez ensuite suivre la méthode graphique indiquée ci-dessus pour exécuter vos scripts shell.
-  - Pour Ubuntu 17.10, il faut en plus installer les paquets nautilus-open-terminal et nautilus-scripts-manager pour pouvoir lancer un script depuis Nautilus+
 ==== 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.sh</​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 )
  
-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.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>​
  
-Puis vous pouvez exécuter le script en faisant : <​code>​./​nom_du_script.sh</​code>​+Puis vous pouvez exécuter le script en faisant : <​code ​bash>​./​nom_du_script</​code>​
 mais pourquoi le ./ ? mais pourquoi le ./ ?
-=== le /. ===+ 
 +=== 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. 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.
Ligne 78: 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 98: 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 ;
   * zsh, shell C écrit par Paul Falstad ;   * zsh, shell C écrit par Paul Falstad ;
-  * ksh (<=> ksh88 sur Solaris et equivaut a 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.\\
 +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 :
 +<code bash>
 +ma_variable=unmot
 +</​code>​
 +Ici  la valeur est affectée à la variable ma_variable .\\
 +Attention: pas d'​espace ni avant ni après le signe "​="​ .\\
 +Autre exemple avec une commande avec arguments :
 +<code bash>​nbre_lignes=$(wc -l < fichier.ext)</​code>​
 +//​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ .
  
-Une variable permet de conserver une valeur. +Pour voir le contenu d'une variable, on utilisera echo (par exemple) ​:
-Pour créer une variable, il suffit de lui donner un nom et une valeur avec l'​affectation égale ( mais cela dépend de ce que vous faire avec quand même ) +
-<code bash>​ma_variable=unmot</​code>​ +
-ici  la valeur est affectée à la variable ma_variable.\\ +
-Attention : pas d'​espace ni avant ni après le signe "​="​\\ +
-Autre exemple avec une commande avec arguments:​ +
-<​code>​nbre_lignes=$(wc -l < fichier.ext)</​code>​ +
-//​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ +
- +
-Pour voir le contenu d'une variable, on utilisera echo (par exemple)+
 <code bash>​echo $ma_variable</​code>​ <code bash>​echo $ma_variable</​code>​
-renverra : unmot+renverra : unmot .
  
 Pour gérer les espaces et autres caractères spéciaux du shell, on utilisera les guillemets ou bien une notation avec des apostrophes : Pour gérer les espaces et autres caractères spéciaux du shell, on utilisera les guillemets ou bien une notation avec des apostrophes :
Ligne 130: Ligne 133:
 <code bash>​echo ${ma_variable}</​code>​ <code bash>​echo ${ma_variable}</​code>​
 <code bash>​echo "​${ma_variable}"</​code>​ <code bash>​echo "​${ma_variable}"</​code>​
-renverront toutes la même réponse : unmot+renverront toutes la même réponse : unmot .
  
-Des variables ​systèmes ​permettent d'​accélérer la saisie et la compréhension. +Et avec des chemins de répertoires : 
-pour voir les variables d'​environnement de votre système tapez simplement ​+<code bash> 
 +chemin_de_base="/​home/​username/​un repertoire avec espaces"​ 
 +chemin_complet="​$chemin_de_base/​repertoire"​ 
 +</​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 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. 
 +Pour voir les variables d'​environnement de votre système tapez simplement ​:
 <code bash>​env</​code>​ <code bash>​env</​code>​
  
-quelques ​variables d'​environnement à connaître :+Quelques ​variables d'​environnement à connaître :
 HOME, USER, PATH, IFS,... HOME, USER, PATH, IFS,...
  
Ligne 144: Ligne 153:
 Ce petit code va afficher la variable HOME à l'​écran. Ce petit code va afficher la variable HOME à l'​écran.
  
-Il existe des variables un peu spéciales+Il existe des variables un peu spéciales ​:
 ^Nom^fonction^ ^Nom^fonction^
 |$*| contient tous les arguments passés à la fonction| |$*| contient tous les arguments passés à la fonction|
-|$#| contient le nombre d'argument|+|$#| contient le nombre d'arguments|
 |$?| contient le code de retour de la dernière opération| |$?| contient le code de retour de la dernière opération|
 |$0| contient le nom du script| |$0| contient le nom du script|
Ligne 153: Ligne 162:
 |$!| contient le PID de la dernière commande lancée| |$!| contient le PID de la dernière commande lancée|
  
-Exemple : créer le fichier arg.sh avec le contenu qui suit+Exemple : créer le fichier arg.sh avec le contenu qui suit :
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
-echo "​Nombre d'argument ​"$# +echo "​Nombre d'arguments ... :  ​"$# 
-echo "Les arguments sont "$* +echo "Les arguments sont ... :  ​"$* 
-echo "Le second argument est "$2+echo "Le second argument est :  ​"$2
  
-echo "Et le code de retour du dernier echo est "$?+echo "Et le code de retour du dernier echo est :  ​"$?
 </​code>​ </​code>​
-Lancez ce script avec un ou plusieurs arguments et vous aurez+Lancez ce script avec un ou plusieurs arguments et vous aurez :
 <code bash> <code bash>
 ./arg.sh 1 2 3 ./arg.sh 1 2 3
-Nombre d'argument ​+Nombre d'arguments ... :  ​
-Les arguments sont 1 2 3 +Les arguments sont ... :  ​1 2 3 
-Le second argument est 2 +Le second argument est :  ​
-Et le code de retour du dernier echo est 0+Et le code de retour du dernier echo est :  ​0
 </​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"​) ​:
-Premiere ​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>​
  
-ou bien+ou bien :
 <code bash> <code bash>
 tab[0]='​John Smith' tab[0]='​John Smith'
Ligne 188: Ligne 194:
 <code bash> <code bash>
 len=${#​tab[*]} ou echo ${#tab[@]} len=${#​tab[*]} ou echo ${#tab[@]}
- 
 </​code>​ </​code>​
  
Ligne 198: Ligne 203:
 Pour afficher tous les éléments : Pour afficher tous les éléments :
 <code bash>​echo ${tab[@]}</​code>​ <code bash>​echo ${tab[@]}</​code>​
-ou bien (en bash ou en ksh93 mais pas en ksh88):+ou bien (en bash ou en ksh93 mais pas en ksh88) :
 <code bash>for i in ${!tab[@]}; do echo ${tab[i]}; done</​code>​ <code bash>for i in ${!tab[@]}; do echo ${tab[i]}; done</​code>​
-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>​
- 
  
  
 NB : toutes les variables sont des tableaux. Par défaut, c'est le premier élément qui est appelé : NB : toutes les variables sont des tableaux. Par défaut, c'est le premier élément qui est appelé :
 <code bash>​echo ${tab[0]}</​code>​ <code bash>​echo ${tab[0]}</​code>​
-et+et :
 <code bash>​echo ${tab}</​code>​ <code bash>​echo ${tab}</​code>​
 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>​
 $SEPARATEUR pourra être : $SEPARATEUR pourra être :
-  *  une lettre (pe : n, i,...)+  * une lettre (pe : n, i,...)
   * 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 228: Ligne 233:
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
-echo $1+echo $3
 echo $2 echo $2
 </​code>​ </​code>​
Ligne 234: Ligne 239:
 Notez que $0 est le nom du fichier. Notez que $0 est le nom du fichier.
  
-**shift** est une commande très pratique lorsque vous traitez des arguments en ligne de commande. Elle permet de faire "​défiler"​ les arguments ​en ligne de commande ​(''​$0''​''​$1''​''​$2''​... etc). C'est à dire que ce qui était dans ''​$1''​ est passé ​dans ''​$0''​''​$2'' ​dans ''​$1'' ​et ainsi de suite. +''​shift'' ​est une commande très pratique lorsque vous traitez des arguments en ligne de commande. Elle permet de faire "​défiler"​ les arguments ($0, $1, $2, ). C'est à dire que le contenu de $1 passe dans $0, celui de $2 dans $1 et ainsi de suite. Il est tout à fait possible de traiter les arguments avec ''​for i in $*; do''​ mais lorsque vous aurez des options du style ''​title "mon_titre"''​ il sera très laborieux ​de récupérer ​la valeur ​''​"mon_titre"'​'.
-Il est tout à fait possible de traiter les arguments avec ''​for i in $*; do''​ mais lorsque vous aurez des options du style ''​--title "Verr Majuscule pour le shift"''​ il sera très difficile ​de récupérez ​la valeur "Verr Majuscule pour le shift"+
-shift +
- +
-shift est une commande très pratique lorsque vous traitez des arguments en ligne de commande. Elle permet de faire "​défiler"​ les arguments en ligne de commande ($0, $1, $2, … etc). C'est à dire que ce qui était dans $1 est passé dans $0, $2 dans $1 et ainsi de suiteIl est tout à fait possible de traiter les arguments avec for i in $*; do mais lorsque vous aurez des options du style –title "Verr Majuscule pour le shift" il sera très difficile de récupérez la valeur "Verr Majuscule pour le shift"​. Voici un exemple de script où vous devez vous souvenir de ce que vous avez écrit :+
  
 +Voici un exemple de script où vous devez vous souvenir de ce que vous avez écrit (un petit jeu de mémoire, quoi) :
 + <​code bash>
 #!/bin/sh #!/bin/sh
 clear # Un peu facile si la commande reste au dessus :-) clear # Un peu facile si la commande reste au dessus :-)
Ligne 249: Ligne 252:
     echo "Bien joué !"     echo "Bien joué !"
   else   else
-    echo "Non mais quand même !!! C'​ÉTAIT $1 ET NON PAS $Reslt PETIT FRIPPON ​!!!"+    echo "Non mais quand même !!! C'​ÉTAIT $1 ET NON PAS $Reslt PETIT FRIPON ​!!!"
     sleep 3 # Juste pour le fun du script qui rage ;-p     sleep 3 # Juste pour le fun du script qui rage ;-p
-    echo "Donc je te banni de ubuntu-fr.org ! Et toc !! Tu ne peux rien contre moi !!!"+    echo "Donc je te bannis ​de ubuntu-fr.org ! Et toc !! Tu ne peux rien contre moi !!!"
     exit 1     exit 1
   fi   fi
Ligne 257: Ligne 260:
 done done
 echo "Vous avez réussi !" echo "Vous avez réussi !"
 +</​code>​
  
- +==== L'​arithmétique ==== 
-Voici un exemple de script où vous devez vous souvenir de ce que vous avez écrit : +<code bash>(( variable = 2 + $autre_var * 5 ))</code> 
- <​code bash> +Exemplebesoin de définir des plages de valeurs (1 à 500 puis 501 à 1000 puis 1001 à 1500…
-#!/bin/sh +<code bash> 
-clear # Un peu facile si la commande reste au dessus ​:-+id_per_step ​500 
-until [ $# 0 ] +for (( i=0; i<8; i++ )); do 
-do + (( min_step_id = 1 + $i * $id_per_step )) 
-  echo -n "Taper l'​option suivante : " + (( max_step_id ​(( $i + )) * $id_per_step )) 
-  read Reslt + echo "$min_step_id to $max_step_id ​"
-  if [ "$Reslt" ​"$1" ]; then +
-    echo "Bien joué !" +
-  else +
-    echo "Non mais quand même !!! C'​ÉTAIT ​$1 ET NON PAS $Reslt PETIT FRIPPON !!!" +
-    sleep 3 # Juste pour le fun du script qui rage ;-p +
-    echo "Donc je te banni de ubuntu-fr.org ! Et toc !! Tu ne peux rien contre moi !!!" +
-    exit 1 +
-  fi +
-  shift # On défile+
 done done
-echo "Vous avez réussi !" 
 </​code>​ </​code>​
  
Ligne 287: Ligne 281:
 En mode console, faites [[http://​www.bash-linux.com/​unix-man-test-francais.html| man test ]] pour connaître tous les opérateurs,​ en voici quelques-uns : En mode console, faites [[http://​www.bash-linux.com/​unix-man-test-francais.html| man test ]] pour connaître tous les opérateurs,​ en voici quelques-uns :
  
-=== Opérateurs de test ===+=== Opérateurs de test sur fichiers ​===
  
 ^ Syntaxe ^ Fonction réalisée ^ ^ Syntaxe ^ Fonction réalisée ^
Ligne 296: Ligne 290:
 | -x fichier ​     | renvoie 0 si fichier existe et est exécutable. ​        | | -x fichier ​     | renvoie 0 si fichier existe et est exécutable. ​        |
 | f1 -nt f2       | renvoie 0 si f1 est plus récent que f2.                | | f1 -nt f2       | renvoie 0 si f1 est plus récent que f2.                |
-| f1 -ot f2       | renvoie ​ 0 si f1 est plus vieux que f2.                 |+| f1 -ot f2       | renvoie 0 si f1 est plus vieux que f2.                 |
  
-=== Opérateurs de comparaison ​numériques ​===+=== Opérateurs de comparaison ​numérique ​===
  
 ^ Syntaxe ^ Fonction réalisée ^ ^ Syntaxe ^ Fonction réalisée ^
-| $A -lt 5         | renvoie ​ 0 si $A est strictement inférieur à 5 |+| $A -lt 5         | renvoie 0 si $A est strictement inférieur à 5 |
 | $A -le 5         | renvoie 0 si $A est inférieur ou égal à 5 | | $A -le 5         | renvoie 0 si $A est inférieur ou égal à 5 |
-| $A -gt 5         | renvoie ​ 0 si $A est strictement supérieur à 5 |+| $A -gt 5         | renvoie 0 si $A est strictement supérieur à 5 |
 | $A -ge 5         | renvoie 0 si $A est supérieur ou égal à 5 | | $A -ge 5         | renvoie 0 si $A est supérieur ou égal à 5 |
-| $A -eq 5         | renvoie ​ 0 si $A est égal à 5 |+| $A -eq 5         | renvoie 0 si $A est égal à 5 |
 | $A -ne 5         | renvoie 0 si $A est différent de 5 | | $A -ne 5         | renvoie 0 si $A est différent de 5 |
  
Ligne 320: Ligne 314:
 0 0
 </​code>​ </​code>​
-Affichera la valeur 0 : ce fichier existe, 1 dans le cas où le fichier /etc/passwd n'​existe pas. Sous unix, le code de retour est par convention et en général 0 s'il n'y a aucune erreur et différent de 0 dans les autres cas+Affichera la valeur 0 : ce fichier existe, 1 dans le cas où le fichier /etc/passwd n'​existe pas. Sous Unix, le code de retour est par convention et en général 0 s'il n'y a aucune erreur et différent de 0 dans les autres cas.
  
 La syntaxe la plus appropriée dans de la programmation shell moderne est le double crochet : La syntaxe la plus appropriée dans de la programmation shell moderne est le double crochet :
 <code bash>[[ -f /etc/passwd ]]</​code>​ <code bash>[[ -f /etc/passwd ]]</​code>​
-Cela gère bien mieux les problèmes d'espace ​dans les noms de fichiers, les erreurs etc... C'est une structure <​del>​propre à</​del>​ bash (ksh, ?) qui est le shell par défaut dans la plupart des distributions Linux, et de Ubuntu en particulier. On garde en général des simples crochets pour les scripts shell qui doivent être à tout prix POSIXUtilisation ​sur des Unix sans installation ​préalables ​de bash, comme BSD, Solaris... )+Cela gère bien mieux les problèmes d'espaces ​dans les noms de fichiers, les erreurs etc... C'est une structure <​del>​propre à</​del>​ bash (ksh, ?) qui est le shell par défaut dans la plupart des distributions Linux, et de Ubuntu en particulier. On garde en général des simples crochets pour les scripts shell qui doivent être à tout prix POSIX ( utilisation ​sur des Unix sans installation ​préalable ​de bash, comme BSD, Solaris... ) .
  
 === Les opérateurs logiques === === Les opérateurs logiques ===
Ligne 382: 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 459: 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 538: Ligne 531:
 #!/bin/sh #!/bin/sh
   ​   ​
-echo -n "Etes-vous fatigué ? "+echo -n "Êtes-vous fatigué ? "
 read on read on
   ​   ​
Ligne 560: 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 587: 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 618: 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 627: 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 634: 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 642: 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 654: 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 694: 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 ​ou 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 ​:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 721: 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 736: Ligne 736:
     echo "You love the... pudding !"     echo "You love the... pudding !"
 elif [ ${LANG:0:2} = "​es"​ ]; then elif [ ${LANG:0:2} = "​es"​ ]; then
-    echo "Te gusta el ramón ​!" ​   ​+    echo "Te gusta el jamón ​!" ​   ​
 else else
     echo ":'​-("​     echo ":'​-("​
Ligne 742: 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 749: Ligne 749:
 You love the... pudding ! You love the... pudding !
 $ env LANG=es ./​favoritefood $ env LANG=es ./​favoritefood
-Te gusta el ramón ​!+Te gusta el jamón ​!
 $ env LANG=it ./​favoritefood $ env LANG=it ./​favoritefood
 :'-( :'-(
 </​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 779: 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 788: 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 811: 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 830: 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 848: 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 ​absolu ​pour les dossiers et des chemins ​relatif ​pour les nom 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>​
-  * Si votre script doit s'​arrêter à cause d'une erreur, d'une variable qui ne correspond pas vos attentes utiliser des numéros exit différents : <code bash>​exit 100;+  * Si votre script doit s'​arrêter à cause d'une erreur, d'une variable qui ne correspond pas à vos attentes utiliser des numéros exit différents : <code bash>​exit 100;
 exit 101; exit 101;
 exit 102; exit 102;
Ligne 874: 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>​
 Exemple : Exemple :
-Supposons ​que vous ayez une base de données, avec 3 catégories d'​enregistrements possibles :+supposons ​que vous ayez une base de données, avec 3 catégories d'​enregistrements possibles :
 éléphant bleu, éléphant blanc, éléphant rose ayant chacun 30 individus. éléphant bleu, éléphant blanc, éléphant rose ayant chacun 30 individus.
 Votre script doit compter le nombre d'​éléphants bleus et blancs. Votre script doit compter le nombre d'​éléphants bleus et blancs.
Ligne 888: Ligne 886:
 Quel algorithme choisissez-vous ? Quel algorithme choisissez-vous ?
  
-Résultat : Le premier car dans le deuxième il faut d'​abord calculer le nombre total d'​éléphants,​ donc un calcul en plus :-P+Résultat : le premier car dans le deuxième il faut d'​abord calculer le nombre total d'​éléphants,​ donc un calcul en plus :-P .
  
 ===== 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.1524313395.txt.gz
  • Dernière modification: Le 21/04/2018, 14:23
  • par elleji