Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Nota : Les autres wiki :
Définitions des fonctions de l'interpréteur Une fonction de l'interpréteur est un objet qui est appelé comme une commande simple et qui exécute une commande composée avec un nouveau jeu de paramètres positionnels. Les fonctions de l'interpréteur sont déclarées de la façon suivante : nom () commande-composée [redirection] function nom [()] commande-composée [redirection]
function
:function nom-de-la-fonction { suite-de-commandes } nom-de-la-fonction
ou
function nom-de-la-fonction { suite-de-commandes } nom-de-la-fonction
function
: c'est la commande function
;{ }
c'est le corps de la fonction ;{
;#!/bin/bash function f { echo "Bonjour tout le monde" } f
./mon-script
Bonjour tout le monde
function
et }
doivent être les premiers d'une commande pour qu'ils soient reconnus.
Sinon il suffit de mettre ;}
(avec un espace devant ;
)
nom-de-la-fonction (){
:#!/bin/bash mafonction (){ echo hello } mafonction
./mon-script
coucou
#!/bin/bash mafonction () { echo hello } mafonction
$1
$2
, etc.$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)#!/bin/bash function f { echo $0 echo $USER echo $3 $1 $2 echo $# echo $@ echo $* } f chez debian facile #chez : premier argument #debian : deuxième argument #facile : troisième argument
./mon-script
./mon-script hypathie facile chez debian 3 chez debian facile chez debian facile
#!/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
./ParamToScript.sh arg1 arg2 arg3
SCRIPT_NAME : ./ParamToScript.sh USER : hypathie Script Argument 1 : \nScript Argument 2 : \Script Argument 2 :
Cette commande permet de décaler la numérotation des paramètres de position de la fonction
function minipoesie { echo "nom complet : $0" echo " " echo "$*" # avant 'shift 1' shift 1 echo "$*" # après 'shift 1' echo "$*" # avant 'shift 2' shift 2 echo -e "\t$*" # après 'shift 2' echo -e "\t $*" # avant 'shift 3' shift 3 echo -e "\t $*" # après 'shift 3' } minipoesie hypathie chez debian facile
./minipoesie
nom complet : ./minipoesie hypathie chez debian facile chez debian facile chez debian facile facile facile facile
Et voilà, vous devriez maintenant être capable de tout comprendre de l'exemple de ce lien :
Et n'oubliez pas de retourner à la comparaison :
nom () commande-composée [redirection] function nom [()] commande-composée [redirection]
[redirection]
Voir le tuto : Le pipe ou tuyau
#!/bin/bash getip (){ /sbin/ifconfig ${1:-eth0} | egrep "([0-9]{1,3}\.){3}[0-9]{1,3}" } getip
ou
#!/bin/bash getip (){ /sbin/ifconfig ${1:-eth0} } getip | egrep "([0-9]{1,3}\.){3}[0-9]{1,3}"
./getip.sh
inet adr:192.168.0.22 Bcast:192.168.0.255 Masque:255.255.255.0
Créer une fonction qui permet d'afficher une variable et les paramètres passés au script.
#!/bin/bash var=coucou fct() { echo "$var" echo "$1 $2" } fct $1 $2
./essai.sh a b
coucou a b
À 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).
#!/bin/bash # La fonction "fct1" a pour condition d'exécution de ses commandes # un test qui vérifie qu'elle a un argument. # Comme elle en a un, il s'exécute 'echo $1' et 'return 0' qui attribue le code de retour 0. # && : exécution de la seconde cmd, si le code de retour de la première est 0 : c'est le cas # donc exécution de 'echo $? # || : exécution de la seconde cmd, si le code de retour de la première est différente de zéro # donc pas d'exécution de 'echo "coucou"' function fct1 { if [ $1 ]; then echo "$1" return 0 fi } fct1 yep && echo $? || echo "coucou" echo " " # pour espacer le retour # pas d'argument, donc c'est le 'else' qui s'exécute # donc exécution de 'echo "pas d'argument...' et de 'return 1' # || : exécution de la seconde cmd, si le code de retour de la première est différente de zéro # donc exécution de 'echo "coucou"' fct2() { if [ $1 ]; then echo "$1" else echo "pas d'argument à cette fonction" return 1 echo "après return" # On est sortie de la fonction : pas d'exécution de 'echo' fi } fct2 || echo "coucou"
yep 0 pas d'argument à cette fonction coucou
Il est possible d'utiliser la fonction d'un script dans un autre script.
# voici des variables affectée des codes couleurs qu'on trouve sur le net noir='\e[0;30m' gris='\e[1;30m' rougefonce='\e[0;31m' rouge='\e[1;31m' vertfonce='\e[0;32m' vertclair='\e[1;32m' orange='\e[0;33m' jaune='\e[1;33m' bleufonce='\e[0;34m' mauve='\e[1;34m' fuschia='\e[0;35m' rose='\e[1;35m' cyan='\e[0;36m' bleuclair='\e[1;36m' blanc='\e[1;37m' normal='\e[0;m' echocolor() { echo -e "${@}${normal}" }
Voir sur internet, par exemple : ici pour les codes couleur.
#!/bin/bash source echocolor.sh # ou .nom_du_script minipoesie() { echo "$*" shift 1 echo "$*" echo "$*" shift 2 echo -e "\t$*" echo -e "\t $*" shift 3 echo -e "\t $*" } minipoesie hypathie chez debian facile echocolor $orange "c'est une mauvaise poésie"
L'exécution de ./source.sh permet de coloriser en orange la chaîne “c'est une mauvaise poésie”.
OU MIEUX :
#!/bin/bash source echocolor.sh # ou .nom_du_script minipoesie() { echocolor $bleuclair "$*" shift 1 echocolor $rose "$*" echocolor $jaune "$*" shift 2 echocolor -e $cyan "\t$*" echocolor -e $fuschia "\t $*" shift 3 echocolor -e $mauve "\t $*" } minipoesie hypathie chez debian facile
Avec les couleurs, c'est un peu plus joli