1 votes

Utilisation de paramètres positionnels dans les fonctions bash

Voici un exemple, dans lequel $1 ne fonctionne pas.

$ cat ~/myScript
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello
$ ./myScript
 Hello

2voto

Terrance Points 35422

Considérez les fonctions comme des mini-scripts à l'intérieur d'un scripts. Ils sont ignorés par le script jusqu'à ce qu'ils soient appelés. Ainsi, les paramètres positionnels sont ignorés jusqu'à ce qu'ils soient transmis à la fonction.

Ils sont cependant limités dans ce qu'ils peuvent faire. Je sais qu'ils ne peuvent pas soutenir if then à l'intérieur de la fonction car elles sont ignorées. Et il y a d'autres règles, mais vous pouvez exit votre script à l'intérieur d'une fonction. Si vous avez des vérifications d'erreurs avec des paramètres, celles-ci doivent être effectuées avant l'appel de la fonction.

Vous voulez passer des paramètres positionnels ($1, $2, $3 etc...) dans votre script. Cependant, vous vous attendez à ce que le paramètre positionnel soit passé à la fonction. Sans spécifier le paramètre lorsque vous appelez la fonction, la fonction ne reçoit pas le paramètre. Vous devez lui transmettre le paramètre.

Prenez votre script :

#!/bin/bash
function hello () {
echo "Hello $1"
}
hello

Il suffit d'ajouter un $1 à la ligne qui dit juste hello par lui-même fera en sorte que le paramètre soit passé à la fonction.

#!/bin/bash
function hello () {
echo "Hello $1"
}
hello $1

Maintenant, appeler le script avec un paramètre produira la sortie désirée :

$ ./myscript Terrance
Hello Terrance

Si vous voulez lui ajouter une vérification rapide pour qu'il ne prenne pas d'entrée vide après le script, ajoutez la vérification suivante dans votre script avant l'appel :

#!/bin/bash
function hello () {
    echo "Hello $1"
}
if [[ $1 != "" ]]; then
    hello $1
    exit
else
    echo "Please input a name.  Example: $0 Terrance"
fi

Mon exemple script ci-dessus fait une vérification de != ce qui signifie not equal to alors les deux "" signifie blanc. Donc, if parameter 1 is not equal to blank then est vrai alors il exécute l'appel de fonction avec le paramètre puis quitte le script après l'appel de la fonction. Sinon, il donne mon message d'erreur. Le paramètre positionnel de $0 est le paramètre de la commande que vous venez d'appeler.

Exemples d'appels de mon script :

$ ./myscript 
Please input a name.  Example: ./myscript Terrance

$ ./myscript Terrance
Hello Terrance

En continuant à écrire des scripts, vous commencez à apprendre plus d'astuces et de commandes appropriées et comment elles sont utilisées. Continuez à écrire des scripts !

J'espère que cela vous aidera !

0voto

Aurelien Points 168

Il fonctionne, mais peut-être ne l'utilisez-vous pas comme vous le devriez. $1 fait référence au premier paramètre de la fonction.

function hello () { echo "Hello $1" }

déclare une fonction de sorte que lorsque vous l'appelez avec des paramètres, elle imprime "Hello" et le premier paramètre :

hello WORLDDD

imprime "Hello WORLDDD"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X