Exit-Codes in bash hinzufügen (sammeln)

7

Ich muss mich auf einige separate Ausführungen in einem Skript verlassen und möchte sie nicht alle in einer hässlichen "if" -Anweisung bündeln. Ich möchte den Exit-Code '$?' jeder Ausführung und fügen Sie es hinzu; am Ende, wenn dieser Wert über einem Schwellenwert liegt - möchte ich einen Befehl ausführen.

Pseudocode:

%Vor%

Problem: Obwohl das Internet etwas anderes behauptet, weigert bash sich, RESULT und $ zu behandeln. als ganze Zahl. Was ist die korrekte Syntax?

Danke.

    
mik 16.06.2009, 09:14
quelle

7 Antworten

9

Vielleicht möchten Sie sich das eingebaute trap ansehen, um zu sehen, ob es hilfreich wäre:

%Vor%

oder

%Vor%

Sie können eine Falle für Fehler wie folgt einstellen:

%Vor%

Wenn Sie die Fehler (und nur wenn es sich um Fehler handelt) wie folgt zählen, anstatt " $? " zu verwenden, müssen Sie sich keine Gedanken über Rückgabewerte machen, die nicht null oder eins sind. Ein einzelner Rückgabewert von beispielsweise 127 würde Sie sofort über Ihre Schwelle werfen. Sie können trap s auch für andere Signale zusätzlich zu ERR registrieren.

    
Dennis Williamson 16.06.2009, 18:57
quelle
13

Ein kurzer Versuch und eintauchen in bash info sagt:

%Vor%

Da Sie dem Ergebnis mehrmals hinzufügen, können Sie am Anfang wie folgt deklarieren:

%Vor%

sieht viel sauberer aus.

declare -i sagt, dass die Variable Integer ist.

Alternativ können Sie vermeiden, deklarieren und arithmetische Ausdrücke Klammern verwenden:

%Vor%     
Alex Brown 16.06.2009 09:21
quelle
1

Für das Hinzufügen von Zahlen in Bash siehe auch:

%Vor%     
tipi 16.06.2009 10:04
quelle
1

Wenn Sie ALLOWEDERROR in Ihrem Skript verwenden möchten, fügen Sie ihm ein $ -Zeichen, z. B. $ ALLOWEDERROR, voran.

    
xcramps 16.06.2009 19:18
quelle
1

Hier sind einige Möglichkeiten, um einen Zusatz in bash oder sh durchzuführen:

%Vor%

Und einige andere nur in bash:

%Vor%

Wie auch immer, der Exit-Status bei einem Fehler ist nicht immer 1, und sein Wert hängt nicht von der Fehlerstufe ab. Im allgemeinen Fall ist es wenig sinnvoll, die Summe der Status gegen einen Schwellenwert zu überprüfen.

    
mouviciel 16.06.2009 09:30
quelle
0

Verwenden Sie das $(( ... )) -Konstrukt.

%Vor%     
dave4420 16.06.2009 09:26
quelle
-1

Wie mouviciel erwähnt Sammeln von Summe der Rückkehr Codes sieht eher sinnlos. Wahrscheinlich können Sie das Array verwenden, um Ergebniscodes ungleich Null zu akkumulieren und seine Länge zu überprüfen. Beispiel für diesen Ansatz ist unten:

%Vor%     
Rorick 16.06.2009 09:55
quelle

Tags und Links