THEMA
    about_Switch

KURZBESCHREIBUNG
    Erklärt, wie eine switch-Anweisung zur Verarbeitung mehrerer 
    if-Anweisungen verwendet wird.

DETAILBESCHREIBUNG
    Entscheidungen in einem Skript oder Programm können mithilfe einer if-
    Anweisung getroffen werden. Diese Anweisung besagt: "Wenn diese 
    Bedingung zutrifft, führe diese Aktion aus. Andernfalls führe jene 
    Aktion aus." Sie können diesen Vorgang beliebig oft ausführen. Bei 
    einer langen Liste von Bedingungen kann die Verwendung einer 
    if-Anweisung jedoch unhandlich werden. In einer switch-Anweisung 
    können mehrere Bedingungen miteinander kombiniert werden. Wie bei 
    allen Verzweigungsanweisungen müssen Skriptblöcke in geschweifte 
    Klammern ("{}") eingeschlossen werden.

    Eine Switch-Anweisung entspricht im Grunde einer Reihe von 
    if-Anweisungen. Der Ausdruck wird nacheinander mit jeder der 
    Bedingungen verglichen. Bei einer Übereinstimmung wird die mit dieser 
    Bedingung verbundene Aktion ausgeführt. Eine grundlegende 
    switch-Anweisung besitzt folgende Form:

        PS> $a = 3
        PS> switch ($a) {
            1 {"Ergebnis ist eins."}
            2 {"Ergebnis ist zwei."}
            3 {"Ergebnis ist drei."}
            4 {"Ergebnis ist vier."}
            }
        
        Ergebnis ist drei.


    In diesem einfachen Beispiel wird ein Wert mit jeder Bedingung in 
    der Liste verglichen. Anschließend wird in der Aktion die 
    Zeichenfolge für die Übereinstimmung ausgegeben. Es kann jedoch 
    problematisch sein, alle Bedingungen zu prüfen. Beispiel:

        PS> $tag = "tag5"
        PS> switch ($tag){
            tag1 {"Montag"; break}
            tag2 {"Dienstag"; break}
            tag3 {"Mittwoch"; break}
            tag4 {"Donnerstag"; break}
            tag5 {"Freitag"; break}
            tag6 {"Samstag"; break}
            tag7 {"Sonntag"; break}
            tag5 {"Zu viele Tage"; break}
            }
        
        Freitag


    Die Liste enthält zwei Bedingungen für "tag5". Durch die 
    break-Anweisung am Ende jeder Bedingung sucht die switch-Anweisung
    bei einer Übereinstimmung jedoch nicht weiter, sondern führt die 
    zugehörige Aktion aus. Ohne die break-Anweisungen würden beide 
    Aktionen für "tag5" ausgeführt werden. 

    Wenn der in der switch-Anweisung ausgewertete Wert ein Array ist, 
    wird jedes Element im Array der Reihenfolge nach ausgewertet, 
    beginnend mit dem Element 0. Es muss mindestens ein Element 
    vorhanden sein, das mindestens einer Bedingung entspricht, 
    andernfalls wird ein Fehler ausgegeben. Wenn mehr als eine 
    default-Klausel vorhanden ist, wird ebenfalls ein Fehler ausgegeben.

    Die vollständige Syntax der switch-Anweisung lautet wie folgt:

        switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline ) 
    oder

        switch [-regex|-wildcard|-exact][-casesensitive] -file Dateiname

    gefolgt von

        { 
            "Zeichenfolge"|Zahl|Variable|{ Ausdruck } { Anweisungsliste } 
            default { Anweisungsliste } 
        }

    
    Wenn keine Parameter angegeben werden, verhält sich die 
    Switch-Anweisung standardmäßig so, als ob eine genaue 
    Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung 
    gesucht wird. Wenn die Option "pipeline" ein Array ergibt, wird 
    jedes Element des Arrays in aufsteigender Offsetreihenfolge 
    (beginnend bei 0) ausgewertet.  

    Der Switch-Codeblock muss mindestens ein bedingtes Element 
    enthalten und darf nur eine default-Klausel enthalten. Wenn mehr 
    als eine default-Klausel enthalten ist, wird eine "ParseException"
    ausgelöst.

    Für die Switch-Anweisung können folgende Parameter verwendet werden:

        Regex	        Gibt an, dass die Übereinstimmungsklause l, 
                        wenn es sich um eine Zeichenfolge handelt, 
                        als regulärer Ausdruck behandelt wird. 
                        Bei Verwendung dieses Parameters werden 
                        die Optionen "Wildcard" und "Exact" deaktiviert. 
                        Wenn die Übereinstimmungsklausel keine Zeichenfolge 
                        ist, wird dieser Parameter ignoriert.

        Wildcard	Gibt an, dass die Übereinstimmungsklausel, 
                        wenn es sich um eine Zeichenfolge handelt, 
                        als Platzhalterzeichenfolge behandelt wird. 
                        Bei Verwendung dieses Parameters werden die 
                        Optionen "Regex" und "Exact" deaktiviert. 
                        Wenn die Übereinstimmungsklausel keine 
                        Zeichenfolge ist, wird dieser Parameter ignoriert.

        Exact	        Gibt an, dass die Übereinstimmungsklause l, 
                        wenn es sich um eine Zeichenfolge handelt, 
                        genau übereinstimmen muss. Bei Verwendung 
                        dieses Parameters werden die Optionen "Wildcard" und  
                        "Regex" deaktiviert. Wenn die Übereinstimmungsklausel 
                        keine Zeichenfolge ist, wird dieser Parameter ignoriert.
                        
        CaseSensitive	Wenn die Übereinstimmungsklausel eine Zeichenfolge 
                        ist, wird diese zur Berücksichtigung der Groß- 
                        und Kleinschreibung geändert. Wenn die 
                        Übereinstimmungsklausel keine Zeichenfolge ist, 
                        wird dieser Parameter ignoriert.

        File	        Gibt an, dass die Eingabe nicht aus einer Anweisung, 
                        sondern aus einer Datei (oder einem gleichwertigen Objekt) 
                        übernommen werden soll. Bei Angabe mehrerer File-Parameter  
                        wird der letzte Parameter verwendet. Jede Zeile der Datei 
                        wird gelesen und durchläuft den switch-Block.

    Die Optionen "Regex", "Wildcard" und "Exact" dürfen mehrfach 
    verwendet werden. Allerdings richtet sich das Verhalten nach dem 
    letzten Parameter.

    Das Schlüsselwort "Break" gibt an, dass keine weitere 
    Verarbeitung erfolgt und dass die Switch-Anweisung beendet wird. 

    Das Schlüsselwort "Continue" gibt an, dass die Verarbeitung für 
    das aktuelle Token fortgesetzt und das nächste Token in den 
    Bedingungen ausgewertet wird. Wenn keine Tokens verfügbar sind, 
    wird die Switch-Anweisung beendet.

    Für den Block "{ Ausdruck }" kann ein Codeblock angegeben werden, 
    der während des Vergleichs ausgewertet wird. Das aktuelle Objekt 
    wird an die automatische Variable "$_" gebunden und ist während 
    der Auswertung des Ausdrucks verfügbar. Ein Vergleich gilt als 
    Übereinstimmung, wenn der Ausdruck "True" ergibt. Dieser Ausdruck 
    wird in einem neuen Bereich ausgewertet.

    Das Schlüsselwort "Default" in der switch-Anweisung gibt an, dass der 
    Codeblock nach diesem Schlüsselwort ausgeführt werden soll, wenn keine 
    Übereinstimmungen gefunden werden. Ein Programmfluss von Block zu 
    Block ist nicht zulässig, da die schließende Klammer ("}") in der 
    Verbundliste einem expliziten "break" entspricht. 

    Wenn mehrere Übereinstimmungen gefunden werden, wird für jede 
    Übereinstimmung der zugehörige Ausdruck ausgeführt. Dies kann mit 
    den Schlüsselwörtern "Break" und "Continue" verhindert werden, 
    indem keine weiteren Vergleiche ausgeführt werden.


SIEHE AUCH
    about_Break
    about_Continue
    about_If
    about_Script_Blocks




Inhaltsverzeichnis