890 Stimmen

Wie kann ich in einem Bash-Skript das gesamte Skript beenden, wenn eine bestimmte Bedingung eintritt?

Ich schreibe ein Skript in Bash, um einen Code zu testen. Es scheint jedoch dumm, die Tests auszuführen, wenn die Kompilierung des Codes in erster Linie fehlschlägt, in diesem Fall werde ich einfach die Tests abbrechen.

Gibt es eine Möglichkeit, dies zu tun, ohne das gesamte Skript in eine while-Schleife zu packen und Pausen zu verwenden? Etwas wie ein mahnen mahnen mahnen gehen?

7voto

skalee Punkte 11472

Anstelle von if Konstrukts können Sie die Kurzschlussauswertung :

#!/usr/bin/env bash

echo $[1+1]
echo $[2/0]              # division by 0 but execution of script proceeds
echo $[3+1]
(echo $[4/0]) || exit $? # script halted with code 1 returned from `echo`
echo $[5+1]

Man beachte das Klammerpaar, das wegen der Priorität des Alternationsoperators notwendig ist. $? ist eine spezielle Variable, die auf den Exit-Code des zuletzt aufgerufenen Befehls gesetzt ist.

2voto

Gyro Gearloose Punkte 1016

Ich habe die gleiche Frage, kann sie aber nicht stellen, weil es eine doppelte Frage wäre.

Die übliche Antwort, nämlich die Verwendung von exit, funktioniert nicht, wenn das Skript etwas komplizierter ist. Wenn Sie einen Hintergrundprozess verwenden, um die Bedingung zu prüfen, beendet exit nur diesen Prozess, da er in einer Sub-Shell läuft. Um das Skript zu beenden, müssen Sie es explizit beenden (zumindest ist das die einzige Möglichkeit, die ich kenne).

Hier ist ein kleines Skript, wie man das macht:

#!/bin/bash

boom() {
    while true; do sleep 1.2; echo boom; done
}

f() {
    echo Hello
    N=0
    while
        ((N++ <10))
    do
        sleep 1
        echo $N
        #        ((N > 5)) && exit 4 # does not work
        ((N > 5)) && { kill -9 $$; exit 5; } # works 
    done
}

boom &
f &

while true; do sleep 0.5; echo beep; done

Dies ist eine bessere Antwort, aber immer noch unvollständig und ich weiß wirklich nicht, wie ich die Ausleger Teil.

1voto

Eddy763 Punkte 27

Sie können Ihr Programm nach dem Programmnamen auf folgende Weise schließen:

für Soft Exit do

pkill -9 -x programname # Replace "programmname" by your programme

for hard exit do

pkill -15 -x programname # Replace "programmname" by your programme

Wenn Sie wissen möchten, wie die Bedingung für das Schließen eines Programms zu bewerten ist, müssen Sie Ihre Frage anpassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X