Boolesch in Shell Scripting

7

Ich habe ein Problem mit boolean für while-Schleife. Daher wechsle ich stattdessen zur for-Schleife. Aber ich kann den Wert eines Booleschen Wertes nicht ändern, nachdem die Bedingung erfüllt ist.

%Vor%     
Bryan Wong 25.11.2012, 06:22
quelle

2 Antworten

18

Es gibt keinen booleschen Wert in einem Shell-Skript (das ist etwas, das Sie in einer Variablen speichern und als Boolean behandeln können). true und false sind Befehle; true wird mit dem Wert 0 beendet und false wird mit einem Wert ungleich Null beendet. Eine if -Anweisung in bash führt einen Befehl aus; Wenn dieser Befehl 0 zurückgibt, wird die then -Klausel ausgeführt, andernfalls die else -Klausel.

%Vor%

Diese Zeile erfüllt nicht das, was Sie erwarten. In einem Shell-Skript dürfen keine Leerzeichen nach dem Gleichheitszeichen stehen. Der Platz bedeutet, dass Sie mit der Zuweisung fertig sind und jetzt einen Befehl schreiben. Dies entspricht:

%Vor%

Wenn Sie vor einem Befehl (wie diesem) eine Zuweisung haben, führt das die Zuweisung in der Shell nicht aus. Dadurch wird diese Umgebungsvariable in der Umgebung nur für diesen Befehl festgelegt. Die Zuweisung hat keine Auswirkungen auf irgendetwas außerhalb dieses Befehls.

%Vor%

Dies erweitert die Variable $doFirst und versucht, das Ergebnis als Befehl zu interpretieren. Seltsamerweise, wenn $doFirst nicht definiert ist (was es ist, wie ich oben erkläre), nimmt dies den Zweig then . An diesem Punkt machen Sie Ihren ersten Fehler erneut und versuchen, eine Variable als falsch zu definieren, und wieder passiert nichts; $doFirst ist nicht definiert. Sie machen den weiteren Fehler zu versuchen, $doFirst zuzuweisen; Sie verwenden $ , um den Wert einer Variablen abzurufen, bei der Einstellung verwenden Sie den blossen Namen.

Meine Empfehlung wäre, nicht zu versuchen, Booleans in Bash zu verwenden; Verwenden Sie stattdessen Zeichenfolgen und überprüfen Sie den Wert der Zeichenfolge. Beachten Sie, dass ich das Leerzeichen entferne, also setze ich es jetzt auf genau diese Zeichenfolge; Da es keinen Befehl gibt, wird die Variable in der Shell und nicht in der Umgebung für einen einzelnen Befehl festgelegt:

%Vor%     
Brian Campbell 25.11.2012, 06:47
quelle
2

Setzen Sie tatsächlich ein Leerzeichen zwischen = und "true" / "false" oder ist das ein Formatierungsfehler? Das ist eines deiner Probleme.

Ein anderer, wie von Anders Lindahl im Kommentarabschnitt erwähnt, ist, dass Sie, wenn Sie eine Variable im Shell-Scripting setzen, das $ nicht vorne verwenden können. Du musst sagen

%Vor%

Beachten Sie, dass no Leerzeichen um das Gleichheitszeichen stehen.

    
siride 25.11.2012 06:27
quelle

Tags und Links