Dans bash
chaque variable se trouve essentiellement une chaîne (ou un tableau ou une fonction, mais parlons ici des variables régulières).
Les conditions sont analysées en fonction des valeurs de retour des commandes de test - la valeur de retour n'est pas une variable, c'est un état de sortie. Lorsque vous évaluez if [ ... ]
ou if [[ ]]
ou if grep something
ou quelque chose comme ça, la valeur de retour 0 (pas la chaîne 0, mais l'état de sortie 0 = succès) signifie vrai et le reste signifie faux (donc, exactement le contraire de ce à quoi vous êtes habitué dans les langages de programmation compilés, mais comme il existe un moyen de réussir et de nombreuses façons d'échouer, et que le résultat attendu de l'exécution est généralement un succès, 0 est utilisé comme résultat par défaut le plus courant si rien ne va mal). C'est très utile car tout binaire peut être utilisé comme test - s'il échoue, c'est faux, sinon c'est vrai.
true
et les false
programmes (généralement remplacés par les prédéfinis) ne sont que de petits programmes utiles qui ne font rien - true
réussissent à ne rien faire et se terminent par 0, tandis qu'ils false
essaient de ne rien faire et "échouent", se terminant par 1. Cela semble inutile mais c'est très pratique pour l'écriture de scripts.
Quant à savoir comment transmettre la vérité, c'est à vous de décider. Il est assez courant d'utiliser simplement "y" ou "oui" pour la vérité et l'utilisation if [ x"$variable" = x"yes" ]
(en ajoutant la chaîne factice x
parce que s'il $variable
se trouve être de longueur nulle, cela protège de la création d'une fausse commande if [ = "yes" ]
qui n'analyse pas). Il peut également être utile d'utiliser simplement une chaîne vide pour false et [ -z "$variable ]
de tester si sa longueur est nulle (ou -n
pour qu'elle soit différente de zéro).
Quoi qu'il en soit, il est assez rare de devoir passer des valeurs booléennes dans bash
- il est beaucoup plus courant de simplement exit
en cas d'échec, ou de retourner un résultat utile (ou zéro en cas de problème et de tester une chaîne vide), et la plupart des cas peuvent tester l'échec directement à partir du statut de sortie.
Dans votre cas, vous voulez une fonction qui agira comme n'importe quelle autre commande (par conséquent, retourne 0 en cas de succès), donc votre dernière option semble le bon choix.
De plus, vous n'aurez peut-être même pas besoin de return
déclaration. Si la fonction est assez simple, vous pouvez utiliser le fait qu'elle renvoie simplement l'état de la dernière commande exécutée dans la fonction. Ainsi, votre fonction peut simplement être
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
si vous testez l'existence d'un nœud de périphérique (ou grep /proc/mounts
pour vérifier s'il est monté?).
help true ; help false ; help exit