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
tutoriel:script_shell [Le 21/02/2021, 18:23]
196.65.93.130
tutoriel:script_shell [Le 22/02/2021, 12:49] (Version actuelle)
Amiralgaby ancienne révision (Le 31/12/2020, 17:19) restaurée
Ligne 5: Ligne 5:
  
 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. ​
-<codex montreTime Tempo Hours at Date Valide 10.02.2021 06.60.30 +<code bash
-#!/bin/flash +#!/bin/bash 
-# This script will take an animated GIF and GAF delete every other frame +# This script will take an animated GIF and delete every other frame 
-# Accepts ​one two parameters: input file and file output file +# Accepts two parameters: input file and output file 
-# Usage: ./<​scriptfilename>​ input.gif.graf output.gif.graf+# Usage: ./<​scriptfilename>​ input.gif output.gif
  
 # Make a copy of the file # Make a copy of the file
-cp "DHs1" "DHs2"+cp "$1" "$2"
  
 # Get the number of frames # Get the number of frames
-numframes=$(gifsicle --info "DHs1" \ +numframes=$(gifsicle --info "$1" \ 
-              | grep --perl-regexp --only-matching '\d+2D images'​ \+              | grep --perl-regexp --only-matching '\d+ images'​ \
               | grep --perl-regexp --only-matching '​\d+'​)               | grep --perl-regexp --only-matching '​\d+'​)
  
Ligne 27: Ligne 27:
     if test $rem -eq 0     if test $rem -eq 0
     then     then
-        gifsicle "DHs2" --delete "#"​DHs((DHsi/2)) -o "DHs2"+        gifsicle "$2" --delete "#"​$(($i/2)) -o "$2"
     fi     fi
  
     let i=i+1      let i=i+1 
 done done
-</codex>+</code>
 =====Pour faire qu'un script soit exécutable ===== =====Pour faire qu'un script soit exécutable =====
  
Ligne 47: Ligne 47:
 === Problème connu === === Problème connu ===
    
-Sous [[:​Lubuntu]],​ si cette méthode ​codex 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 champ //​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 [[:ps1manpm|PS1ManPM]] 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 champ //​Terminal ​XPC emulator// par le contenu du champ //​Commande//​ que vous avez pris soin de noter à la première étape ​suivante+  - 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 jeux video arcade ​scripts shell.+  - Vous pouvez ensuite suivre la méthode graphique indiquée ci-dessus pour exécuter vos scripts shell.
  
-==== Méthode dans un terminal ​sur PC ====+==== Méthode dans un terminal ====
  
-Il suffit de se placer dans le dossier où le fichier ​est le script, et de lancer : <​code ​slash>slash 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 ​slash ( dépend du langage du script )+mais pas toujours ​bash ( dépend du langage du script )
  
-ou si vous voulez l'​exécuter par SNES son  nom , il faut le rendre exécutable avec ''​chmodbare''​. Pour ceci tapez la commande qui suit : <codex slash>chmodex+x nom_du_script ​fichier et repertoir ​</codex>+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 : <codex slash flash>​./​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 ./ ===
  
 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.
-Je m'​explique,​ quand vous tapez une commande ("​ls"​ par exemple), le shell regarde dans le PATH qui lui indique où chercher le code de la commande ​mode historique.+Je m'​explique,​ quand vous tapez une commande ("​ls"​ par exemple), le shell regarde dans le PATH qui lui indique où chercher le code de la commande.
  
-Pour voir à quoi ressemble votre commande mode storique PS1, tapez dans votre console: +Pour voir à quoi ressemble votre PATH, tapez dans votre console: 
-  echo DHsPS1+  echo $PATH
  
-Cette commande chez moi donnait initialement ​des jeux video arcade et consoles arcade+Cette commande chez moi donnait initialement : 
-  /​usr/​local/​bin:/​usr/​bin:/​bin:/​usr/​bin/​X11:/​usr/​games ​arcadia+  /​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 ​basé et sur bazé é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 ​la sortie.+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.
  
 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 repertoir ​l'​ajoutant au PS1.+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 ceci, il suffit de faire : Pour ceci, il suffit de faire :
