GNU/Linux >> Tutoriels Linux >  >> Linux

fonction d'appel déclarée ci-dessous

Comme d'autres l'ont dit, vous ne pouvez pas faire ça.

Mais si vous souhaitez organiser le code dans un seul fichier afin que le programme principal soit en haut du fichier et que d'autres fonctions soient définies ci-dessous, vous pouvez le faire en ayant un main séparé fonction.

Par exemple.

#!/bin/sh

main() {
    if [ "$1" = yes ]; then
        do_task_this
    else
        do_task_that
    fi
}

do_task_this() {
    ...
} 
do_task_that() {
    ...
} 

main "[email protected]"; exit

Lorsque nous appelons main à la fin du fichier, toutes les fonctions sont déjà définies. Passer explicitement "[email protected]" à main est nécessaire pour rendre les arguments de ligne de commande du script visibles dans la fonction.

Le exit explicite sur la même ligne que l'appel à main n'est pas obligatoire, mais peut être utilisé pour éviter qu'un script en cours d'exécution ne soit gâché si le fichier de script est modifié. Sans cela, le shell essaierait de continuer à lire les commandes du fichier de script après main Retour. (voir Comment lire tout le script shell avant de l'exécuter ?)


Non, les fonctions doivent exister dans l'environnement shell au moment de leur appel.

Le "Shell Style Guide" de Google propose une solution :

Une fonction appelée main est requis pour les scripts suffisamment longs pour contenir au moins une autre fonction.

À la toute fin du script, après toutes les fonctions, comme seule instruction non dans une fonction, vous auriez

main "[email protected]"

Cela s'appellerait le main fonction avec les paramètres donnés au script. Le main la fonction pourrait être située en haut du script (le guide de style dit de la mettre en bas, mais encore une fois, cela dit beaucoup de choses).

Lorsque le shell atteint le main call, toutes les fonctions du script ont été analysées et peuvent donc être appelées depuis le main fonction.


Non, les fonctions doivent être déclarées avant d'être utilisées. Les scripts shell sont lus ligne par ligne et traités ligne par ligne; donc une fonction n'existe pas tant que sa déclaration n'a pas été exécutée.


Linux
  1. Appel à la fonction indéfinie simplexml_load_file() – Erreur PHP [Résolu]

  2. Exécution d'une fonction définie par l'utilisateur dans un appel Find -exec ?

  3. Comment appeler une fonction Bash dans le script Bash à l'intérieur d'Awk ?

  4. Erreur fatale :appel à la fonction indéfinie mb_substr() Erreur

  5. appeler une fonction lorsque le programme est terminé avec ctrl c

Comment implémenter un délai d'attente dans l'appel de la fonction de lecture ?

Quand vérifier EINTR et répéter l'appel de fonction ?

exit() peut-il échouer à terminer le processus ?

Appeler une fonction de l'espace utilisateur à partir d'un module du noyau Linux

Le noyau Linux a-t-il une fonction principale ?

Appel système fork() et fonction execv