J'essaie de rechercher comment passer des paramètres dans une fonction Bash, mais ce qui apparaît est toujours comment passer des paramètres à partir de la ligne de commande.
Je voudrais passer des paramètres dans mon script. J'ai essayé :
myBackupFunction("..", "...", "xx")
function myBackupFunction($directory, $options, $rootPassword) {
...
}
Mais la syntaxe n'est pas correcte, comment passer un paramètre à ma fonction ?
Il existe deux façons typiques de déclarer une fonction. Je préfère la deuxième approche.
function function_name {
command...
}
ou
function_name () {
command...
}
Pour appeler une fonction avec des arguments :
function_name "$arg1" "$arg2"
La fonction fait référence aux arguments passés par leur position (et non par leur nom), c'est-à-dire $1, $2, et ainsi de suite. $0 est le nom du script lui-même.
Exemple :
function_name () {
echo "Parameter #1 is $1"
}
De plus, vous devez appeler votre fonction après sa déclaration.
#!/usr/bin/env sh
foo 1 # this will fail because foo has not been declared yet.
foo() {
echo "Parameter #1 is $1"
}
foo 2 # this will work.
Output:
./myScript.sh: line 2: foo: command not found
Parameter #1 is 2
[Référence : Guide avancé des scripts Bash][1].
La connaissance des langages de programmation de haut niveau (C/C++/Java/PHP/Python/Perl ...) suggérerait au profane que les fonctions bash devraient fonctionner comme elles le font dans ces autres langages. Au lieu de cela, les fonctions bash fonctionnent comme des commandes de l'interpréteur de commandes et s'attendent à ce que des arguments leur soient passés de la même manière que l'on passe une option à une commande de l'interpréteur de commandes (ls -l). En effet, les arguments de fonctions en bash sont traités comme des paramètres positionnels* ($1, $2..$9, ${10}, ${11}
, et ainsi de suite). Ce n'est pas une surprise si l'on considère comment getopts
fonctionne. Les parenthèses ne sont pas nécessaires pour appeler une fonction en bash.
(Note : Il se trouve que je travaille sur Open Solaris en ce moment).
# bash style declaration for all you PHP/JavaScript junkies. :-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
function backupWebRoot ()
{
tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
echo -e "\nTarball created!\n"
}
# sh style declaration for the purist in you. ;-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
backupWebRoot ()
{
tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
echo -e "\nTarball created!\n"
}
#In the actual shell script
#$0 $1 $2
backupWebRoot ~/public/www/ webSite.tar.zip