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 [20/06/2014 07:31] Hypathie [Comment créer et exécuter un script ?] |
||
---|---|---|---|
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 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 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> | ||