In bash
jeder Variablen ist im Wesentlichen eine Zeichenfolge (oder ein Array oder eine Funktion, aber lassen Sie uns hier über reguläre Variablen sprechen).
Die Bedingungen werden basierend auf den Rückgabewerten der Testbefehle analysiert - der Rückgabewert ist keine Variable, sondern ein Exit-Status. Wenn Sie if [ ... ]
oder if [[ ]]
oder if grep something
oder so etwas auswerten , bedeutet der Rückgabewert 0 (nicht Zeichenfolge 0, sondern Beendigungsstatus 0 = Erfolg) wahr und der Rest falsch (also genau das Gegenteil von dem, was Sie in kompilierten Programmiersprachen gewohnt sind). Da es jedoch eine Möglichkeit zum Erfolg und viele Möglichkeiten zum Fehlschlagen gibt und das erwartete Ergebnis der Ausführung in der Regel ein Erfolg ist, wird 0 als häufigstes Standardergebnis verwendet, wenn nichts schief geht. Dies ist sehr nützlich, da jede Binärdatei als Test verwendet werden kann. Wenn sie fehlschlägt, ist sie falsch, andernfalls ist sie wahr.
true
und false
Programme (in der Regel von eingebauten Programmen überschrieben) sind nur nützliche kleine Programme, die nichts true
tun. Sie können nichts false
tun und beenden mit 0, während sie versuchen, nichts zu tun und mit 1 "fehlschlagen".
Es liegt an Ihnen, wie Sie Wahrhaftigkeit weitergeben. Es ist durchaus üblich, nur "y" oder "yes" für Wahrheit und Verwendung zu verwenden if [ x"$variable" = x"yes" ]
(fügte die Dummy-Zeichenfolge hinzu, x
da $variable
dies vor der Erstellung eines falschen Befehls if [ = "yes" ]
schützt, der nicht analysiert wird, wenn die Länge Null ist ). Es kann auch nützlich sein, einfach eine leere Zeichenfolge für false zu verwenden und [ -z "$variable ]
zu testen, ob sie eine Länge von Null hat (oder -n
nicht Null ist).
Wie auch immer, es ist ziemlich selten, dass tatsächlich boolesche Werte übergeben werden müssen bash
- es ist viel häufiger, einfach einen exit
Fehler zu melden oder ein nützliches Ergebnis zurückzugeben (oder Null, wenn etwas schief geht und auf leere Zeichenfolgen zu testen), und die meisten Fälle können dies Direkt vom Ausgangsstatus auf Fehler prüfen.
In Ihrem Fall möchten Sie eine Funktion, die wie jeder andere Befehl funktioniert (daher bei Erfolg 0 zurückgeben), sodass Ihre letzte Option die richtige Wahl zu sein scheint.
Außerdem brauchen Sie möglicherweise nicht einmal eine return
Erklärung. Wenn die Funktion einfach genug ist, können Sie die Tatsache verwenden, dass sie einfach den Status des zuletzt ausgeführten Befehls in der Funktion zurückgibt. So kann Ihre Funktion einfach sein
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
Wenn Sie auf das Vorhandensein eines Geräteknotens /proc/mounts
prüfen (oder nachfragen , ob dieser eingehängt ist?).
help true ; help false ; help exit