Forum Linux.débutant Pb de syntaxe BASH

Posté par  .
Étiquettes : aucune
0
19
juil.
2004
Bonjour ;)

Petit pb, je m'essaie aux scripts shell.

Pour commencer correctement et me faciliter la vie, je veux utiliser des fonctions,

d'après toutes les infos que j'ai :

je déclare ma fonction comme suit :

nom_de _la_fonction(){
commandes
}

puis je l'appelle simplement par :

nom_de_la_fonction parametres

Jusque là c'est simple...

Alors pourquoi monsieur bash (2.05b) me dit-il :

./script.sh: line 117: nom_de_la_fonction: command not found

???

Aurais-je loupé un élément ?

Question subsidiaire :
Les fonctions, lorsqu'on y arrive, sont-elles utilisables dans toutes les versions de bash ?
  • # Question en plus

    Posté par  . Évalué à 1.

    Comment se fait il que je sois incapable de lire un numéro de ligne avant de déranger tout le monde ? :D En fait le vraie question depuis le début était : Peut on appeler une fonction à l'interieur d'elle même ? Exemple : nom_de_la fonction(){ commande... nom_de_la_fonction paramètre }
    • [^] # Re: Question en plus

      Posté par  . Évalué à 2.

      Aurais-je loupé un élément ?

      A priori non... Si tu mettais un petit bout de code on pourrait peut-être t'en dire plus...

      Peut on appeler une fonction à l'interieur d'elle même ?

      Yep, tu peux faire des fonctions récursives en bash...
      Il faudra juste penser à déclarer "local" les variables d'environnement que tu veux garder propre à un appel.

      Les fonctions, lorsqu'on y arrive, sont-elles utilisables dans toutes les versions de bash ?

      Errrr, je suis pas sûr de bien comprendre la question, le support des fonctions dans bash ça doit remonter à... loin. Je suppose que tu veux parler des autres shells (z/k/csh) ?
      Si tu veux vraiment assurer une bonne compatibilité générale, le mieux est de spécifier comme « magic number » (première ligne de ton fichier): #!/bin/sh
      Ca va probablement invoquer ton shell par défaut (sûrement bash), dans un mode en assurant une rétro-compatibilité maximale (en gros, il va essayer d'émuler un Bourne shell), tout en essayant d'être conforme posix au possible. Évidemment, après tu n'auras plus accès à certains « gadgets » propres à bash.

      Si tu veux plus de détails, jette un oeil dans les manpages, sous « INVOCATION ».
  • # fonctions bash les bases

    Posté par  . Évalué à 1.

    Salut,
    idée comme ça :
    c'est peu être parceque ta fonction est placée après son appel qui est en ligne 177 ?
    il faut toujours déclarer les fonctions au début de fichier avant de commencer les premières commandes du script.

    l'interprêteur peu ainci initialiser tes fonctions avant la première commande du programme qui va appeler ta fonction.

    Ici je créer une fonction directement sur la ligne de commande :

    $ma_fonction(){
    >echo "1"
    >}
    $ma_fonction
    1
    $

    J'espère que cela à pu t'aider.
    Bon courage !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.