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
Prochaine révision Les deux révisions suivantes
tutoriel:script_shell [Le 07/10/2019, 12:36]
BugFollower [La commande test]
tutoriel:script_shell [Le 05/10/2020, 14:45]
bcag2 [La structure for] for "classique" (type C)
Ligne 53: Ligne 53:
  
 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 nom_du_script</​code>​
-mais pas toujours bash ( dépend du language ​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>​chmod +x nom_du_script</​code>​
Ligne 93: Ligne 93:
  
   * [[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 518: Ligne 518:
 #!/bin/sh #!/bin/sh
   ​   ​
-echo -n "Etes-vous fatigué ? "+echo -n "Êtes-vous fatigué ? "
 read on read on
   ​   ​
Ligne 567: Ligne 567:
 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 614: Ligne 614:
 </​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 630:
 </​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 642:
 </​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 676: Ligne 683:
 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'​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 ​.
  
-Exemple: ​Un sleep interactif.+Exemple: ​un sleep interactif ​:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 701: Ligne 708:
  
  
-==== 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 729:
 #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>​
 $ ./​favoritefood $ ./​favoritefood
Ligne 733: Ligne 740:
 :'-( :'-(
 </​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>​
 $ ./​truncbegin "Hello world !" 5 $ ./​truncbegin "Hello world !" 5
Ligne 759: Ligne 766:
 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 775:
 === 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 798:
 === 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 813: Ligne 821:
 [[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]] [[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]]
  
-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 [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=204074|[VOS SCRIPTS UTILES]]] et rajoutez un lien dans la page du wiki ci-dessus.
Ligne 836: Ligne 844:
 } }
 </​code>​ </​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 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>​
-  * 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 856: Ligne 864:
 }</​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 868: Ligne 876:
 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 =====
  • tutoriel/script_shell.txt
  • Dernière modification: Le 23/11/2020, 21:55
  • par bcag2