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 [10/07/2014 11:51] Hypathie [Comment créer et exécuter un script ?] |
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [15/10/2015 17:42] milou [Apprendre à rédiger des scripts sous bash] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Apprendre à rédiger des scripts sous bash====== | ====== Apprendre à rédiger des scripts sous bash====== | ||
- | * Niveau requis : {{tag>débutant}} | + | * Objet : Apprendre à rédiger des scripts sous bash |
+ | * Niveau requis : {{tag>débutant avisé}} | ||
+ | * Commentaires : FIXME | ||
* 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 : |
* Création par [[user>Hypathie]] 18/03/2014 | * Création par [[user>Hypathie]] 18/03/2014 | ||
- | * Testé par <Hypathie> le <Juin 2014> | + | * Testé par [[user>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 !)) | ||
+ | |||
+ | |||
+ | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
+ | ------ | ||
**Nota : Les autres wiki :** | **Nota : Les autres wiki :** | ||
+ | * ;-) | ||
* [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | * [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | ||
* [[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]] | ||
* [[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]] | ||
- | * [[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-sortie-et-les-tests]] |
- | * [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] | + | * [[doc:programmation:bash:script:tableaux|script-bash-les-tableaux]] |
- | * [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | + | * [[doc:programmation:bash:script:fonction|script-bash-les-fonctions]] |
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Introduction : éviter les bashismes===== | ===== Introduction : éviter les bashismes===== | ||
Ligne 24: | Ligne 31: | ||
* [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* [[doc:programmation:shell:shell|Le shell pour tous]] | * [[doc:programmation:shell:shell|Le shell pour tous]] | ||
- | * [[atelier:chantier:bash-les-differents-caracteres-speciaux|Bash : Introduction]] | + | * [[doc:programmation:shells:bash-les-differents-caracteres-speciaux|Bash : Introduction]] |
* 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ésumé : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux#les-caracteres-symboliques|caractères symboliques]] | + | * un résumé : [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux#les-caracteres-symboliques|caractères symboliques]] |
Ligne 50: | Ligne 57: | ||
Pour décortiquer les bashismes : http://rgeissert.blogspot.fr/search/label/bashisms **Merci [[user>captnfab]]** ^_^)) est un standard : | Pour décortiquer les bashismes : http://rgeissert.blogspot.fr/search/label/bashisms **Merci [[user>captnfab]]** ^_^)) est un standard : | ||
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\\ | ||
Ligne 80: | Ligne 88: | ||
^ POSIX ^ À éviter : bashisme ^ | ^ POSIX ^ À éviter : bashisme ^ | ||
| if [ "$toto" ''='' "$titi" ] ; then … | if [ "$toto" ''=='' "$titi" ] ; then … | | | if [ "$toto" ''='' "$titi" ] ; then … | if [ "$toto" ''=='' "$titi" ] ; then … | | ||
- | | diff -u ''fichier.orig fichier.c'' | diff -u ''fichier.c{.orig,}'' | | + | | diff -u ''fichier.orig fichier.c'' | diff -u ''fichier.{orig,c}'' | |
| mkdir ''/tototiti /tototutu'' | mkdir ''/toto{titi,tutu}'' | | | mkdir ''/tototiti /tototutu'' | mkdir ''/toto{titi,tutu}'' | | ||
| ''funcname()'' { … } | ''function funcname()'' { … } | | | ''funcname()'' { … } | ''function funcname()'' { … } | | ||
Ligne 106: | Ligne 114: | ||
</code> | </code> | ||
- | Coucou | + | <file config retour de la commande>Coucou</file> |
* Pour aller plus loin : | * Pour aller plus loin : | ||
Ligne 132: | Ligne 140: | ||
</code> | </code> | ||
Si l'on a exécuté cette commande à l'ouverture de son terminal, le fichier "mon-script" est alors placé dans son répertoire courant.\\ | Si l'on a exécuté cette commande à l'ouverture de son terminal, le fichier "mon-script" est alors placé dans son répertoire courant.\\ | ||
- | Et oui une script est un simple fichier texte dont le contenu (une suite de commandes et d'instruction) est exécutable. :-D | + | Et oui un script est un simple fichier texte dont le contenu (une suite de commandes et d'instruction) est exécutable. :-D |
* Puis donnons à ce fichier les droits d'exécution :\\ | * Puis donnons à ce fichier les droits d'exécution :\\ | ||
Ligne 155: | Ligne 163: | ||
echo -n "Bonjour les copains" | echo -n "Bonjour les copains" | ||
</code> | </code> | ||
- | * Pour exécuter ce script il suffit d'inscrire ''bash nom-du-script'' dans un terminal. | + | |
+ | * Pour exécuter ce script il suffit d'inscrire dans un terminal. | ||
+ | <code>bash nom-du-script</code> | ||
>Comme on le fait pour une commande. | >Comme on le fait pour une commande. | ||
Ligne 166: | Ligne 176: | ||
bash mon-script | bash mon-script | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
Bonjour les copainsutiliateur@debian:~$ | Bonjour les copainsutiliateur@debian:~$ | ||
- | </code> | + | </file> |
<note> | <note> | ||
Ligne 176: | Ligne 186: | ||
</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 [[user>captnfab]]** 8-) | **merci [[user>captnfab]]** 8-) | ||
</note> | </note> | ||
Ligne 184: | Ligne 195: | ||
bash --posix mon-script | bash --posix mon-script | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
Bonjour les copainsutilisateur@debian:~$ | Bonjour les copainsutilisateur@debian:~$ | ||
- | </code> | + | </file> |
====Le sha-bang et ./mon-script ==== | ====Le sha-bang et ./mon-script ==== | ||
Ligne 207: | Ligne 218: | ||
==== Exécuter son script depuis n'importe où !==== | ==== Exécuter son script depuis n'importe où !==== | ||
- | À voir : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux#modifier-durablement-la-valeur-de-la-variable-d-environnement-path]] | + | À voir : [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux#modifier-durablement-la-valeur-de-la-variable-d-environnement-path]] |
* Il faut pour cela placer le chemin absolu de son script dans le Path,\\ C'est-à-dire dans l'un des répertoires ''/bin'', ''/usr/bin'' ou ''/usr/local/bin'' | * Il faut pour cela placer le chemin absolu de son script dans le Path,\\ C'est-à-dire dans l'un des répertoires ''/bin'', ''/usr/bin'' ou ''/usr/local/bin'' | ||
Ligne 229: | Ligne 240: | ||
</code> | </code> | ||
- | * Pour y ajouter, en dernière ligne : ''PATH=$PATH":$HOME/MesScripts" '' | + | * Pour y ajouter, en dernière ligne : ''PATH=$PATH":$HOME/MesScripts" ''. |
+ | <note tip> | ||
+ | Sans éditer, le fichier ''~/.bashrc'', on peut y ajouter cette ligne en faisant : | ||
+ | <code user> | ||
+ | echo 'PATH=$PATH":$HOME/MesScripts"' >> ~/.bashrc | ||
+ | </code> | ||
+ | Merci à phlinux pour cette remarque 8-) | ||
+ | </note> | ||
* Créons le fichier "mon-script" avec le sha-bang : | * Créons le fichier "mon-script" avec le sha-bang : | ||
Ligne 236: | Ligne 254: | ||
</code> | </code> | ||
- | <code> | + | * Contenant les lignes : |
- | ##!/bin/bash | + | |
- | echo "Coucou tout le monde !" | + | |
- | </code> | + | |
- | >Il s'agit là du contenu du fichier "mon-script". | + | <code bash> |
+ | #!/bin/bash | ||
+ | printf "yep coucou!\n" | ||
+ | </code> | ||
* Donnons à "mon-script" les droits d'exécution : | * Donnons à "mon-script" les droits d'exécution : | ||
Ligne 270: | Ligne 288: | ||
</code> | </code> | ||
- | <code> | + | docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux |
- | Coucou tout le monde ! | + | yep coucou! |
- | </code> | + | </file> |
<note> | <note> | ||
- | Vous pouvez voir maintenant votre répertoire dans la liste des répertoires du Path. | + | * Vous pouvez voir maintenant votre répertoire dans la liste des répertoires du Path. |
Fermez et ré-ouvrez le terminal; puis tapez : | Fermez et ré-ouvrez le terminal; puis tapez : | ||
Ligne 281: | Ligne 299: | ||
echo $PATH | echo $PATH | ||
</code> | </code> | ||
- | <code> | + | docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux |
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/utilisateur/MesScripts | /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/utilisateur/MesScripts | ||
- | </code> | + | </file> |
+ | * Concernant la commande ''source ~/.bashrc''\\(ou son équivalent ''. ~/.bashrc''):\\ notons que cela ne fonctionne que pour faire prendre en compte un ajout dans le fichier ''~/.bashrc''.\\ Si au contraire, on dé-commente une ligne de ce fichier, il faudra fermer puis ré-ouvrir le terminal pour que le changement soit effectif. | ||
</note> | </note> | ||
Pas si difficile que ça ;-) | Pas si difficile que ça ;-) | ||
- | Voyons pour finir la méthode qui vérifie la compatibilité de son script avec la norme POSIX : | ||
- | |||
- | <code> | ||
- | nano ~/MesScripts/mon-script | ||
- | </code> | ||
- | <code> | ||
- | #!/bin/bash | ||
- | set -o posix | ||
- | echo -n "Bonjour $USER" | ||
- | </code> | ||
- | |||
- | Le prompt vous dira "bonjour" avec l'option -n ! | ||
====Un petit script pour lancer un script depuis n'importe où ! ==== | ====Un petit script pour lancer un script depuis n'importe où ! ==== | ||
- | Pas d'inquiétude si vous ne comprenez pas tout ; vous en en serez capable après avoir suivi ce wiki et consulté ses liens. ;-) | + | Pas d'inquiétude si vous ne comprenez pas tout ; vous en en serez capable après avoir suivi les wiki sur les scripts, et consulté leurs liens. ;-) |
Il faut : | Il faut : | ||
- avoir créé un fichier de type répertoire (ex: MesScripts) ; | - avoir créé un fichier de type répertoire (ex: MesScripts) ; | ||
Ligne 334: | Ligne 340: | ||
</code> | </code> | ||
- | > <espace> avant le point virgule, puis antislash ''\'', accolé au point virgule '';'', puis <retour à la ligne> (espace ou non avant la nouvelle commande). | + | > <key>Espace</key> avant le point virgule, puis antislash <key>\</key> accolé au point virgule <key>;</key> puis <key>Entrée</key> (espace ou non avant la nouvelle commande). |
**Merci à [[user>captnfab]] et [[user>LeDub]] pour cette information !** | **Merci à [[user>captnfab]] et [[user>LeDub]] pour cette information !** | ||
Ligne 344: | Ligne 350: | ||
scriptx | scriptx | ||
</code> | </code> | ||
- | + | <file config retour de la commande> | |
- | Retour : | + | |
- | <code> | + | |
Un nouveau script toto ? Son nom : | Un nouveau script toto ? Son nom : | ||
- | </code> | + | </file> |
>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. | >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. | ||
Ligne 358: | Ligne 362: | ||
On peut éditer ce dernier, et y ajouter | On peut éditer ce dernier, et y ajouter | ||
* soit cette ligne : ''PATH=$PATH":." '' | * soit cette ligne : ''PATH=$PATH":." '' | ||
+ | |||
* soit cette ligne : ''PATH=$PATH":$HOME/." '' | * soit cette ligne : ''PATH=$PATH":$HOME/." '' | ||