Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
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 | ||
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [20/06/2014 07:15] Hypathie [A) Introduction : éviter les bashismes] |
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [07/07/2014 15:39] Hypathie [Apprendre à rédiger des scripts sous bash] |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* Suivi : {{tag>à-placer}} | * Suivi : {{tag>à-placer}} | ||
- | * Création par **Hypathie** 18/03/2014 | + | * Création par [[user>Hypathie]] 18/03/2014 |
* Testé par <Hypathie> le <Juin 2014> | * Testé par <Hypathie> le <Juin 2014> | ||
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=92203#p92203|Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=92203#p92203|Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
Ligne 10: | Ligne 10: | ||
**Nota : wiki n°1**\\ | **Nota : wiki n°1**\\ | ||
**Les autres numéros :** | **Les autres numéros :** | ||
- | * wiki n°2 : [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | + | * [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] |
- | * wiki n°3 : [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script bash : modification de variable et de paramètre]] | + | * [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script bash : modification de variable et de paramètre]] |
- | * wiki n°4 : [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] | + | * [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] |
- | * wiki n°5 : [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | + | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] |
- | * wiki n°6 : [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] | + | * [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] |
- | * wiki n°7 : [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | + | * [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] |
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
Ligne 28: | Ligne 28: | ||
* pour s'exercer sur la question de chemin relatif et absolu : [[doc:programmation:shell:illustration-navigation-shell]] | * pour s'exercer sur la question de chemin relatif et absolu : [[doc:programmation:shell:illustration-navigation-shell]] | ||
- | * un résumer : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux#les-caracteres-symboliques|caractères symboliques]] | + | * un résumé : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux#les-caracteres-symboliques|caractères symboliques]] |
Ligne 35: | Ligne 35: | ||
Mais quel rapport entre la diversité des shell (ou interpréteur de commandes) qui existent (sh ; bsh ; bash ; ksh, etc.) et les scripts ?\\ | Mais quel rapport entre la diversité des shell (ou interpréteur de commandes) qui existent (sh ; bsh ; bash ; ksh, etc.) et les scripts ?\\ | ||
- | **C'est que dans l'en-tête du script l'un de ces shell doit être appelé avec le sha-bang:** | + | * C'est qu'avec l'en-tête du script, chacun des **sha-bang** ci-dessous appelle un interpréteur de commandes différent: |
<code> | <code> | ||
#!/bin/sh | #!/bin/sh | ||
Ligne 42: | Ligne 42: | ||
#!/bin/tcl | #!/bin/tcl | ||
</code> | </code> | ||
- | Chacune de ces lignes appelle un interpréteur de commandes différent. | ||
- | **POSIX est un standard((**Portable Operating System Interface**.\\ **Voir** :\\ | + | |
+ | **POSIX**((**Portable Operating System Interface**.\\ Voir :\\ | ||
http://fr.wikipedia.org/wiki/POSIX\\ | http://fr.wikipedia.org/wiki/POSIX\\ | ||
http://polytechnice.free.fr/Archives/SI/SI3/Systeme/Cours/posix.pdf\\ | http://polytechnice.free.fr/Archives/SI/SI3/Systeme/Cours/posix.pdf\\ | ||
Un lien indispensable en anglais : [[http://hyperpolyglot.org/shell]]\\ | Un lien indispensable en anglais : [[http://hyperpolyglot.org/shell]]\\ | ||
- | **Les spécifications posix sont disponibles sur le site** : [[http://pubs.opengroup.org/onlinepubs/007904975/toc.htm]] \\ | + | Les spécifications posix sont disponibles sur le site : [[http://pubs.opengroup.org/onlinepubs/007904975/toc.htm]] \\ |
- | **Pour décortiquer les bashismes** : http://rgeissert.blogspot.fr/search/label/bashisms **Merci captnfab** ^_^)).**\\ | + | Pour décortiquer les bashismes : http://rgeissert.blogspot.fr/search/label/bashisms **Merci [[user>captnfab]]** ^_^))\\ est un standard : |
<note tip> | <note tip> | ||
- | **Utiliser #!/bin/sh permet de tenir compte du standard sh de POSIX.**\\ | + | Utiliser #!/bin/sh permet de tenir compte du standard sh de POSIX.\\ |
Voici un PDF assez complet pour apprendre à utiliser le shell sh : http://igm.univ-mlv.fr/~masson/Teaching/PIM-INF3/shell.pdf\\ | Voici un PDF assez complet pour apprendre à utiliser le shell sh : http://igm.univ-mlv.fr/~masson/Teaching/PIM-INF3/shell.pdf\\ | ||
- | **Appeler bash avec l'option --posix ou insérer set -o posix au début du script fait que bash se conforme au standard posix.** | + | Appeler bash avec l'option --posix ou insérer set -o posix au début du script fait que bash se conforme au standard posix. |
</note> | </note> | ||
** À savoir :** | ** À savoir :** | ||
- | * **Shell compatibles avec sh : bash, ksh** | + | * Shell compatibles avec sh : bash, ksh |
- | * **Shell incompatibles avec sh : csh, tcsh** | + | * Shell incompatibles avec sh : csh, tcsh |
| | ||
<note> | <note> | ||
- | **Mieux vaut apprendre à écrire des scripts BASH en connaissance de cause en ce qui concerne la norme POSIX !**\\ | + | Mieux vaut apprendre à écrire des scripts BASH en connaissance de cause en ce qui concerne la norme POSIX !\\ |
- | Et cela même si :\\ | + | Et cela même si le SHELL par défaut est le BASH, sur la plupart des distributions Linux.\\ |
- | *Le shell par défaut est bien le BASH, sur une distribution debian de base.\\ | + | |
- | *Même si encore, c'est le cas de la plupart des distributions linux actuelles.\\ | + | |
- | **Pour utiliser tcsh, ksh, ash, sh, csh, //etc// :**\\ | + | Pour utiliser tcsh, ksh, ash, sh, csh, //etc// :\\ |
- | [[ http://formation-debian.via.ecp.fr/shell.html]]\\ | + | [[http://formation-debian.via.ecp.fr/shell.html]]\\ |
[[http://marcg.developpez.com/ksh/|méthode d'installation de ksh]]\\ | [[http://marcg.developpez.com/ksh/|méthode d'installation de ksh]]\\ | ||
| | ||
- | **Apprendre le BASH sans devenir un **ultra-bashiste**" : si si c'est possible !** LOL\\ | + | Apprendre le BASH sans devenir un "ultra-bashiste" : si si c'est possible ! LOL\\ |
</note> | </note> | ||
Ligne 91: | Ligne 89: | ||
*Ensuite, **gare à la commande « echo »**, ses options ne sont pas prises en compte de la même manière selon les shell :\\ | *Ensuite, **gare à la commande « echo »**, ses options ne sont pas prises en compte de la même manière selon les shell :\\ | ||
- | *Éviter l’utilisation des options de commande « -e » et « -E ». | + | * Éviter l’utilisation des options de commande « -e » et « -E ». |
- | *Éviter d’utiliser toutes les options de commandes sauf « -n ». | + | * Éviter d’utiliser toutes les options de commandes sauf « -n ». |
- | *Éviter d’utiliser les séquences d’échappement dans les chaînes de caractères car leur prise en compte varie. | + | * Éviter d’utiliser les séquences d’échappement dans les chaînes de caractères car leur prise en compte varie. |
- | *Utilisez la commande « printf » plutôt que la commande « echo » si vous avez besoin d’intégrer des séquences d’échappement dans la chaîne de sortie. | + | * Utilisez la commande « printf » plutôt que la commande « echo » si vous avez besoin d’intégrer des séquences d’échappement dans la chaîne de sortie. |
* Enfin, même s'il n'est pas question pour un débutant d'intégrer tout ce qui suit, voici les avantages et les particularités propres au shell BASH : | * Enfin, même s'il n'est pas question pour un débutant d'intégrer tout ce qui suit, voici les avantages et les particularités propres au shell BASH : | ||
- | *Certaines options étendues d'appel | + | * Certaines options étendues d'appel |
- | *La substitution de commandes utilisant la notation $( ) | + | * La substitution de commandes utilisant la notation $( ) |
- | *Certaines opérations de manipulations de chaînes | + | * Certaines opérations de manipulations de chaînes |
- | *La substitution de processus | + | * La substitution de processus |
- | *Les commandes intégrées de Bash | + | * Les commandes intégrées de Bash |
Pour plus de détails sur chacun de ces points voir : [[http://abs.traduc.org/abs-fr/ch36s09.html|Guide avancé d'écriture des scripts Bash :36.9. Problèmes de portabilité]] | Pour plus de détails sur chacun de ces points voir : [[http://abs.traduc.org/abs-fr/ch36s09.html|Guide avancé d'écriture des scripts Bash :36.9. Problèmes de portabilité]] | ||
Ligne 155: | Ligne 153: | ||
</code> | </code> | ||
La commande echo est une commande interne du shell ; la commande /bin/echo est une commande à part.\\ | La commande echo est une commande interne du shell ; la commande /bin/echo est une commande à part.\\ | ||
- | **merci captnfab** 8-) | + | **merci [[user>captnfab]]** 8-) |
</note> | </note> | ||
Ligne 304: | Ligne 302: | ||
(espace avant le point virgule puis antislash accolé au point virgule puis retour à la ligne (espace ou non avant la nouvelle commande.) | (espace avant le point virgule puis antislash accolé au point virgule puis retour à la ligne (espace ou non avant la nouvelle commande.) | ||
- | **Merci à captnfab et LeDub pour cette information !** | + | **Merci à [[user>captnfab]] et [[user>LeDub]] pour cette information !** |
</note> | </note> | ||
Ligne 318: | Ligne 316: | ||
</code> | </code> | ||
<note> | <note> | ||
- | Lors de l'exécution de ce script, la chaîne que vous entrerez pour répondre à la question, sera le nom d'un nouveau script que vous voulez créer. | + | Lors de l'exécution de ce script, la chaîne que vous entrerez pour répondre à la question, sera le nom du nouveau script que vous voulez créer. |
</note> | </note> | ||