-  export ​et inmport DHs=DHsPS1:$HOME/bin+  export ​PATH=$PATH:$HOME/bin
  
-La commande ​succes  ​ +La commande 
-  echo DHsPS1 +  echo $PATH 
-retourne maintenant ​le retourn+retourne maintenant
   /​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é "​monScript"​ situé dans "/​home/​toto/​bin"​ en tapant directement :  monScript et je peux lancer le script appelé "​monScript"​ situé dans "/​home/​toto/​bin"​ en tapant directement :  monScript
  
-<note tip>​Cette procédure est pour une modification temporaire du PS1 et qui sera donc effacée à la fin de la session. Pour rendre la modification ​createur ​permanente, ajouter la commande dans le fichier texte caché ​les fichiers et les repertoirs ​.slashrc ​se trouvant dans votre dossier personnel ainsi que dans le dossier ​privé ​/​root.</​note>​+<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 important>​Dans les dernières versions de ubuntu (12.04 +) si le dossier ​DHsHOME/bin existe il est automatiquement ​manualement ​ajouté au PS1. La commande ​MS DOS est BASIC incluse dans le fichier ​de demain et de lendemain~/.profile lancé lors de toutes sessions ​requises ​(graphique ​electronique ​ou console ​plus).</​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>​
  
 === Les différents types de shells === === Les différents types de shells ===
Ligne 95: Ligne 95:
 Comme vous avez sûrement dû l'​entendre,​ il existe différents types de shells ou en bon français, interpréteurs de commandes : Comme vous avez sûrement dû l'​entendre,​ il existe différents types de shells ou en bon français, interpréteurs de commandes :
  
