Alors, prenons l’exemple (je trouve que c’est toujours plus parlant) le plus simple : une fonction qui affiche les paramètres :
#!/bin/bash
# fonction qui affiche tous les paramètres via leur "numéro"
# Objectif : introduction de $1, $2, $3 ..., $9
function afficheParams1_9()
{
printf "param 1 = %s\n" "$1"
printf "param 2 = %s\n" "$2"
printf "param 3 = %s\n" "$3"
printf "param 4 = %s\n" "$4"
printf "param 5 = %s\n" "$5"
printf "param 6 = %s\n" "$6"
printf "param 7 = %s\n" "$7"
printf "param 8 = %s\n" "$8"
printf "param 9 = %s\n" "$9"
}
# function qui affiche tous les paramètres Version 1
# objectif : introduction de $# et de shift
function afficheAllParamsV1
{
# $# = nombre de paramètres
# il faut comprendre la condition comme ceci : on initialise i à 1, on boucle tant que le nombre de paramètre est > 0 et à chaque boucle on incrémente i de 1
for((i=1;$#>0;i++))
do
printf "param %d = %s\n" $i "$1"
shift # ici on décale les paramètre d'une position : le 2nd vient en position 1, le 3eme en 2, le 4eme en 3 etc...
done
}
# function qui affiche tous les paramètres Version 2
# objectif : introduction de $@
function afficheAllParamsV2
{
# les paramètres positionnels sont en fait contenu dans un tableau. En bash, il est possible de faire référence à [b]tous[/b] les éléments d'un tableau via le caractère @ : "${nomTableau[@]}". Pour les paramètres positionnels, "$@" correspond à la contraction de cette forme et cela correspond à "$1" "$2" ... "$i"
i=0
for element in "$@"
do
((i++))
printf "param %d = %s\n" $i "$element"
done
}
# function qui affiche tous les paramètres Version 3
# objectif : introduction de $*
function afficheAllParamsV3
{
# Il existe une autre forme d'accès à l'ensemble des éléments des paramètres positionnels : $*
# il y a une différence notable avec $@ :
# $* équivaut à $1 $2...$i
# et "$*" équivaut à "$1 $2...$i"
i=0
for element in $*
do
((i++))
printf "param %d = %s\n" $i "$element"
done
}
afficheParams1_9 Valeur1 "Valeur 2" "" "" "*" "encore une valeur"
afficheParams1_9 "" "" "" "" "" "" "" "" '9 !' "et 10"
echo "afficheAllParamsV1"
afficheAllParamsV1 Valeur1 "Valeur 2" "" "" "*" "encore une valeur"
echo "**************"
afficheAllParamsV1 "" "" "" "" "" "" "" "" '9 !' "et 10"
echo "afficheAllParamsV2"
afficheAllParamsV2 Valeur1 "Valeur 2" "" "" "*" "encore une valeur"
echo "**************"
afficheAllParamsV2 "" "" "" "" "" "" "" "" '9 !' "et 10"
echo "afficheAllParamsV3"
afficheAllParamsV3 Valeur1 "Valeur 2" "" "" "*" "encore une valeur"
echo "**************"
afficheAllParamsV3 "" "" "" "" "" "" "" "" '9 !' "et 10"
pour info il existe une forme particulière à la structure for variable in valeur1 valeur2 … valeuri : for variable
…tout simplement ! et cela équivaut à for variable in “$@”
voilà, je te laisse faire un copier/coller dans un script pour tester tout ça et voire la différence entre la V2 et la V3
edit : le but de tout ça est de t’inciter à faire une fonction qui prend en argument le statut d’exécution du rsync et le dossier qui a été sauvegardé et d’y faire le test “if” dedans.
edit2 : désolé de ne pas être plus réactif mais j’ai pas mal de taf et je suis seul à m’occuper des enfants en ce moment …