Dans un script shell, il est tout à fait possible de passer des arguments à une fonction étant donné qu'une fonction est reconnue par le shell comme étant une commande à part entière.
Ces arguments sont récupérables dans les fonctions grâce aux variables spéciales $1, $2, $3, ....., ${10} ......$*, $@ et $#. Ces variables sont aussi locales aux fonctions.
Par contre, la variable $0 contient toujours le nom du script.
Exemple :
$ nl fonction04.sh
1 #!/bin/bash
2 function f1 {
3 echo "Arguments de la fonction f1 :"
4 echo "\$0 => $0"
5 echo "\$1 => $1"
6 echo "\$2 => $2"
7 echo "\$3 => $3"
8 echo "\$* => $*"
9 echo "\$# => $#"
10 }
11 function f2 {
12 echo "Arguments de la fonction f2 :"
13 echo "\$0 => $0"
14 echo "\$1 => $1"
15 echo "\$2 => $2"
16 echo "\$3 => $3"
17 echo "\$* => $*"
18 echo "\$# => $#"
19 }
20 function f3 {
21 echo "Arguments de la fonction f3 :"
22 echo "\$0 => $0"
23 echo "\$1 => $1"
24 echo "\$2 => $2"
25 echo "\$3 => $3"
26 echo "\$* => $*"
27 echo "\$# => $#"
28 }
29 echo "Arguments du programme principal :"
30 echo "\$0 => $0"
31 echo "\$1 => $1"
32 echo "\$2 => $2"
33 echo "\$3 => $3"
34 echo "\$* => $*"
35 echo "\$# => $#"
36 # Appel de la fonction f1 avec 3 arguments
37 f1 a b c
38 # Appel de la fonction f2 avec 3 arguments
39 f2 file.c 2000 500
40 # Appel de la fonction f3 avec 2 arguments provenant du programme principal
41 f3 $2 $3
42 exit 0
$
Appel du script fonction04.sh avec 3 arguments :
$ ./fonction04.sh arg1 arg2 arg3
Arguments du programme principal :
$0 => ./fonction04.sh
$1 => arg1
$2 => arg2
$3 => arg3
$* => arg1 arg2 arg3
$# => 3
Arguments de la fonction f1 :
$0 => ./fonction04.sh
$1 => a
$2 => b
$3 => c
$* => a b c
$# => 3
Arguments de la fonction f2 :
$0 => ./fonction04.sh
$1 => file.c
$2 => 2000
$3 => 500
$* => file.c 2000 500
$# => 3
Arguments de la fonction f3 :
$0 => ./fonction04.sh
$1 => arg2
$2 => arg3
$3 =>
$* => arg2 arg3
$# => 2
$