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 | ||
doc:programmation:shells:fonction [05/01/2015 18:37] smolski [Définition d'une fonction] |
doc:programmation:shells:fonction [23/11/2020 09:52] Hypathie [Définition d'une fonction] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== script bash : Fonctions ====== | ====== script bash : Fonctions ====== | ||
- | * Niveau requis : {{tag>débutant}} | + | * Objet : script bash : Fonctions |
+ | * 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 : | * Suivi : | ||
- | * Création par [[user>Hypathie]] 18/03/2014 | + | * Création par [[user>Hypathie]] le 18/03/2014 |
- | * Testé par <Hypathie> le <Juin 2014> | + | * Testé par [[user>Hypathie]] 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=142815#p142815 | 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:debuter-avec-les-scripts-shell-bash]] | + | * [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash]] |
- | * [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | + | * [[doc:programmation:shells:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] |
- | * [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|modification de variable et de paramètre]] | + | * [[doc:programmation:shells:script-bash-detail-sur-les-parametres-et-les-boucles|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]] | + | * [[doc:programmation:shells: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]] | + | * [[doc:programmation:shells:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] |
- | * [[doc:programmation:bash:script:tableaux|script-bash-les-tableaux]] | + | * [[doc:programmation:shells:tableaux|script-bash-les-tableaux]] |
* ;-) | * ;-) | ||
| | ||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | + | |
===== Définition d'une fonction ===== | ===== Définition d'une fonction ===== | ||
Ligne 57: | Ligne 63: | ||
<note> | <note> | ||
* ''function'' : c'est la commande ''function'' ; | * ''function'' : c'est la commande ''function'' ; | ||
+ | |||
* entre les ''{ }'' c'est le corps de la fonction ; | * entre les ''{ }'' c'est le corps de la fonction ; | ||
+ | |||
* ne pas oublier l'espace avant ''{'' ; | * ne pas oublier l'espace avant ''{'' ; | ||
+ | |||
* on y place la ou les commandes exécutées par l'appel de la fonction; | * on y place la ou les commandes exécutées par l'appel de la fonction; | ||
* l'appel de la fonction se fait après sa définition; | * l'appel de la fonction se fait après sa définition; | ||
Ligne 66: | Ligne 75: | ||
* Exemple : | * Exemple : | ||
- | <code bash> | + | <code bash mon-script> |
#!/bin/bash | #!/bin/bash | ||
function f { | function f { | ||
Ligne 79: | Ligne 88: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
Bonjour tout le monde | Bonjour tout le monde | ||
- | </code> | + | </file> |
<note> | <note> | ||
- | Les mots réservés ''function'' et ''}'' doivent être les premiers d'une commande pour qu'ils soient reconnus.\\ Sinon il suffit de mettre '';}'' (avec un espace devant '';'') | + | Les mots réservés ''function'' et ''}'' doivent être les premiers d'une commande pour qu'ils soient reconnus.\\ |
+ | |||
+ | Sinon il suffit de mettre '';}'' (avec un espace devant '';'') | ||
</note> | </note> | ||
* Syntaxe avec ''nom-de-la-fonction (){'' : | * Syntaxe avec ''nom-de-la-fonction (){'' : | ||
- | <code bash> | + | <code bash mon-script> |
#!/bin/bash | #!/bin/bash | ||
mafonction (){ | mafonction (){ | ||
Ligne 98: | Ligne 109: | ||
./mon-script | ./mon-script | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
coucou | coucou | ||
- | </code> | + | </file> |
* Syntaxe proche de C : | * Syntaxe proche de C : | ||
- | <code bash> | + | <code bash mon-script> |
#!/bin/bash | #!/bin/bash | ||
mafonction () | mafonction () | ||
Ligne 118: | Ligne 129: | ||
</note> | </note> | ||
- | ==== Les arguments d'une fonction ==== | + | ==== Les arguments du script et les paramètres d'une fonction ==== |
- | *Les appels des arguments d'une fonction sont placés dans le corps de celle-ci\\ | + | <note info> |
+ | * On voit souvent les termes arguments et paramètres comme des synonymes car les arguments passés au script peuvent être récupérés pour être utilisés comme paramètres passés à une/des fonction(s) déclarées et implémentées dans le script. | ||
+ | * Voyons d'abord comment passer des paramètres à une fonction du script. | ||
+ | </note> | ||
+ | |||
+ | *Les appels des arguments d'une fonction sont placés dans le corps de celle-ci.\\ | ||
*Et les arguments sont placés de gauche à droite et du premier au dernier, à côté du nom d'appel de la fonction\\ | *Et les arguments sont placés de gauche à droite et du premier au dernier, à côté du nom d'appel de la fonction\\ | ||
*la valeur du premier argument est référencée par ''$1''\\ | *la valeur du premier argument est référencée par ''$1''\\ | ||
*la valeur du deuxième argument est référencée par ''$2'', etc.\\ | *la valeur du deuxième argument est référencée par ''$2'', etc.\\ | ||
- | *les paramètres spéciaux ''$0'' (nom programme), ''$#'' (nombre de paramètre), $@ (tous les paramètres) , ''$*'' (chacun de tous les paramètres), ''$?'' (valeur de retour du programme) | + | *les paramètres spéciaux ''$0'' (Contient le nom du script tel qu'il a été invoqué), ''$#'' (Le nombre de paramètres passés au script), $@ (l'ensemble des arguments, un argument par paramètre) , ''$*'' (l'ensemble des paramètres sous la forme d'un seul argument), ''$?'' (Le code retour de la dernière commande), ''$$'' (le PID su shell qui exécute le script), ''$!'' (le PID du dernier processus lancé en arrière-plan) |
- | <code bash> | + | |
+ | <code bash mon-script.sh> | ||
#!/bin/bash | #!/bin/bash | ||
function f | function f | ||
Ligne 132: | Ligne 149: | ||
echo $0 | echo $0 | ||
echo $USER | echo $USER | ||
- | echo $1 $2 $3 | + | echo $3 $1 $2 |
echo $# | echo $# | ||
echo $@ | echo $@ | ||
Ligne 146: | Ligne 163: | ||
./mon-script | ./mon-script | ||
</code> | </code> | ||
- | <code > | + | <file config retour de la commande> |
./mon-script | ./mon-script | ||
hypathie | hypathie | ||
- | chez debian facile | + | facile chez debian |
3 | 3 | ||
chez debian facile | chez debian facile | ||
chez debian facile | chez debian facile | ||
+ | </file> | ||
+ | |||
+ | <note info> | ||
+ | * Les paramètres de la fonction peuvent être les paramètres passés au script. | ||
+ | </note> | ||
+ | |||
+ | <code bash ParamToScript.sh> | ||
+ | #!/bin/bash | ||
+ | function f | ||
+ | { | ||
+ | echo "SCRIPT_NAME : " $0 | ||
+ | echo "USER : " $USER | ||
+ | echo "Script Argument 1 : "$1 "Script Argument 2 : "$2 "Script Argument 2 : "$3 | ||
+ | } | ||
+ | f $1 $2 $3 | ||
</code> | </code> | ||
+ | <code user> | ||
+ | ./ParamToScript.sh arg1 arg2 arg3 | ||
+ | </code> | ||
+ | <file config retour de la commande> | ||
+ | SCRIPT_NAME : ./ParamToScript.sh | ||
+ | USER : hypathie | ||
+ | Script Argument 1 : \nScript Argument 2 : \Script Argument 2 : | ||
+ | </file> | ||
==== La commande interne shift ==== | ==== La commande interne shift ==== | ||
Cette commande permet de décaler la numérotation des paramètres de position de la fonction | Cette commande permet de décaler la numérotation des paramètres de position de la fonction | ||
- | <code bash> | + | <code bash script minipoesie> |
function minipoesie | function minipoesie | ||
{ | { | ||
Ligne 180: | Ligne 220: | ||
./minipoesie | ./minipoesie | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
nom complet : ./minipoesie | nom complet : ./minipoesie | ||
Ligne 189: | Ligne 229: | ||
facile | facile | ||
facile | facile | ||
- | </code> | + | </file> |
Et voilà, vous devriez maintenant être capable de tout comprendre de l'exemple de ce lien : | Et voilà, vous devriez maintenant être capable de tout comprendre de l'exemple de ce lien : | ||
Ligne 211: | Ligne 251: | ||
Voir le tuto : [[doc:programmation:shell:pipe|Le pipe ou tuyau]] | Voir le tuto : [[doc:programmation:shell:pipe|Le pipe ou tuyau]] | ||
- | <code bash> | + | <code bash script getip.sh> |
#!/bin/bash | #!/bin/bash | ||
getip (){ | getip (){ | ||
Ligne 219: | Ligne 259: | ||
</code> | </code> | ||
ou | ou | ||
- | <code bash> | + | <code bash script getip.sh> |
#!/bin/bash | #!/bin/bash | ||
getip (){ | getip (){ | ||
Ligne 230: | Ligne 270: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
- | inet adr:192.168.0.22 Bcast:192.168.0.255 Masque:255.255.255.0 | + | inet adr:192.168.0.22 Bcast:192.168.0.255 Masque:255.255.255.0 |
- | </code> | + | </file> |
===== Fonction, variables et paramètres passés au script ==== | ===== Fonction, variables et paramètres passés au script ==== | ||
Ligne 238: | Ligne 278: | ||
Créer une fonction qui permet d'afficher une variable et les paramètres passés au script. | Créer une fonction qui permet d'afficher une variable et les paramètres passés au script. | ||
- | <code bash> | + | <code bash script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
var=coucou | var=coucou | ||
Ligne 255: | Ligne 295: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
coucou | coucou | ||
a b | a b | ||
- | </code> | + | </file> |
===== Fonctions et autres commandes ===== | ===== Fonctions et autres commandes ===== | ||
À savoir : Comme la commande "exit", la commande "return" permet de changer le code de retour, mais contrairement à "exit", return fait sortir de la fonction (arrête l'exécution des commandes du corps de la fonction), sans arrêter l'ensemble du programme (script). | À savoir : Comme la commande "exit", la commande "return" permet de changer le code de retour, mais contrairement à "exit", return fait sortir de la fonction (arrête l'exécution des commandes du corps de la fonction), sans arrêter l'ensemble du programme (script). | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
Ligne 315: | Ligne 355: | ||
* Soit le script "echocolor.sh" ci-dessous : | * Soit le script "echocolor.sh" ci-dessous : | ||
- | <code bash> | + | <code bash script echocolor.sh> |
# voici des variables affectée des codes couleurs qu'on trouve sur le net | # voici des variables affectée des codes couleurs qu'on trouve sur le net | ||
noir='\e[0;30m' | noir='\e[0;30m' | ||
Ligne 344: | Ligne 384: | ||
* Dans le script "source.sh" ci-dessous, on va se servir de la fonction "echocolor" du script "echocolor.sh" pour coloriser les sorties des commandes. | * Dans le script "source.sh" ci-dessous, on va se servir de la fonction "echocolor" du script "echocolor.sh" pour coloriser les sorties des commandes. | ||
- | <code bash> | + | <code bash script source.sh> |
#!/bin/bash | #!/bin/bash | ||
source echocolor.sh # ou .nom_du_script | source echocolor.sh # ou .nom_du_script | ||
Ligne 368: | Ligne 408: | ||
OU MIEUX : | OU MIEUX : | ||
- | <code bash> | + | <code bash script source.sh> |
#!/bin/bash | #!/bin/bash | ||
source echocolor.sh # ou .nom_du_script | source echocolor.sh # ou .nom_du_script |