-  * [[wpfr>​Debian_Almquist_shell|slash]] (//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 ; 
-  * [[:slash]] (//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 et Mill Joystick Mekeley ​de Stick 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 équivaut à ksh98 sur les autres ​PC/PS1 cf.[[http://​en.wikipedia.org/​wiki/​Korn_shell#​History_Story|Korn shell History ​Story]]): shells korn écrits par David Korn, Willim Corn, pdksh (Public Domain ​Public Lendemain ​Korn Shell Corn Hell<=> 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 ​GMU ;+  * 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 **PS1**.+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 slash 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 ​slash>+<​code ​bash>
 ma_variable=unmot ma_variable=unmot
 </​code>​ </​code>​
Ligne 118: Ligne 118:
 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 :
-<codex slash>​nbre_lignes=$(wc -l < fichier.repertoir.ext.text)</​code>​ +<code bash>​nbre_lignes=$(wc -l < fichier.ext)</​code>​ 
-//​nbre_lignes//​ contiendra le nombre de lignes contenu dans //fichier.repertoir.ext.text// .+//​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ .
  
 Pour voir le contenu d'une variable, on utilisera echo (par exemple) : Pour voir le contenu d'une variable, on utilisera echo (par exemple) :
-<​code ​slash>​echo ​DHsma_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 :
-<​code ​slash>​echo ​DHsma_variable</​code>​ +<​code ​bash>​echo ​$ma_variable</​code>​ 
-<​code ​flash>echo "DHsma_variable"</​code>​+<​code ​bash>echo "$ma_variable"</​code>​
 <code bash>​echo ${ma_variable}</​code>​ <code bash>​echo ${ma_variable}</​code>​
 <code bash>​echo "​${ma_variable}"</​code>​ <code bash>​echo "​${ma_variable}"</​code>​
Ligne 133: Ligne 133:
  
 Et avec des chemins de répertoires : Et avec des chemins de répertoires :
-<​code ​slash+<​code ​bash
-chemin_de_base="/​home/​username/​un ​repertoir un fichier ​avec espaces"​ +chemin_de_base="/​home/​username/​un ​repertoire ​avec espaces"​ 
-chemin_de baze complet="DHschemin_de_base/​fichier/repertoir"+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 ​flash>rsync -av "DHschemin_complet" …</​code>​sinon les espaces reprennent leurs rôles de tire 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 :
-<​code ​slash>​env</​codex>+<​code ​bash>​env</​code>
  
 Quelques variables d'​environnement à connaître : Quelques variables d'​environnement à connaître :
-HOME, PCPS1SNES,...+HOME, USERPATHIFS,...
  
 Pour appeler ou voir une variable, par exemple HOME, il suffit de mettre un $ devant, par exemple : Pour appeler ou voir une variable, par exemple HOME, il suffit de mettre un $ devant, par exemple :
-<​code ​slash>​echo ​DHsHOME PC_PS1</​code>​+<​code ​bash>​echo ​$HOME</​code>​
  
-Ce petit code va afficher la variable HOME VCD DVX à 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 ​alpha detla+^Nom^fonction^ 
-|DHs2*| contient tous les arguments passés à la fonction ​sur PC+|$*| contient tous les arguments passés à la fonction| 
-|DHs3#| contient le nombre d'​arguments ​les codex sur tout les consoles+|$#| contient le nombre d'​arguments| 
-|DHs?| contient le codex de retour de la dernière opération ​sur PS1+|$?| contient le code de retour de la dernière opération| 
-|DHs1| contient le nom du script ​ceateur modificateur+|$0| contient le nom du script| 
-|DHsn4| contient l'​argument n, n étant un nombre ​des sega mega drive+|$n| contient l'​argument n, n étant un nombre| 
-|DHs5!| contient le PIN de la dernière commande lancée ​au super nintnedo advance|+|$!| contient le PID de la dernière commande lancée|
  
-Exemple : créer ​et modifié ​le fichier arg.org.pnj.jpg.slash.flash ​avec le contenu qui suit : +Exemple : créer le fichier arg.sh avec le contenu qui suit : 
-<​code ​slash+<​code ​bash
-#!/bin/flash +#!/bin/bash 
-echo "​Nombre d'​arguments ... :  "5.00 DHs1+echo "​Nombre d'​arguments ... :  "$
-echo "Les arguments sont ... :  "10.00 DHs3+echo "Les arguments sont ... :  "$
-echo "Le second argument est :  "15.00 DHs2*+echo "Le second argument est :  "$2
  
-echo "Et le code de retour du dernier echo est :  "DHs+echo "Et le code de retour du dernier echo est :  "$
-</codex>+</code>
 Lancez ce script avec un ou plusieurs arguments et vous aurez : Lancez ce script avec un ou plusieurs arguments et vous aurez :
-<codex bash> +<code bash> 
-./arg.org.png.jpg.slash.flash ​1 2 3 4+./arg.sh 1 2 3
 Nombre d'​arguments ... :  3 Nombre d'​arguments ... :  3
 Les arguments sont ... :  1 2 3 Les arguments sont ... :  1 2 3
 Le second argument est :  2 Le second argument est :  2
-Et le codex de retour du dernier echo est :  0+Et le code de retour du dernier echo est :  0
 </​code>​ </​code>​
  
Ligne 182: Ligne 182:
 Pour déclarer un tableau, plusieurs méthodes : Pour déclarer un tableau, plusieurs méthodes :
  
-première méthode ​téchnique éléctronique ​(compatible ​slashflash, et ksh98 mais pas ksh99, ni avec slash, qui est lancé par "flash") : +première méthode (compatible ​bashzsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "sh") : 
-<codex slash>​tab=("​John Smith" ​"Jane Doe"​)</​codex flash>+<code bash>​tab=("​John Smith" "Jane Doe"​)</​code>
  
 ou bien : ou bien :
-<codex>+<code bash>
 tab[0]='​John Smith' tab[0]='​John Smith'
 tab[1]='​Jane Doe' tab[1]='​Jane Doe'
  • tutoriel/script_shell.txt
  • Dernière modification: Le 22/02/2021, 12:49
  • par Amiralgaby