Le retour de la valeur de fonction appelée dans un script shell
Je veux retourner de la valeur à partir d'un appel de fonction dans un script shell. Peut-être que je suis absent de la syntaxe. J'ai essayé d'utiliser les variables globales. Mais c'est aussi ne fonctionne pas. Le code est:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
- Pas liés à votre question, mais de toute façon... si vous essayez d'obtenir un verrouillage vous pouvez utiliser "fichier de verrouillage de la commande".
Vous devez vous connecter pour publier un commentaire.
Un Bash fonction ne peut pas retourner une chaîne de caractères directement comme vous le souhaitez. Vous pouvez faire trois choses:
C'est également le cas pour certains autres coquilles.
Voici comment effectuer chacune de ces options:
1. Echo des chaînes
2. De retour de sortie d'état
3. Part variable
function
mot clé pour définir une fonction bash. Qui la rendrait moins portable. De l'enlever.Vous travaillez trop dur. L'ensemble de votre script doit être:
mais même cela est probablement trop verbeux. Je voudrais le code:
mais le message d'erreur est un peu obscur.
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(note de l';
avant l'accolade fermante). Aussi, j'ai souvent de définir un échec fonction qui prend un message facultatif paramètre qu'il imprime sur la sortie stderr, puis se ferme avec un code de retour 1, ce qui me permet d'utiliser le plus lisiblemkdir "$lockdir" || fail "could not create lock dir"
.Si c'est juste un test vrai ou faux, votre fonction
return 0
pour la réussite, etreturn 1
à l'échec. Le test serait alors:Je pense retourner 0 pour succ/1 pour échouer (glenn jackman) et olibre est clair et explicatif réponse dit tout; il suffit de mentionner une sorte de "combo" pour le cas où les résultats ne sont pas binaires et vous préférez définir une variable plutôt que de "l'écho" d'un résultat (par exemple, si votre fonction est ÉGALEMENT supposons que l'écho de quelque chose, cette approche ne fonctionnera pas). Alors, quoi? (ci-dessous Bourne Shell)
comme dans (oui, l'exemple est un peu bête, c'est juste un exemple..)