517 votes

Différence entre le retour et la sortie dans les fonctions BASH

Quelle est la différence entre l'instruction return et exit dans les fonctions BASH par rapport aux codes de sortie?

380voto

Diego Sevilla Points 17274

return renvoie une valeur à partir d'une fonction. exit abandonne le shell courant.

EDIT:

Comme pour votre travail d'édition de la question, concernant les codes de sortie, return n'a rien à voir avec les codes de sortie. Codes de sortie sont destinés à des applications et des scripts, pas de fonctions. Donc, à cet égard, le seul mot clé qui définit le code de sortie du script (celui qui peut être pris par le programme appelant à l'aide de l' $? variable shell) est - exit.

353voto

SiegeX Points 32614

Comme indiqué, return entraînera la sortie de la fonction en cours où exit entraînera la fin du script au point où il est appelé. Voici un exemple de programme pour vous aider à expliquer ceci:

 #!/bin/bash

retfunc()
{
    echo "this is retfunc()"
    return 1
}

exitfunc()
{
    echo "this is exitfunc()"
    exit 1
}

retfunc
echo "We are still here"
exitfunc
echo "We will never see this"
 

Sortie

 $ ./test.sh
this is retfunc()
We are still here
this is exitfunc()
 

66voto

Mike Q Points 461

Je ne pense pas que quelqu'un a vraiment bien répondu à la question parce qu'ils ne décrivent pas comment les deux sont utilisés. OK je crois que nous savons que la sortie tue le script, si jamais on l'appelle, et vous pouvez attribuer un statut à elle aussi bien comme sortie ou de sortie 0 ou à la sortie 7 et ainsi de suite. Ceci peut être utilisé pour déterminer la façon dont le script a été forcé de s'arrêter si on l'appelle par un autre script, etc. Assez à la sortie.

de retour lorsque l'appel sera de retour à la valeur spécifiée pour indiquer la fonction du comportement, généralement de 1 ou de 0. Par exemple:

    #!/bin/bash
    isdirectory() {
      if [ -d "$1" ]
      then
        return 0
      else
        return 1
      fi
    echo "you will not see anything after the return like this text"
    }

case comme ceci:

    if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi

ou comme ceci:

    isdirectory || echo "not a directory"

Dans cet exemple, le test peut être utilisé pour indiquer si le répertoire a été trouvé. notez que quoi que ce soit après le retour ne sera pas exécutée dans la fonction. 0 est vrai, mais faux est de 1 dans la coquille, différent des autres prog langs.

Pour plus d'informations sur les fonctions: http://www.linuxjournal.com/content/return-values-bash-functions

43voto

user2100135 Points 51

Rappelez-vous, les fonctions sont à l'intérieur d'un script et normalement retourner d'où ils avaient été appelés à l'aide de l'instruction return. L'appel d'un script externe est une tout autre affaire, et les scripts s'arrêtent généralement avec un rapport de sortie.

La différence "entre le retour et la sortie de déclaration en BASH fonctions en ce qui concerne les codes de sortie" est très peu. Les deux renvoient un état, pas de valeurs en soi. Un état de zéro indique la réussite, tandis que tout autre statut (de 1 à 255) indique une défaillance. L'instruction de retour sera de retour pour le script d'où il a été appelé, alors que la sortie de la déclaration de la fin de l'intégralité du script à partir de là où il est rencontré.

return 0 # retourne à l'endroit où la fonction a été appelée. $? contient 0 (succès).

return 1 # retourne à l'endroit où la fonction a été appelée. $? contient 1 (échec).

exit 0 # ferme le script complètement. $? contient 0 (succès).

exit 1 # ferme le script complètement. $? contient 1 (échec).

Si votre fonction se termine tout simplement avec aucune instruction de retour, l'état de la dernière commande exécutée est retourné en tant que code d'état (et sera placée dans $?).

Rappelez-vous, le retour et la sortie de redonner un code d'état de 0 à 255, disponible dans $?. Vous ne pouvez pas les trucs tout autre objet dans un code de statut (par exemple, le retour "chat"); il ne fonctionnera pas. Mais, un script peut passer à 255 différentes raisons de l'échec en utilisant des codes d'état.

Vous pouvez définir des variables contenues dans le script d'appel, ou à l'écho des résultats dans la fonction et l'utilisation comamnd substitution dans le script d'appel; mais le retour et la sortie sont à transmettre les codes d'état, et non pas les valeurs ou computatoin résultats que l'on peut attendre dans un langage de programmation C.

34voto

Juraj Points 31

Parfois, vous exécutez un script en utilisant '.' ou 'source'.

. cendre

Si vous incluez une 'exit' dans le fichier a.sh, cela ne mettra pas seulement fin au script, mais mettra fin à votre session shell.

Si vous incluez un 'return' dans le fichier a.sh, il arrête simplement le traitement du script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X